Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

isOptional and Related checks are wrong and breaks compatibility between versions #518

Open
whizzzkid opened this issue Oct 8, 2020 · 5 comments

Comments

@whizzzkid
Copy link

Namaste Team

The isOptional check seems to breaking our version compatibility. Our projects use v 0.19 and 0.22 and we have been trying to figure why is our tracing broken using hapi. We seem to have narrowed it down to the bad isOptional check here: https://github.com/openzipkin/zipkin-js/blob/master/packages/zipkin/src/option.js#L65

Log from our service looks like so:

(node:19) UnhandledPromiseRejectionWarning: Error: Error: data (Some(true)) is not an Option!
    at verifyIsOptional (/app/node_modules/service-container/node_modules/zipkin/lib/index.js:223:11)
    at new TraceId (/app/node_modules/service-container/node_modules/zipkin/lib/index.js:773:5)
    at Tracer.createChildId (/app/node_modules/service-container/node_modules/zipkin/lib/index.js:1130:21)
    at HttpClientInstrumentation.recordRequest (/app/node_modules/service-container/node_modules/zipkin/lib/index.js:1929:37)
    at /app/node_modules/service-container/lib/requestRouter/wrapWreckRequest.js:32:48
    at ExplicitContext.scoped (/app/node_modules/service-container/node_modules/zipkin/lib/index.js:1347:16)
    at Tracer.scoped (/app/node_modules/service-container/node_modules/zipkin/lib/index.js:1090:28)
    at /app/node_modules/service-container/lib/requestRouter/wrapWreckRequest.js:31:75
    at new Promise (<anonymous>)

Where service-container is a dependency that bootstraps our service. The app level version is using [email protected] and the dependecy is using [email protected]. This breaks how we generate trace instance and can be seen in this Proof of Concept PR: https://github.com/openzipkin/zipkin-js/pull/517/files

This, essentially means we cannot even upgrade to fix the issue, because the instanceof check does not seem to be the right way to check for instances. In the POC, even though the class signature is same, isOptional fails.

Please Advise!

@eirslett
Copy link
Contributor

eirslett commented Oct 8, 2020

Have you tried using zipkin as a peerDependency instead of a regular dependency?

@whizzzkid
Copy link
Author

We have not @eirslett, is that in the pitfalls/faqs which we missed?

@eirslett
Copy link
Contributor

eirslett commented Oct 8, 2020

I don't think it's written anywhere. I remember vaguely that this was the solution to a similar problem I encountered some years ago. Using peerDependency will ensure that all your modules are using the same zipkin dependency.
What you should do is change the package.json of your service-container source code - and make zipkin a peerDependency. Your main application should have zipkin as a "normal" dependency. Look inside the node_modules folder after running npm install, just to verify that's the case. (Also, have a look at package-lock.json)

(I'm sorry about the Optional/Some/None thing, it was a terrible design mistake anyway. The code was ported from Scala/Twitter, too literally. Should have used nullable types in JS instead.)

@whizzzkid
Copy link
Author

Ok, thanks @eirslett will give this a shot, really appreciate your quick turnaround.

@jcchavezs
Copy link
Contributor

Please let us know if that fixes the issue for you, hapi is breaking on async await. Check this issue about it: #483 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants