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

Fix opentracing header name issue #5840

Merged
merged 4 commits into from
Oct 31, 2023
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Locale;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;

Expand Down Expand Up @@ -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)) {
Copy link
Contributor

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

Copy link
Contributor Author

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.

continue;
}
String value = getter.get(carrier, key);
if (value == null) {
continue;
}
baggageBuilder.put(key.replace(OtTracePropagator.PREFIX_BAGGAGE_HEADER, ""), value);
String baggageKey = lowercaseKey.replace(OtTracePropagator.PREFIX_BAGGAGE_HEADER, "");
baggageBuilder.put(baggageKey, value);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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

Copy link
Contributor Author

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 to Ot-Baggage-Some-Key (for example golang http package does this)
  • ot-baggage-Some-Key to ot-baggage-some-key (tomcat does this)
  • ot-baggage-Some-Key to ot-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.

Copy link
Contributor

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).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done!

}
Baggage baggage = baggageBuilder.build();
if (!baggage.isEmpty()) {
Expand Down