Skip to content

Commit 9853dd5

Browse files
fix(bigtable): resolve check-then-act race condition in VRpcImpl (#13196)
1 parent 39e93fe commit 9853dd5

1 file changed

Lines changed: 1 addition & 4 deletions

File tree

  • java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/session

java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/session/VRpcImpl.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,19 +96,16 @@ public void start(ReqT req, VRpcCallContext ctx, VRpcListener<RespT> listener) {
9696
Status status;
9797
boolean retryable = true;
9898

99-
if (state.get() != State.NEW) {
99+
if (!state.compareAndSet(State.NEW, State.STARTED)) {
100100
status = Status.INTERNAL.withDescription("VRpc already started in state: " + state.get());
101101
retryable = false;
102102
} else if (ctx.getOperationInfo().getDeadline().timeRemaining(TimeUnit.MICROSECONDS)
103103
< TimeUnit.MILLISECONDS.toMicros(1)) {
104-
// transitioning to the close state is handled below
105-
state.set(State.STARTED);
106104
// Don't send RPCs that don't have any hope of succeeding
107105
status =
108106
Status.DEADLINE_EXCEEDED.withDescription("Remaining deadline is too short to send RPC");
109107
retryable = false;
110108
} else {
111-
state.set(State.STARTED);
112109
Metadata vRpcMetadata =
113110
Metadata.newBuilder()
114111
.setAttemptNumber(ctx.getOperationInfo().getAttemptNumber())

0 commit comments

Comments
 (0)