1818import com .google .api .core .ApiFunction ;
1919import com .google .api .gax .grpc .InstantiatingGrpcChannelProvider ;
2020import com .google .api .gax .rpc .FixedHeaderProvider ;
21+ import com .google .api .gax .rpc .HeaderProvider ;
2122import com .google .api .gax .rpc .StubSettings ;
2223import com .google .cloud .bigtable .admin .v2 .BigtableInstanceAdminClient ;
2324import com .google .cloud .bigtable .admin .v2 .BigtableInstanceAdminSettings ;
3132import com .google .common .base .Predicate ;
3233import com .google .common .base .Predicates ;
3334import com .google .common .base .Strings ;
35+ import com .google .common .collect .ImmutableMap ;
3436import io .grpc .CallOptions ;
3537import io .grpc .Channel ;
3638import io .grpc .ClientCall ;
4850import java .util .HashMap ;
4951import java .util .List ;
5052import java .util .Map ;
53+ import java .util .Optional ;
5154import javax .annotation .Nullable ;
5255
5356/**
@@ -84,9 +87,12 @@ public boolean apply(InetSocketAddress input) {
8487 private static final String TABLE_PROPERTY_NAME = "bigtable.table" ;
8588 private static final String CMEK_KMS_KEY_PROPERTY_NAME = "bigtable.kms_key_name" ;
8689
90+ private static final String TRACING_COOKIE_PROPERTY_NAME = "bigtable.tracing_cookie" ;
91+
8792 private final String projectId ;
8893 private final String instanceId ;
8994 private final String tableId ;
95+ private final String tracingCookie ;
9096 private final String kmsKeyName ;
9197
9298 private final BigtableDataSettings .Builder dataSettings ;
@@ -104,7 +110,8 @@ static CloudEnv fromSystemProperties() {
104110 getOptionalProperty (CMEK_KMS_KEY_PROPERTY_NAME , "" ),
105111 getRequiredProperty (PROJECT_PROPERTY_NAME ),
106112 getRequiredProperty (INSTANCE_PROPERTY_NAME ),
107- getRequiredProperty (TABLE_PROPERTY_NAME ));
113+ getRequiredProperty (TABLE_PROPERTY_NAME ),
114+ getOptionalProperty (TRACING_COOKIE_PROPERTY_NAME ));
108115 }
109116
110117 private CloudEnv (
@@ -113,10 +120,12 @@ private CloudEnv(
113120 @ Nullable String kmsKeyName ,
114121 String projectId ,
115122 String instanceId ,
116- String tableId ) {
123+ String tableId ,
124+ @ Nullable String tracingCookie ) {
117125 this .projectId = projectId ;
118126 this .instanceId = instanceId ;
119127 this .tableId = tableId ;
128+ this .tracingCookie = tracingCookie ;
120129 this .kmsKeyName = kmsKeyName ;
121130
122131 this .dataSettings =
@@ -127,6 +136,9 @@ private CloudEnv(
127136
128137 setupRemoteAddrInterceptor (dataSettings .stubSettings ());
129138 configureUserAgent (dataSettings .stubSettings ());
139+ if (tracingCookie != null ) {
140+ injectTracingCookie (tracingCookie , dataSettings .stubSettings ());
141+ }
130142
131143 this .tableAdminSettings =
132144 BigtableTableAdminSettings .newBuilder ().setProjectId (projectId ).setInstanceId (instanceId );
@@ -140,6 +152,18 @@ private CloudEnv(
140152 }
141153 }
142154
155+ private static void injectTracingCookie (
156+ String tracingCookie , EnhancedBigtableStubSettings .Builder settings ) {
157+ HeaderProvider oldHeaderProvider = settings .getHeaderProvider ();
158+ settings .setHeaderProvider (
159+ () ->
160+ Optional .ofNullable (oldHeaderProvider )
161+ .map (p -> ImmutableMap .<String , String >builder ().putAll (p .getHeaders ()))
162+ .orElse (ImmutableMap .builder ())
163+ .put ("cookie" , tracingCookie )
164+ .build ());
165+ }
166+
143167 private void setupRemoteAddrInterceptor (StubSettings .Builder stubSettings ) {
144168 // Build an remote address restricting interceptor
145169 final ClientInterceptor interceptor ;
@@ -204,6 +228,7 @@ public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
204228 return new SimpleForwardingClientCall <ReqT , RespT >(clientCall ) {
205229 @ Override
206230 public void start (Listener <RespT > responseListener , Metadata headers ) {
231+ System .out .println (headers );
207232 super .start (
208233 new SimpleForwardingClientCallListener <RespT >(responseListener ) {
209234 @ Override
@@ -361,6 +386,11 @@ public String getKmsKeyName() {
361386 return kmsKeyName ;
362387 }
363388
389+ @ Nullable
390+ private static String getOptionalProperty (String prop ) {
391+ return System .getProperty (prop );
392+ }
393+
364394 private static String getOptionalProperty (String prop , String defaultValue ) {
365395 return MoreObjects .firstNonNull (System .getProperty (prop ), defaultValue );
366396 }
0 commit comments