Skip to content
This repository was archived by the owner on May 8, 2026. It is now read-only.

Commit f767983

Browse files
committed
fix"
1 parent 2522fe9 commit f767983

2 files changed

Lines changed: 47 additions & 4 deletions

File tree

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -557,8 +557,8 @@ static class Entry {
557557
ManagedChannel getManagedChannel() {
558558
return this.channel;
559559
}
560-
561-
private int totalOutstandingRpcs() {
560+
@VisibleForTesting
561+
int totalOutstandingRpcs() {
562562
return outstandingUnaryRpcs.get() + outstandingStreamingRpcs.get();
563563
}
564564

@@ -576,7 +576,8 @@ int getAndResetMaxOutstanding() {
576576
* channel has been successfully retained and it is the responsibility of the caller to release
577577
* it.
578578
*/
579-
private boolean retain(boolean isStreaming) {
579+
@VisibleForTesting
580+
boolean retain(boolean isStreaming) {
580581
AtomicInteger counter = isStreaming ? outstandingStreamingRpcs : outstandingUnaryRpcs;
581582
AtomicInteger maxCounter = isStreaming ? maxOutstandingStreamingRpcs : maxOutstandingUnaryRpcs;
582583
int currentOutstanding = counter.incrementAndGet();
@@ -593,7 +594,7 @@ private boolean retain(boolean isStreaming) {
593594
* Notify the channel that the number of outstanding RPCs has decreased. If shutdown has been
594595
* previously requested, this method will shutdown the channel if its the last outstanding RPC.
595596
*/
596-
private void release(boolean isStreaming) {
597+
void release(boolean isStreaming) {
597598
AtomicInteger counter = isStreaming ? outstandingStreamingRpcs : outstandingUnaryRpcs;
598599
int newCount = counter.decrementAndGet();
599600
if (newCount < 0) {

google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/gaxx/grpc/BigtableChannelPoolSettingsTest.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,12 @@
2424
import java.util.Arrays;
2525
import java.util.Set;
2626
import java.util.stream.Collectors;
27+
28+
import io.grpc.ManagedChannel;
2729
import org.junit.Test;
2830
import org.junit.runner.RunWith;
2931
import org.junit.runners.JUnit4;
32+
import org.mockito.Mockito;
3033

3134
@RunWith(JUnit4.class)
3235
public class BigtableChannelPoolSettingsTest {
@@ -48,6 +51,45 @@ public void testToBigtableChannelPoolSettingsAllFieldsSetCopiesCorrectly() throw
4851
assertSettingsCopiedCorrectly(originalSettings, copiedSettings);
4952
}
5053

54+
@Test
55+
public void testEntryRetainReleaseByType() {
56+
ManagedChannel mockChannel = Mockito.mock(ManagedChannel.class);
57+
BigtableChannelPool.Entry entry = new BigtableChannelPool.Entry(mockChannel);
58+
59+
// Test Unary
60+
assertThat(entry.retain(false)).isTrue(); // Unary
61+
assertThat(entry.outstandingUnaryRpcs.get()).isEqualTo(1);
62+
assertThat(entry.outstandingStreamingRpcs.get()).isEqualTo(0);
63+
assertThat(entry.totalOutstandingRpcs()).isEqualTo(1);
64+
// Test Unary release
65+
entry.release(false);
66+
assertThat(entry.outstandingUnaryRpcs.get()).isEqualTo(0);
67+
assertThat(entry.outstandingStreamingRpcs.get()).isEqualTo(0);
68+
assertThat(entry.totalOutstandingRpcs()).isEqualTo(0);
69+
70+
// Test Streaming
71+
assertThat(entry.retain(true)).isTrue(); // Streaming
72+
assertThat(entry.outstandingUnaryRpcs.get()).isEqualTo(0);
73+
assertThat(entry.outstandingStreamingRpcs.get()).isEqualTo(1);
74+
assertThat(entry.totalOutstandingRpcs()).isEqualTo(1);
75+
// Test Streaming again
76+
assertThat(entry.retain(true)).isTrue(); // Streaming again
77+
assertThat(entry.outstandingStreamingRpcs.get()).isEqualTo(2);
78+
assertThat(entry.outstandingUnaryRpcs.get()).isEqualTo(0);
79+
assertThat(entry.totalOutstandingRpcs()).isEqualTo(2);
80+
81+
entry.release(true);
82+
assertThat(entry.outstandingStreamingRpcs.get()).isEqualTo(1);
83+
assertThat(entry.outstandingUnaryRpcs.get()).isEqualTo(0);
84+
assertThat(entry.totalOutstandingRpcs()).isEqualTo(1);
85+
86+
entry.release(true);
87+
assertThat(entry.outstandingStreamingRpcs.get()).isEqualTo(0);
88+
assertThat(entry.outstandingUnaryRpcs.get()).isEqualTo(0);
89+
assertThat(entry.totalOutstandingRpcs()).isEqualTo(0);
90+
}
91+
92+
5193
@Test
5294
public void testToBigtableChannelPoolSettingsDefaultValuesCopiesCorrectly() throws Exception {
5395
ChannelPoolSettings originalSettings = ChannelPoolSettings.builder().build();

0 commit comments

Comments
 (0)