-
Notifications
You must be signed in to change notification settings - Fork 841
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
Fix opentracing header name issue #5840
Fix opentracing header name issue #5840
Conversation
Codecov ReportAll modified and coverable lines are covered by tests ✅
... and 77 files with indirect coverage changes 📢 Thoughts on this report? Let us know!. |
cf73c42
to
a66f8c3
Compare
a66f8c3
to
ff58f67
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this pr presents a valid concern.
String baggageKey = lowercaseKey.replace(OtTracePropagator.PREFIX_BAGGAGE_HEADER, ""); | ||
baggageBuilder.put(baggageKey, value); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
String baggageKey = lowercaseKey.replace(OtTracePropagator.PREFIX_BAGGAGE_HEADER, ""); | |
baggageBuilder.put(baggageKey, value); | |
baggageBuilder.put(key.substring(OtTracePropagator.PREFIX_BAGGAGE_HEADER.length()), value); |
Using substring preserves the case of the baggage key
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can not preserve the case of the baggage key anyway. They are carried in http headers and headers are case insensitive. The servlet implementations, and upstream services (sometimes) change it. I have seen several type of changes:
ot-baggage-some-key
toOt-Baggage-Some-Key
(for example golang http package does this)ot-baggage-Some-Key
toot-baggage-some-key
(tomcat does this)ot-baggage-Some-Key
toot-baggage-Some-Key
(keeping the case, undertow does this)
I think, since there is no guarantee of baggage name casing, we can at least keep it consistent and lowercase it everywhere (as tomcat does). Of course I have no strong objection with your changes and if you still prefer your changes I can apply them.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: I think it would be better to use substring on the lowercaseKey
. Substring is a simpler operation than replace and should be a bit more efficient. Also replace replaces all occurrences of given substring which would have undesired results if the key contained multiple copies of the prefix (which I guess is unlikely to ever happen).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done!
@@ -108,14 +109,16 @@ public <C> Context extract(Context context, @Nullable C carrier, TextMapGetter<C | |||
if (carrier != null) { | |||
BaggageBuilder baggageBuilder = Baggage.builder(); | |||
for (String key : getter.keys(carrier)) { | |||
if (!key.startsWith(PREFIX_BAGGAGE_HEADER)) { | |||
String lowercaseKey = key.toLowerCase(Locale.ROOT); | |||
if (!lowercaseKey.startsWith(PREFIX_BAGGAGE_HEADER)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
alternatively could use
if (!key.regionMatches(true, 0, PREFIX_BAGGAGE_HEADER, 0, PREFIX_BAGGAGE_HEADER.length())) {
continue;
}
to avoid converting the whole key
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we decided to keep the case of header, I will also apply this change.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry for the delay looking at this @abdolsamad. Can you write a unit test to confirm the new behavior?
@jack-berg I added a test for the new behaviour. Please don't hesitate to tell me if more test or changes are required. |
@laurit do you still have open questions about this? If not, I'll merge. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jack-berg looks good, left 1 more comment
5bea945
to
50b911f
Compare
@laurit @jack-berg I changed the |
Fixes an issue in opentracing baggage propagation.
There is no guarantee that
TextMapGetter
s will send headers(.keys()
) as lowercase strings. Some of theTextMapGetter
s likeundertow:1.7
send the headers as they receive them(e.g.Ot-Baggage-Key
) but ensure case insensitivity of headers by allowingget()
to be called regardless of the header name case. This behaviour breaks theOtTracePropagator
because it expects lowercase literalot-baggage-
to be present in header name.This PR fixes that issue.