File tree Expand file tree Collapse file tree 3 files changed +24
-0
lines changed
hypertrace-core-graphql-grpc-utils/src
main/java/org/hypertrace/core/graphql/utils/grpc
test/java/org/hypertrace/core/graphql/utils/grpc Expand file tree Collapse file tree 3 files changed +24
-0
lines changed Original file line number Diff line number Diff line change 11package org .hypertrace .core .graphql .utils .grpc ;
22
3+ import java .util .Optional ;
34import org .hypertrace .core .graphql .context .GraphQlRequestContext ;
45import org .hypertrace .core .grpcutils .context .RequestContext ;
56
67public interface GrpcContextBuilder {
78 RequestContext build (GraphQlRequestContext requestContext );
9+
10+ Optional <GraphQlRequestContext > tryRestore (RequestContext requestContext );
811}
Original file line number Diff line number Diff line change 44import static org .hypertrace .core .grpcutils .context .RequestContextConstants .REQUEST_ID_HEADER_KEY ;
55import 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 ;
710import java .util .Arrays ;
811import java .util .Collection ;
912import java .util .Map ;
1619
1720class 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 );
Original file line number Diff line number Diff line change 99import java .util .Map ;
1010import java .util .Optional ;
1111import org .hypertrace .core .graphql .context .GraphQlRequestContext ;
12+ import org .hypertrace .core .grpcutils .context .RequestContext ;
1213import org .junit .jupiter .api .Test ;
1314import org .junit .jupiter .api .extension .ExtendWith ;
1415import 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}
You can’t perform that action at this time.
0 commit comments