stankiewicz commented on code in PR #36962:
URL: https://github.com/apache/beam/pull/36962#discussion_r2643511948


##########
sdks/java/core/src/main/java/org/apache/beam/sdk/values/WindowedValues.java:
##########
@@ -996,6 +1089,51 @@ public List<? extends Coder<?>> getComponents() {
     }
   }
 
+  public static class OpenTelemetryContextSerializer {
+
+    private static final 
TextMapSetter<BeamFnApi.Elements.ElementMetadata.Builder> SETTER =
+        (carrier, key, value) -> {
+          if (carrier == null) {
+            return;
+          }
+          if ("traceparent".equals(key)) {
+            carrier.setTraceparent(value);
+          } else if ("tracestate".equals(key)) {
+            carrier.setTracestate(value);
+          }
+        };
+
+    private static final TextMapGetter<BeamFnApi.Elements.ElementMetadata> 
GETTER =
+        new TextMapGetter<BeamFnApi.Elements.ElementMetadata>() {
+          @Override
+          public Iterable<String> keys(BeamFnApi.Elements.ElementMetadata 
carrier) {
+            return Lists.newArrayList("traceparent", "tracestate");
+          }
+
+          @Override
+          public @Nullable String get(
+              BeamFnApi.Elements.@Nullable ElementMetadata carrier, String 
key) {
+            if (carrier == null) {
+              return null;
+            }
+            if ("traceparent".equals(key)) {
+              return carrier.getTraceparent();
+            } else if ("tracestate".equals(key)) {
+              return carrier.getTracestate();
+            }
+            return null;
+          }
+        };
+
+    public static void write(Context from, 
BeamFnApi.Elements.ElementMetadata.Builder builder) {
+      W3CTraceContextPropagator.getInstance().inject(from, builder, SETTER);
+    }
+
+    public static Context read(BeamFnApi.Elements.ElementMetadata from) {
+      return W3CTraceContextPropagator.getInstance().extract(Context.root(), 
from, GETTER);

Review Comment:
   Yes, but I don't want to reimplement W3CTraceContextPropagator to have 
getTraceState /getTraceParent methods. 
   
   On nits - ValueInSingleWindow is not implementing WindowedValue interface 
now. Once it will, I can improve that.
   Setter has builder already.   



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to