Skip to content

Commit 8ad6a12

Browse files
changes
1 parent cc38c52 commit 8ad6a12

6 files changed

Lines changed: 55 additions & 8 deletions

File tree

grpc-context-utils/src/main/java/org/hypertrace/core/grpcutils/context/RequestContextConstants.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,16 @@ public class RequestContextConstants {
2020

2121
public static final String AUTHORIZATION_HEADER = "authorization";
2222

23+
public static final String CTX_HEADER_PREFIX = "x-ctx-";
24+
public static final String CTX_SCAN_ID_HEADER_KEY = "x-ctx-scan-id";
25+
2326
/** The values in this set are looked up with case insensitivity. */
2427
public static final Set<String> HEADER_PREFIXES_TO_BE_PROPAGATED =
2528
Set.of(
2629
TENANT_ID_HEADER_KEY,
2730
CONTEXT_ID_HEADER_KEY,
2831
SUPPRESS_USER_TRACKING_HEADER_KEY,
32+
CTX_HEADER_PREFIX,
2933
"X-B3-",
3034
"grpc-trace-bin",
3135
"traceparent",
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.hypertrace.core.grpcutils.context;
2+
3+
import static org.hypertrace.core.grpcutils.context.RequestContextConstants.CTX_SCAN_ID_HEADER_KEY;
4+
import static org.hypertrace.core.grpcutils.context.RequestContextConstants.REQUEST_ID_HEADER_KEY;
5+
import static org.hypertrace.core.grpcutils.context.RequestContextConstants.TENANT_ID_HEADER_KEY;
6+
7+
import io.grpc.Metadata;
8+
9+
public class ScanMetadataBuilder {
10+
11+
public static Metadata build(String tenantId, String requestId, String scanId) {
12+
Metadata metadata = new Metadata();
13+
metadata.put(Metadata.Key.of(TENANT_ID_HEADER_KEY, Metadata.ASCII_STRING_MARSHALLER), tenantId);
14+
metadata.put(
15+
Metadata.Key.of(REQUEST_ID_HEADER_KEY, Metadata.ASCII_STRING_MARSHALLER), requestId);
16+
metadata.put(Metadata.Key.of(CTX_SCAN_ID_HEADER_KEY, Metadata.ASCII_STRING_MARSHALLER), scanId);
17+
return metadata;
18+
}
19+
}

grpc-context-utils/src/test/java/org/hypertrace/core/grpcutils/context/RequestContextTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,23 @@ void testWithUserTrackingSuppressedOverridesExisting() {
320320
assertTrue(suppressedContext.isUserTrackingSuppressed());
321321
}
322322

323+
@Test
324+
void testCtxHeadersPropagatedFromMetadata() {
325+
Metadata metadata = new Metadata();
326+
metadata.put(RequestContextConstants.TENANT_ID_METADATA_KEY, "test-tenant");
327+
metadata.put(Metadata.Key.of("x-ctx-scan-id", Metadata.ASCII_STRING_MARSHALLER), "scan-123");
328+
metadata.put(Metadata.Key.of("x-ctx-trace-id", Metadata.ASCII_STRING_MARSHALLER), "trace-456");
329+
metadata.put(
330+
Metadata.Key.of("x-unknown-header", Metadata.ASCII_STRING_MARSHALLER), "should-be-dropped");
331+
332+
RequestContext requestContext = RequestContext.fromMetadata(metadata);
333+
334+
assertEquals(Optional.of("test-tenant"), requestContext.getTenantId());
335+
assertEquals(Optional.of("scan-123"), requestContext.getHeaderValue("x-ctx-scan-id"));
336+
assertEquals(Optional.of("trace-456"), requestContext.getHeaderValue("x-ctx-trace-id"));
337+
assertEquals(Optional.empty(), requestContext.getHeaderValue("x-unknown-header"));
338+
}
339+
323340
@Test
324341
void testUserTrackingSuppressedHeaderPropagation() {
325342
Metadata metadata = new Metadata();

grpc-server-utils/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,5 @@ dependencies {
2121
testImplementation(commonLibs.junit.jupiter)
2222
testImplementation(commonLibs.mockito.core)
2323
testImplementation(commonLibs.mockito.junit)
24+
testRuntimeOnly("ch.qos.logback:logback-classic:1.4.14")
2425
}

grpc-server-utils/gradle.lockfile

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
# This is a Gradle generated file for dependency locking.
22
# Manual edits can break the build and are not advised.
33
# This file is expected to be part of source control.
4+
ch.qos.logback:logback-classic:1.4.14=testRuntimeClasspath
5+
ch.qos.logback:logback-core:1.4.14=testRuntimeClasspath
46
com.auth0:java-jwt:4.4.0=runtimeClasspath,testRuntimeClasspath
57
com.auth0:jwks-rsa:0.22.0=runtimeClasspath,testRuntimeClasspath
6-
com.fasterxml.jackson.core:jackson-annotations:2.16.1=runtimeClasspath,testRuntimeClasspath
7-
com.fasterxml.jackson.core:jackson-core:2.16.1=runtimeClasspath,testRuntimeClasspath
8-
com.fasterxml.jackson.core:jackson-databind:2.16.1=runtimeClasspath,testRuntimeClasspath
9-
com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
8+
com.fasterxml.jackson.core:jackson-annotations:2.21=runtimeClasspath,testRuntimeClasspath
9+
com.fasterxml.jackson.core:jackson-core:2.21.1=runtimeClasspath,testRuntimeClasspath
10+
com.fasterxml.jackson.core:jackson-databind:2.21.1=runtimeClasspath,testRuntimeClasspath
11+
com.fasterxml.jackson:jackson-bom:2.21.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
1012
com.google.android:annotations:4.1.1.4=runtimeClasspath,testRuntimeClasspath
1113
com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
1214
com.google.code.gson:gson:2.13.1=runtimeClasspath,testRuntimeClasspath
@@ -20,16 +22,16 @@ io.grpc:grpc-api:1.75.0=compileClasspath,runtimeClasspath,testCompileClasspath,t
2022
io.grpc:grpc-bom:1.75.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
2123
io.grpc:grpc-context:1.75.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
2224
io.grpc:grpc-core:1.75.0=runtimeClasspath,testRuntimeClasspath
23-
io.netty:netty-bom:4.1.125.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
25+
io.netty:netty-bom:4.1.130.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
2426
io.perfmark:perfmark-api:0.27.0=runtimeClasspath,testRuntimeClasspath
2527
net.bytebuddy:byte-buddy-agent:1.14.10=testCompileClasspath,testRuntimeClasspath
2628
net.bytebuddy:byte-buddy:1.14.10=testCompileClasspath,testRuntimeClasspath
2729
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath
2830
org.checkerframework:checker-qual:3.43.0=runtimeClasspath,testRuntimeClasspath
2931
org.codehaus.mojo:animal-sniffer-annotations:1.24=runtimeClasspath,testRuntimeClasspath
30-
org.eclipse.jetty:jetty-bom:11.0.24=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
31-
org.hypertrace.bom:hypertrace-bom:0.3.65=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
32-
org.hypertrace.core.kafkastreams.framework:kafka-bom:0.6.3=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
32+
org.eclipse.jetty:jetty-bom:11.0.26=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
33+
org.hypertrace.bom:hypertrace-bom:0.3.73=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
34+
org.hypertrace.core.kafkastreams.framework:kafka-bom:0.6.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
3335
org.junit.jupiter:junit-jupiter-api:5.10.0=testCompileClasspath
3436
org.junit.jupiter:junit-jupiter-api:5.10.1=testRuntimeClasspath
3537
org.junit.jupiter:junit-jupiter-engine:5.10.1=testRuntimeClasspath

grpc-server-utils/src/main/java/org/hypertrace/core/grpcutils/server/RequestContextLoggingServerInterceptor.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.hypertrace.core.grpcutils.server;
22

33
import static org.hypertrace.core.grpcutils.context.RequestContextConstants.CONTEXT_ID_HEADER_KEY;
4+
import static org.hypertrace.core.grpcutils.context.RequestContextConstants.CTX_HEADER_PREFIX;
45
import static org.hypertrace.core.grpcutils.context.RequestContextConstants.REQUEST_ID_HEADER_KEY;
56
import static org.hypertrace.core.grpcutils.context.RequestContextConstants.TENANT_ID_HEADER_KEY;
67

@@ -69,6 +70,9 @@ public void onMessage(ReqT message) {
6970
MDC.put(REQUEST_ID_HEADER_KEY, requestId);
7071
opTenantId.ifPresent(s -> MDC.put(TENANT_ID_HEADER_KEY, s));
7172
opContextId.ifPresent(s -> MDC.put(CONTEXT_ID_HEADER_KEY, s));
73+
currentContext.getAllHeaders().stream()
74+
.filter(header -> header.getName().startsWith(CTX_HEADER_PREFIX))
75+
.forEach(header -> MDC.put(header.getName(), header.getValue()));
7276
} catch (Exception e) {
7377
log.error("Error while setting request context details in MDC params", e);
7478
}

0 commit comments

Comments
 (0)