Skip to content

Commit bb03696

Browse files
committed
refactored clearChannelHintAffinity
1 parent 2711774 commit bb03696

File tree

4 files changed

+47
-33
lines changed

4 files changed

+47
-33
lines changed

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

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -620,22 +620,7 @@ public void clearTransactionAndChannelAffinity(
620620
return;
621621
}
622622
clearTransactionAffinity(transactionId);
623-
clearChannelHintAffinity(grpcGcpChannel, channelHint);
624-
}
625-
626-
@VisibleForTesting
627-
static void clearChannelHintAffinity(
628-
@Nullable ManagedChannel channel, @Nullable Long channelHint) {
629-
if (!(channel instanceof GcpManagedChannel) || channelHint == null) {
630-
return;
631-
}
632-
ClientCall<ExecuteSqlRequest, ResultSet> call =
633-
channel.newCall(
634-
SpannerGrpc.getExecuteSqlMethod(),
635-
CallOptions.DEFAULT
636-
.withOption(GcpManagedChannel.AFFINITY_KEY, String.valueOf(channelHint))
637-
.withOption(GcpManagedChannel.UNBIND_AFFINITY_KEY, true));
638-
call.cancel("Cloud Spanner transaction closed", null);
623+
GrpcGcpAffinityUtil.clearChannelHintAffinity(grpcGcpChannel, channelHint);
639624
}
640625

641626
private static String parseGrpcGcpApiConfig() {
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
* Copyright 2026 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.google.cloud.spanner.spi.v1;
18+
19+
import com.google.cloud.grpc.GcpManagedChannel;
20+
import com.google.spanner.v1.ExecuteSqlRequest;
21+
import com.google.spanner.v1.ResultSet;
22+
import com.google.spanner.v1.SpannerGrpc;
23+
import io.grpc.CallOptions;
24+
import io.grpc.ClientCall;
25+
import io.grpc.ManagedChannel;
26+
import javax.annotation.Nullable;
27+
28+
final class GrpcGcpAffinityUtil {
29+
private GrpcGcpAffinityUtil() {}
30+
31+
static void clearChannelHintAffinity(
32+
@Nullable ManagedChannel channel, @Nullable Long channelHint) {
33+
if (!(channel instanceof GcpManagedChannel) || channelHint == null) {
34+
return;
35+
}
36+
ClientCall<ExecuteSqlRequest, ResultSet> call =
37+
channel.newCall(
38+
SpannerGrpc.getExecuteSqlMethod(),
39+
CallOptions.DEFAULT
40+
.withOption(GcpManagedChannel.AFFINITY_KEY, String.valueOf(channelHint))
41+
.withOption(GcpManagedChannel.UNBIND_AFFINITY_KEY, true));
42+
call.cancel("Cloud Spanner transaction closed", null);
43+
}
44+
}

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

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
import com.google.api.core.InternalApi;
2222
import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
23-
import com.google.cloud.grpc.GcpManagedChannel;
2423
import com.google.cloud.spanner.XGoogSpannerRequestId;
2524
import com.google.common.cache.Cache;
2625
import com.google.common.cache.CacheBuilder;
@@ -33,7 +32,6 @@
3332
import com.google.spanner.v1.ReadRequest;
3433
import com.google.spanner.v1.ResultSet;
3534
import com.google.spanner.v1.RollbackRequest;
36-
import com.google.spanner.v1.SpannerGrpc;
3735
import com.google.spanner.v1.Transaction;
3836
import com.google.spanner.v1.TransactionSelector;
3937
import io.grpc.CallOptions;
@@ -316,24 +314,11 @@ void clearTransactionAndChannelAffinity(ByteString transactionId, @Nullable Long
316314
channel = endpoint.getChannel();
317315
}
318316
}
319-
clearChannelHintAffinity(channel, channelHint);
317+
GrpcGcpAffinityUtil.clearChannelHintAffinity(channel, channelHint);
320318
}
321319
clearAffinity(transactionId);
322320
}
323321

324-
private static void clearChannelHintAffinity(ManagedChannel channel, long channelHint) {
325-
if (!(channel instanceof GcpManagedChannel)) {
326-
return;
327-
}
328-
ClientCall<ExecuteSqlRequest, ResultSet> call =
329-
channel.newCall(
330-
SpannerGrpc.getExecuteSqlMethod(),
331-
CallOptions.DEFAULT
332-
.withOption(GcpManagedChannel.AFFINITY_KEY, String.valueOf(channelHint))
333-
.withOption(GcpManagedChannel.UNBIND_AFFINITY_KEY, true));
334-
call.cancel("Cloud Spanner transaction closed", null);
335-
}
336-
337322
private void maybeExcludeEndpointOnNextCall(
338323
@Nullable ChannelEndpoint endpoint, @Nullable String logicalRequestKey) {
339324
if (endpoint == null || logicalRequestKey == null) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -518,7 +518,7 @@ public void testClearChannelHintAffinityCancelsSyntheticGrpcGcpCall() {
518518
Mockito.eq(SpannerGrpc.getExecuteSqlMethod()), callOptionsCaptor.capture()))
519519
.thenReturn(call);
520520

521-
GapicSpannerRpc.clearChannelHintAffinity(channel, 7L);
521+
GrpcGcpAffinityUtil.clearChannelHintAffinity(channel, 7L);
522522

523523
assertEquals("7", callOptionsCaptor.getValue().getOption(GcpManagedChannel.AFFINITY_KEY));
524524
assertEquals(

0 commit comments

Comments
 (0)