Skip to content

Commit 5a32706

Browse files
refactor: add ability to restore context (#111)
1 parent 3584f91 commit 5a32706

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package org.hypertrace.core.graphql.utils.grpc;
22

3+
import java.util.Optional;
34
import org.hypertrace.core.graphql.context.GraphQlRequestContext;
45
import org.hypertrace.core.grpcutils.context.RequestContext;
56

67
public interface GrpcContextBuilder {
78
RequestContext build(GraphQlRequestContext requestContext);
9+
10+
Optional<GraphQlRequestContext> tryRestore(RequestContext requestContext);
811
}

hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilder.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import static org.hypertrace.core.grpcutils.context.RequestContextConstants.REQUEST_ID_HEADER_KEY;
55
import static org.hypertrace.core.grpcutils.context.RequestContextConstants.TENANT_ID_HEADER_KEY;
66

7+
import com.google.common.cache.Cache;
8+
import com.google.common.cache.CacheBuilder;
9+
import java.time.Duration;
710
import java.util.Arrays;
811
import java.util.Collection;
912
import java.util.Map;
@@ -16,8 +19,12 @@
1619

1720
class PlatformGrpcContextBuilder implements GrpcContextBuilder {
1821

22+
private final Cache<String, GraphQlRequestContext> contextCache =
23+
CacheBuilder.newBuilder().expireAfterAccess(Duration.ofMinutes(1)).maximumSize(1000).build();
24+
1925
@Override
2026
public RequestContext build(GraphQlRequestContext requestContext) {
27+
this.contextCache.put(requestContext.getRequestId(), requestContext);
2128
Map<String, String> grpcHeaders =
2229
this.mergeMaps(
2330
requestContext.getTracingContextHeaders(),
@@ -30,6 +37,11 @@ public RequestContext build(GraphQlRequestContext requestContext) {
3037
return this.build(grpcHeaders);
3138
}
3239

40+
@Override
41+
public Optional<GraphQlRequestContext> tryRestore(RequestContext requestContext) {
42+
return requestContext.getRequestId().map(this.contextCache::getIfPresent);
43+
}
44+
3345
private RequestContext build(@Nonnull Map<String, String> headers) {
3446
RequestContext platformContext = new RequestContext();
3547
headers.forEach(platformContext::add);

hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilderTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.util.Map;
1010
import java.util.Optional;
1111
import org.hypertrace.core.graphql.context.GraphQlRequestContext;
12+
import org.hypertrace.core.grpcutils.context.RequestContext;
1213
import org.junit.jupiter.api.Test;
1314
import org.junit.jupiter.api.extension.ExtendWith;
1415
import org.mockito.Mock;
@@ -61,4 +62,12 @@ void passesAuthHeaderToPlatformContextIfPresent() {
6162
"auth header",
6263
this.builder.build(this.mockRequestContext).getRequestHeaders().get("authorization"));
6364
}
65+
66+
@Test
67+
void testRestoreContext() {
68+
when(this.mockRequestContext.getRequestId()).thenReturn("request id");
69+
RequestContext resultContext = this.builder.build(this.mockRequestContext);
70+
assertEquals(Optional.empty(), this.builder.tryRestore(RequestContext.forTenantId("other")));
71+
assertEquals(Optional.of(this.mockRequestContext), this.builder.tryRestore(resultContext));
72+
}
6473
}

0 commit comments

Comments
 (0)