@@ -280,6 +280,8 @@ public class GapicSpannerRpc implements SpannerRpc {
280280
281281  private  Supplier <Boolean > directPathEnabledSupplier  = () -> false ;
282282
283+   private  final  GrpcCallContext  baseGrpcCallContext ;
284+ 
283285  public  static  GapicSpannerRpc  create (SpannerOptions  options ) {
284286    return  new  GapicSpannerRpc (options );
285287  }
@@ -333,6 +335,7 @@ public GapicSpannerRpc(final SpannerOptions options) {
333335    this .endToEndTracingEnabled  = options .isEndToEndTracingEnabled ();
334336    this .numChannels  = options .getNumChannels ();
335337    this .isGrpcGcpExtensionEnabled  = options .isGrpcGcpExtensionEnabled ();
338+     this .baseGrpcCallContext  = createBaseCallContext ();
336339
337340    if  (initializeStubs ) {
338341      // First check if SpannerOptions provides a TransportChannelProvider. Create one 
@@ -1978,6 +1981,20 @@ private static <T> T get(final Future<T> future) throws SpannerException {
19781981    }
19791982  }
19801983
1984+   private  GrpcCallContext  createBaseCallContext () {
1985+     GrpcCallContext  context  = GrpcCallContext .createDefault ();
1986+     if  (compressorName  != null ) {
1987+       // This sets the compressor for Client -> Server. 
1988+       context  = context .withCallOptions (context .getCallOptions ().withCompression (compressorName ));
1989+     }
1990+     if  (endToEndTracingEnabled ) {
1991+       context  = context .withExtraHeaders (metadataProvider .newEndToEndTracingHeader ());
1992+     }
1993+     return  context 
1994+         .withStreamWaitTimeoutDuration (waitTimeout )
1995+         .withStreamIdleTimeoutDuration (idleTimeout );
1996+   }
1997+ 
19811998  // Before removing this method, please verify with a code owner that it is not used 
19821999  // in any internal testing infrastructure. 
19832000  @ VisibleForTesting 
@@ -2002,7 +2019,7 @@ <ReqT, RespT> GrpcCallContext newCallContext(
20022019      ReqT  request ,
20032020      MethodDescriptor <ReqT , RespT > method ,
20042021      boolean  routeToLeader ) {
2005-     GrpcCallContext  context  = GrpcCallContext . createDefault () ;
2022+     GrpcCallContext  context  = this . baseGrpcCallContext ;
20062023    if  (options  != null ) {
20072024      if  (this .isGrpcGcpExtensionEnabled ) {
20082025        // Set channel affinity in gRPC-GCP. 
@@ -2019,28 +2036,17 @@ <ReqT, RespT> GrpcCallContext newCallContext(
20192036        context  = context .withChannelAffinity (Option .CHANNEL_HINT .getLong (options ).intValue ());
20202037      }
20212038    }
2022-     if  (compressorName  != null ) {
2023-       // This sets the compressor for Client -> Server. 
2024-       context  = context .withCallOptions (context .getCallOptions ().withCompression (compressorName ));
2025-     }
20262039    context  = context .withExtraHeaders (metadataProvider .newExtraHeaders (resource , projectName ));
20272040    if  (routeToLeader  && leaderAwareRoutingEnabled ) {
20282041      context  = context .withExtraHeaders (metadataProvider .newRouteToLeaderHeader ());
20292042    }
2030-     if  (endToEndTracingEnabled ) {
2031-       context  = context .withExtraHeaders (metadataProvider .newEndToEndTracingHeader ());
2032-     }
20332043    if  (callCredentialsProvider  != null ) {
20342044      CallCredentials  callCredentials  = callCredentialsProvider .getCallCredentials ();
20352045      if  (callCredentials  != null ) {
20362046        context  =
20372047            context .withCallOptions (context .getCallOptions ().withCallCredentials (callCredentials ));
20382048      }
20392049    }
2040-     context  =
2041-         context 
2042-             .withStreamWaitTimeoutDuration (waitTimeout )
2043-             .withStreamIdleTimeoutDuration (idleTimeout );
20442050    CallContextConfigurator  configurator  = SpannerOptions .CALL_CONTEXT_CONFIGURATOR_KEY .get ();
20452051    ApiCallContext  apiCallContextFromContext  = null ;
20462052    if  (configurator  != null ) {
0 commit comments