Skip to content

Commit 9350ace

Browse files
committed
fix
1 parent bdfe951 commit 9350ace

1 file changed

Lines changed: 18 additions & 11 deletions

File tree

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/gaxx/grpc/BigtableChannelPool.java

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import java.time.Clock;
3737
import java.util.ArrayList;
3838
import java.util.List;
39+
import java.util.Optional;
3940
import java.util.Random;
4041
import java.util.concurrent.CancellationException;
4142
import java.util.concurrent.ConcurrentLinkedQueue;
@@ -50,6 +51,8 @@
5051
import java.util.logging.Logger;
5152
import javax.annotation.Nullable;
5253

54+
import static com.google.bigtable.v2.PeerInfo.TransportType.TRANSPORT_TYPE_UNKNOWN;
55+
5356
/**
5457
* A {@link ManagedChannel} that will send requests round-robin via a set of channels.
5558
*
@@ -545,9 +548,11 @@ static class Entry implements BigtableChannelObserver {
545548
* outstanding RPCs has to happen when the ClientCall is closed or the ClientCall failed to
546549
* start.
547550
*/
551+
552+
/** this contains the PeerInfo field of the most recent rpc on this channel entry. */
548553
@VisibleForTesting
549-
final AtomicReference<com.google.bigtable.v2.PeerInfo.TransportType> transportTypeHolder =
550-
new AtomicReference<>(com.google.bigtable.v2.PeerInfo.TransportType.TRANSPORT_TYPE_UNKNOWN);
554+
volatile PeerInfo.TransportType transportType =
555+
TRANSPORT_TYPE_UNKNOWN;
551556

552557
@VisibleForTesting final AtomicInteger errorCount = new AtomicInteger(0);
553558
@VisibleForTesting final AtomicInteger successCount = new AtomicInteger(0);
@@ -580,19 +585,17 @@ static class Entry implements BigtableChannelObserver {
580585
this.channel = channel;
581586
}
582587

583-
void checkAndSetTransportType(CallOptions callOptions) {
588+
void setTransportType(CallOptions callOptions) {
584589
MetadataExtractorInterceptor.SidebandData sidebandData =
585590
MetadataExtractorInterceptor.SidebandData.from(callOptions);
586591

587592
// Set to the specific transport type if present, otherwise default to UNKNOWN
588593
// we could check the Status and set it to unknown, but we might have PeerInfo with some non
589594
// OK Status
590-
if (sidebandData != null && sidebandData.getPeerInfo() != null) {
591-
transportTypeHolder.set(sidebandData.getPeerInfo().getTransportType());
592-
} else {
593-
transportTypeHolder.set(
594-
com.google.bigtable.v2.PeerInfo.TransportType.TRANSPORT_TYPE_UNKNOWN);
595-
}
595+
transportType = Optional.ofNullable(sidebandData)
596+
.map(MetadataExtractorInterceptor.SidebandData::getPeerInfo)
597+
.map(PeerInfo::getTransportType)
598+
.orElse(TRANSPORT_TYPE_UNKNOWN);
596599
}
597600

598601
ManagedChannel getManagedChannel() {
@@ -697,7 +700,7 @@ public long getAndResetSuccessCount() {
697700

698701
@Override
699702
public PeerInfo.TransportType getTransportType() {
700-
return transportTypeHolder.get();
703+
return transportType;
701704
}
702705

703706
void incrementErrorCount() {
@@ -761,9 +764,13 @@ public void start(Listener<RespT> responseListener, Metadata headers) {
761764
try {
762765
super.start(
763766
new SimpleForwardingClientCallListener<RespT>(responseListener) {
767+
@Override
768+
public void onHeaders(Metadata headers) {
769+
entry.setTransportType(callOptions);
770+
super.onHeaders(headers);
771+
}
764772
@Override
765773
public void onClose(Status status, Metadata trailers) {
766-
entry.checkAndSetTransportType(callOptions);
767774
if (!wasClosed.compareAndSet(false, true)) {
768775
LOG.log(
769776
Level.WARNING,

0 commit comments

Comments
 (0)