Skip to content

Commit 372c99e

Browse files
committed
fix(bigtable): address PR review comments on ReadModifyWriteRow shim
- Remove stale TODO comments from TableAsync.readModifyWriteRow - Rephrase "must never be retried" to "should not be retried unless directed by server" for CheckAndMutateRow and ReadModifyWriteRow in TableBase - Extract shared buildRow logic into RowConverter utility, used by both ReadRowShim and ReadModifyWriteRowShim - Remove CheckAndMutateRowShim and ReadModifyWriteRowShimInner from ShimImpl until session routing is enabled; decorator methods now return the classic callable directly to avoid creating unused session pools Change-Id: I7a803404cbf5c945b7e03aac4c970f0ed31feec8
1 parent 1e618c9 commit 372c99e

6 files changed

Lines changed: 55 additions & 66 deletions

File tree

‎java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/TableAsync.java‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,6 @@ public CompletableFuture<SessionCheckAndMutateRowResponse> checkAndMutateRow(
133133
return f;
134134
}
135135

136-
// TODO: get deadline from compatibility layer
137136
public CompletableFuture<SessionReadModifyWriteRowResponse> readModifyWriteRow(
138137
SessionReadModifyWriteRowRequest req, Deadline deadline) {
139138
UnaryResponseFuture<SessionReadModifyWriteRowResponse> f = new UnaryResponseFuture<>();

‎java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/TableBase.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ public void checkAndMutateRow(
181181
new RetryingVRpc<>(() -> sessionPool.newCall(checkAndMutateRowDescriptor), timer);
182182
VRpcTracer tracer =
183183
metrics.newTableTracer(sessionPool.getInfo(), checkAndMutateRowDescriptor, deadline);
184-
// CheckAndMutateRow is not idempotent and must never be retried.
184+
// CheckAndMutateRow is not idempotent and should not be retried unless directed by server.
185185
new VOperationImpl<>(retry, Context.current(), userCallbackExecutor, tracer, deadline, false)
186186
.start(req, listener);
187187
}
@@ -194,7 +194,7 @@ public void readModifyWriteRow(
194194
new RetryingVRpc<>(() -> sessionPool.newCall(readModifyWriteRowDescriptor), timer);
195195
VRpcTracer tracer =
196196
metrics.newTableTracer(sessionPool.getInfo(), readModifyWriteRowDescriptor, deadline);
197-
// ReadModifyWriteRow is not idempotent and must never be retried.
197+
// ReadModifyWriteRow is not idempotent and should not be retried unless directed by server.
198198
new VOperationImpl<>(retry, Context.current(), userCallbackExecutor, tracer, deadline, false)
199199
.start(req, listener);
200200
}

‎java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/compat/ShimImpl.java‎

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,8 @@
3434
import com.google.cloud.bigtable.data.v2.internal.api.Client;
3535
import com.google.cloud.bigtable.data.v2.internal.api.Client.Resource;
3636
import com.google.cloud.bigtable.data.v2.internal.channels.ChannelPool;
37-
import com.google.cloud.bigtable.data.v2.internal.compat.ops.CheckAndMutateRowShim;
3837
import com.google.cloud.bigtable.data.v2.internal.compat.ops.DivertingUnaryCallable;
3938
import com.google.cloud.bigtable.data.v2.internal.compat.ops.MutateRowShim;
40-
import com.google.cloud.bigtable.data.v2.internal.compat.ops.ReadModifyWriteRowShim;
41-
import com.google.cloud.bigtable.data.v2.internal.compat.ops.ReadModifyWriteRowShimInner;
4239
import com.google.cloud.bigtable.data.v2.internal.compat.ops.ReadRowShim;
4340
import com.google.cloud.bigtable.data.v2.internal.compat.ops.ReadRowShimInner;
4441
import com.google.cloud.bigtable.data.v2.internal.csm.Metrics;
@@ -91,8 +88,6 @@ public class ShimImpl implements Shim {
9188

9289
private final ReadRowShimInner readRowShimInner;
9390
private final MutateRowShim mutateRowShim;
94-
private final CheckAndMutateRowShim checkAndMutateRowShim;
95-
private final ReadModifyWriteRowShimInner readModifyWriteRowShimInner;
9691

9792
public static Shim create(
9893
ClientInfo clientInfo,
@@ -208,8 +203,6 @@ public ShimImpl(
208203

209204
this.readRowShimInner = new ReadRowShimInner(client);
210205
this.mutateRowShim = new MutateRowShim(client);
211-
this.checkAndMutateRowShim = new CheckAndMutateRowShim(client);
212-
this.readModifyWriteRowShimInner = new ReadModifyWriteRowShimInner(client);
213206
}
214207

215208
/**
@@ -388,24 +381,16 @@ public UnaryCallable<RowMutation, Void> decorateMutateRow(
388381
@Override
389382
public UnaryCallable<ConditionalRowMutation, Boolean> decorateCheckAndMutateRow(
390383
UnaryCallable<ConditionalRowMutation, Boolean> classic, UnaryCallSettings<?, ?> settings) {
391-
return new DivertingUnaryCallable<>(
392-
configManager,
393-
classic,
394-
checkAndMutateRowShim,
395-
Util.extractTimeout(settings),
396-
debugTagTracer);
384+
// TODO: enable session routing once diversion by method is added
385+
return classic;
397386
}
398387

399388
@Override
400389
public <RowT> UnaryCallable<ReadModifyWriteRow, RowT> decorateReadModifyWriteRow(
401390
UnaryCallable<ReadModifyWriteRow, RowT> classic,
402391
RowAdapter<RowT> rowAdapter,
403392
UnaryCallSettings<?, ?> settings) {
404-
return new DivertingUnaryCallable<>(
405-
configManager,
406-
classic,
407-
new ReadModifyWriteRowShim<>(readModifyWriteRowShimInner, rowAdapter),
408-
Util.extractTimeout(settings),
409-
debugTagTracer);
393+
// TODO: enable session routing once server-side changes are rolled out
394+
return classic;
410395
}
411396
}

‎java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/compat/ops/ReadModifyWriteRowShim.java‎

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@
1515
*/
1616
package com.google.cloud.bigtable.data.v2.internal.compat.ops;
1717

18-
import com.google.bigtable.v2.Cell;
19-
import com.google.bigtable.v2.Column;
20-
import com.google.bigtable.v2.Family;
2118
import com.google.bigtable.v2.SessionReadModifyWriteRowResponse;
2219
import com.google.cloud.bigtable.data.v2.models.DefaultRowAdapter;
2320
import com.google.cloud.bigtable.data.v2.models.ReadModifyWriteRow;
@@ -68,24 +65,6 @@ private static <T> T buildRow(RowBuilder<T> adapter, SessionReadModifyWriteRowRe
6865
if (!input.hasRow()) {
6966
return null;
7067
}
71-
com.google.bigtable.v2.Row protoRow = input.getRow();
72-
73-
adapter.startRow(protoRow.getKey());
74-
75-
for (Family family : protoRow.getFamiliesList()) {
76-
for (Column column : family.getColumnsList()) {
77-
for (Cell cell : column.getCellsList()) {
78-
adapter.startCell(
79-
family.getName(),
80-
column.getQualifier(),
81-
cell.getTimestampMicros(),
82-
cell.getLabelsList(),
83-
0);
84-
adapter.cellValue(cell.getValue());
85-
adapter.finishCell();
86-
}
87-
}
88-
}
89-
return adapter.finishRow();
68+
return RowConverter.buildRow(adapter, input.getRow());
9069
}
9170
}

‎java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/compat/ops/ReadRowShim.java‎

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@
1515
*/
1616
package com.google.cloud.bigtable.data.v2.internal.compat.ops;
1717

18-
import com.google.bigtable.v2.Cell;
19-
import com.google.bigtable.v2.Column;
20-
import com.google.bigtable.v2.Family;
2118
import com.google.bigtable.v2.SessionReadRowResponse;
2219
import com.google.cloud.bigtable.data.v2.models.DefaultRowAdapter;
2320
import com.google.cloud.bigtable.data.v2.models.Query;
@@ -67,24 +64,6 @@ private static <T> T buildRow(RowBuilder<T> adapter, SessionReadRowResponse inpu
6764
if (!input.hasRow()) {
6865
return null;
6966
}
70-
com.google.bigtable.v2.Row protoRow = input.getRow();
71-
72-
adapter.startRow(protoRow.getKey());
73-
74-
for (Family family : protoRow.getFamiliesList()) {
75-
for (Column column : family.getColumnsList()) {
76-
for (Cell cell : column.getCellsList()) {
77-
adapter.startCell(
78-
family.getName(),
79-
column.getQualifier(),
80-
cell.getTimestampMicros(),
81-
cell.getLabelsList(),
82-
0);
83-
adapter.cellValue(cell.getValue());
84-
adapter.finishCell();
85-
}
86-
}
87-
}
88-
return adapter.finishRow();
67+
return RowConverter.buildRow(adapter, input.getRow());
8968
}
9069
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
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+
* https://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+
package com.google.cloud.bigtable.data.v2.internal.compat.ops;
17+
18+
import com.google.bigtable.v2.Cell;
19+
import com.google.bigtable.v2.Column;
20+
import com.google.bigtable.v2.Family;
21+
import com.google.bigtable.v2.Row;
22+
import com.google.cloud.bigtable.data.v2.models.RowAdapter.RowBuilder;
23+
24+
class RowConverter {
25+
26+
private RowConverter() {}
27+
28+
static <T> T buildRow(RowBuilder<T> builder, Row protoRow) {
29+
builder.startRow(protoRow.getKey());
30+
31+
for (Family family : protoRow.getFamiliesList()) {
32+
for (Column column : family.getColumnsList()) {
33+
for (Cell cell : column.getCellsList()) {
34+
builder.startCell(
35+
family.getName(),
36+
column.getQualifier(),
37+
cell.getTimestampMicros(),
38+
cell.getLabelsList(),
39+
0);
40+
builder.cellValue(cell.getValue());
41+
builder.finishCell();
42+
}
43+
}
44+
}
45+
return builder.finishRow();
46+
}
47+
}

0 commit comments

Comments
 (0)