Skip to content

Commit 74fd174

Browse files
authored
fix: always include default client lib header (#2676)
1 parent 54d4511 commit 74fd174

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import com.google.api.pathtemplate.PathTemplate;
5656
import com.google.cloud.RetryHelper;
5757
import com.google.cloud.RetryHelper.RetryHelperException;
58+
import com.google.cloud.ServiceOptions;
5859
import com.google.cloud.grpc.GcpManagedChannelBuilder;
5960
import com.google.cloud.grpc.GcpManagedChannelOptions;
6061
import com.google.cloud.grpc.GcpManagedChannelOptions.GcpMetricsOptions;
@@ -296,7 +297,8 @@ public GapicSpannerRpc(final SpannerOptions options) {
296297
ApiClientHeaderProvider internalHeaderProvider =
297298
internalHeaderProviderBuilder
298299
.setClientLibToken(
299-
options.getClientLibToken(), GaxProperties.getLibraryVersion(options.getClass()))
300+
options.getClientLibToken() + " " + ServiceOptions.getGoogApiClientLibName(),
301+
GaxProperties.getLibraryVersion(options.getClass()))
300302
.setTransportToken(
301303
GaxGrpcProperties.getGrpcTokenName(), GaxGrpcProperties.getGrpcVersion())
302304
.build();

google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpcTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import com.google.api.gax.rpc.HeaderProvider;
3434
import com.google.auth.oauth2.AccessToken;
3535
import com.google.auth.oauth2.OAuth2Credentials;
36+
import com.google.cloud.ServiceOptions;
3637
import com.google.cloud.spanner.DatabaseClient;
3738
import com.google.cloud.spanner.DatabaseId;
3839
import com.google.cloud.spanner.Dialect;
@@ -77,6 +78,7 @@
7778
import java.net.InetSocketAddress;
7879
import java.util.HashMap;
7980
import java.util.Map;
81+
import java.util.Objects;
8082
import java.util.concurrent.TimeUnit;
8183
import org.junit.After;
8284
import org.junit.Before;
@@ -181,6 +183,12 @@ public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(
181183
String auth =
182184
headers.get(Key.of("authorization", Metadata.ASCII_STRING_MARSHALLER));
183185
assertThat(auth).isEqualTo("Bearer " + VARIABLE_OAUTH_TOKEN);
186+
String clientLibToken =
187+
headers.get(
188+
Metadata.Key.of("x-goog-api-client", Metadata.ASCII_STRING_MARSHALLER));
189+
assertNotNull(clientLibToken);
190+
assertTrue(
191+
clientLibToken.contains(ServiceOptions.getGoogApiClientLibName() + "/"));
184192
if (call.getMethodDescriptor()
185193
.equals(SpannerGrpc.getExecuteStreamingSqlMethod())
186194
|| call.getMethodDescriptor().equals(SpannerGrpc.getExecuteSqlMethod())) {
@@ -575,6 +583,27 @@ public void testRouteToLeaderHeaderWithLeaderAwareRoutingDisabled() {
575583
assertFalse(isRouteToLeader);
576584
}
577585

586+
@Test
587+
public void testCustomClientLibToken_alsoContainsDefaultToken() {
588+
SpannerOptions options =
589+
createSpannerOptions().toBuilder().setClientLibToken("pg-adapter").build();
590+
try (Spanner spanner = options.getService()) {
591+
DatabaseClient databaseClient =
592+
spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]"));
593+
TransactionRunner runner = databaseClient.readWriteTransaction();
594+
runner.run(transaction -> transaction.executeUpdate(UPDATE_FOO_STATEMENT));
595+
}
596+
Key<String> key = Key.of("x-goog-api-client", Metadata.ASCII_STRING_MARSHALLER);
597+
assertTrue(lastSeenHeaders.containsKey(key));
598+
assertTrue(
599+
lastSeenHeaders.get(key),
600+
Objects.requireNonNull(lastSeenHeaders.get(key)).contains("pg-adapter"));
601+
assertTrue(
602+
lastSeenHeaders.get(key),
603+
Objects.requireNonNull(lastSeenHeaders.get(key))
604+
.contains(ServiceOptions.getGoogApiClientLibName() + "/"));
605+
}
606+
578607
private SpannerOptions createSpannerOptions() {
579608
String endpoint = address.getHostString() + ":" + server.getPort();
580609
return SpannerOptions.newBuilder()

0 commit comments

Comments
 (0)