Skip to content

Commit 813c6f0

Browse files
authored
fix: check and mutate should check for existence on empty byte values (#3480)
1 parent 3ce4cbc commit 813c6f0

File tree

3 files changed

+13
-11
lines changed

3 files changed

+13
-11
lines changed

CONTRIBUTING.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ again.
2424

2525
```sh
2626
mvn clean verify \
27+
-Penable-integration-tests \
2728
-PbigtableIntegrationTest \
2829
-Dgoogle.bigtable.project.id=[your cloud project id] \
2930
-Dgoogle.bigtable.instance.id=[your cloud bigtable instance id]
@@ -33,6 +34,7 @@ again.
3334

3435
```sh
3536
mvn clean verify \
37+
-Penable-integration-tests \
3638
-PbigtableIntegrationTestH2 \
3739
-Dgoogle.bigtable.project.id=[your cloud project id] \
3840
-Dgoogle.bigtable.instance.id=[your cloud bigtable instance id]

bigtable-client-core-parent/bigtable-hbase-integration-tests-common/src/test/java/com/google/cloud/bigtable/hbase/AbstractTestCheckAndMutate.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,10 @@ public void testCheckAndPutSameQual() throws Exception {
5555
Assert.assertFalse(
5656
"Column doesn't exist. Should fail.",
5757
checkAndPut(rowKey, SharedTestEnvRule.COLUMN_FAMILY, qual, value2, put1));
58-
Assert.assertFalse(
59-
"Column still doesn't exist. Should fail.",
58+
Assert.assertTrue(
59+
"Column should be created on zero bytes.",
6060
checkAndPut(rowKey, SharedTestEnvRule.COLUMN_FAMILY, qual, ZERO_BYTES, put1));
61-
Assert.assertTrue(checkAndPut(rowKey, SharedTestEnvRule.COLUMN_FAMILY, qual, null, put1));
61+
Assert.assertFalse(checkAndPut(rowKey, SharedTestEnvRule.COLUMN_FAMILY, qual, null, put1));
6262

6363
// Fail on null check, now there's a value there
6464
Put put2 = new Put(rowKey).addColumn(SharedTestEnvRule.COLUMN_FAMILY, qual, value2);
@@ -153,8 +153,8 @@ public void testCheckAndPutDiffQual() throws Exception {
153153
Assert.assertFalse(
154154
"Column doesn't exist. Should fail.",
155155
checkAndPut(rowKey, SharedTestEnvRule.COLUMN_FAMILY, qual2, value2, put1));
156-
Assert.assertFalse(
157-
"Column still doesn't exist. Should fail.",
156+
Assert.assertTrue(
157+
"Column should be created on zero bytes.",
158158
checkAndPut(rowKey, SharedTestEnvRule.COLUMN_FAMILY, qual2, ZERO_BYTES, put1));
159159
Assert.assertTrue(checkAndPut(rowKey, SharedTestEnvRule.COLUMN_FAMILY, qual2, null, put1));
160160

@@ -172,7 +172,7 @@ public void testCheckAndPutDiffQual() throws Exception {
172172
Get get = new Get(rowKey);
173173
get.setMaxVersions(5);
174174
Result result = table.get(get);
175-
Assert.assertEquals("Should be two results", 2, result.size());
175+
Assert.assertEquals(3, result.size());
176176
Assert.assertArrayEquals(
177177
value1,
178178
CellUtil.cloneValue(result.getColumnLatestCell(SharedTestEnvRule.COLUMN_FAMILY, qual1)));
@@ -199,8 +199,8 @@ public void testCheckAndDeleteDiffQual() throws Exception {
199199
Assert.assertFalse(
200200
"Column doesn't exist. Should fail.",
201201
checkAndDelete(rowKey, SharedTestEnvRule.COLUMN_FAMILY, qual2, value2, delete));
202-
Assert.assertFalse(
203-
"Column still doesn't exist. Should fail.",
202+
Assert.assertTrue(
203+
"Column should be created on zero bytes.",
204204
checkAndDelete(rowKey, SharedTestEnvRule.COLUMN_FAMILY, qual2, ZERO_BYTES, delete));
205205
Assert.assertTrue(checkAndDelete(rowKey, SharedTestEnvRule.COLUMN_FAMILY, qual2, null, delete));
206206

@@ -296,8 +296,8 @@ public void testCheckAndMutate() throws Exception {
296296
"Column doesn't exist. Should fail.",
297297
checkAndMutate(
298298
rowKey, SharedTestEnvRule.COLUMN_FAMILY, qualCheck, CompareOp.EQUAL, valueCheck, rm));
299-
Assert.assertFalse(
300-
"Column still doesn't exist. Should fail.",
299+
Assert.assertTrue(
300+
"Column should be created on zero bytes",
301301
checkAndMutate(
302302
rowKey, SharedTestEnvRule.COLUMN_FAMILY, qualCheck, CompareOp.EQUAL, ZERO_BYTES, rm));
303303
Assert.assertTrue(

bigtable-client-core-parent/bigtable-hbase/src/main/java/com/google/cloud/bigtable/hbase/adapters/CheckAndMutateUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ public ConditionalRowMutation build() {
217217
scan.setMaxVersions(1);
218218
scan.addColumn(family, qualifier);
219219

220-
if (value == null || checkNonExistence) {
220+
if (value == null || value.length == 0 || checkNonExistence) {
221221
// See ifMatches javadoc for more information on this
222222
if (CompareOp.NOT_EQUAL.equals(compareOp)) {
223223
// check for existence

0 commit comments

Comments
 (0)