Closed jcorbin closed 8 years ago
The plan is that a central authority, such as hyperbahn, can collect and report on these things... and eventually enforce cut off versions.
:+1:
@jcorbin So, if Hyperbahn decides to cut off a version. What init res message should it send?
lgtm
@ShanniLi probably:
Basically, an even harder form of our current draining mechanism.
Oh furthermore @ShanniLi, these fields would be required of both init req and init res, since when hyperbahn connects to you, it cares about the versions sent in your init res to its init req.
@jcorbin Thanks, makes sense. :)
Why are these needed at all? Why does tchannel/hyperbahn care about implementation language? And what is tchannel_language_version
? Is that a SemVer of the library implementing hyperbahn/tchannel? Are you planning on cutting off older versions of libraries? That seems crazy.
Great questions @willsalz , we're adding this primarily to get visibility in production so that we can help eliminate version skew. It may be possible to get similar benefit by auditing repositories and build artifacts internally, but the reality of what's being used in production is likely to be much more reliable than any such integration.
the tchannel_language_version
is the version of "language", whatever that means for the language:
node
it would simple be the runtime version of nodepython
or pypy
or others, it's again pretty clearjava
it'll likely be the runtime version (irrespective of how it was built)go
it'll be the version of go that built the binary, since there is no dynamic runtimeEventually we may decide to cut off old versions, but only based on clear auditing of what versions are being used and weighed against whatever the reason is for that enforcement.
We'll first have to track getting everyone upgraded to libraries which send this new field, including e.g. a backported version to tchannel-node's 2.x series.
:ship:
OK why not have people put this in headers or something?
This is in the headers, of the connection init message @willsalz ; we'd like to avoid transmitting it as overhead on every single call message.
This defines three new init headers:
tchannel_language
to identify the implementation languagetchannel_language_version
to identify the version of the implementation languagetchannel_version
to identify the version of the implementationr @breerly @prashantv @mranney @ShanniLi