From bd89ed8211677f3b8e5a5d625779e835bab9cfaa Mon Sep 17 00:00:00 2001 From: Rahul Kesharwani Date: Mon, 6 Apr 2020 19:03:05 +0530 Subject: [PATCH 1/3] chore(test): updated assertions for firstKeyOnlyFilter This PR updates integration tests assertions to verify firstKeyOnlyFilter. --- .../bigtable/hbase/AbstractTestFilters.java | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/bigtable-client-core-parent/bigtable-hbase-integration-tests-common/src/test/java/com/google/cloud/bigtable/hbase/AbstractTestFilters.java b/bigtable-client-core-parent/bigtable-hbase-integration-tests-common/src/test/java/com/google/cloud/bigtable/hbase/AbstractTestFilters.java index 9e8546b407..ba55bac176 100644 --- a/bigtable-client-core-parent/bigtable-hbase-integration-tests-common/src/test/java/com/google/cloud/bigtable/hbase/AbstractTestFilters.java +++ b/bigtable-client-core-parent/bigtable-hbase-integration-tests-common/src/test/java/com/google/cloud/bigtable/hbase/AbstractTestFilters.java @@ -1363,22 +1363,35 @@ public void testValueFilter() throws IOException { @Test public void testFirstKeyFilter() throws IOException { // Initialize + int rowCount = 5; int numCols = 5; + String rowPrefix = dataHelper.randomString("testFirstKeyValue-"); String columnValue = "includeThisValue"; Table table = getDefaultTable(); - byte[] rowKey = dataHelper.randomData("testRow-"); - Put put = new Put(rowKey); - for (int i = 0; i < numCols; ++i) { - put.addColumn(COLUMN_FAMILY, dataHelper.randomData(""), Bytes.toBytes(columnValue)); + + List puts = new ArrayList<>(rowCount); + for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) { + Put put = new Put(Bytes.toBytes(rowPrefix + rowIndex)); + for (int i = 0; i < numCols; ++i) { + put.addColumn(COLUMN_FAMILY, dataHelper.randomData(""), Bytes.toBytes(columnValue)); + } + puts.add(put); } - table.put(put); + table.put(puts); // Filter for results Filter filter = new FirstKeyOnlyFilter(); - Get get = new Get(rowKey).setFilter(filter); - Result result = table.get(get); - Assert.assertEquals("Should only return 1 keyvalue", 1, result.size()); + Scan scan = new Scan().setRowPrefixFilter(Bytes.toBytes(rowPrefix)).setFilter(filter); + try (ResultScanner resultScanner = table.getScanner(scan)) { + int rowIndex = 0; + for (Result result : resultScanner) { + Assert.assertArrayEquals(Bytes.toBytes(rowPrefix + rowIndex), result.getRow()); + Assert.assertEquals("Should only return 1 keyvalue", 1, result.size()); + + rowIndex++; + } + } table.close(); } From d80b4277f6648ec8ddeb742f0a631d0b12d2c555 Mon Sep 17 00:00:00 2001 From: Rahul Kesharwani Date: Wed, 8 Apr 2020 23:45:23 +0530 Subject: [PATCH 2/3] chore: reverting back FirstKeyOnlyFilterAdapter to return cell with value This commit partially reverts changes from #1996 to have consistent behavior with HBase FirstKeyOnlyFilter. --- .../google/cloud/bigtable/hbase/AbstractTestFilters.java | 5 +++-- .../hbase/adapters/filters/FirstKeyOnlyFilterAdapter.java | 3 +-- .../adapters/filters/TestFirstKeyOnlyFilterAdapter.java | 8 +------- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/bigtable-client-core-parent/bigtable-hbase-integration-tests-common/src/test/java/com/google/cloud/bigtable/hbase/AbstractTestFilters.java b/bigtable-client-core-parent/bigtable-hbase-integration-tests-common/src/test/java/com/google/cloud/bigtable/hbase/AbstractTestFilters.java index ba55bac176..d8f56ff142 100644 --- a/bigtable-client-core-parent/bigtable-hbase-integration-tests-common/src/test/java/com/google/cloud/bigtable/hbase/AbstractTestFilters.java +++ b/bigtable-client-core-parent/bigtable-hbase-integration-tests-common/src/test/java/com/google/cloud/bigtable/hbase/AbstractTestFilters.java @@ -1366,14 +1366,14 @@ public void testFirstKeyFilter() throws IOException { int rowCount = 5; int numCols = 5; String rowPrefix = dataHelper.randomString("testFirstKeyValue-"); - String columnValue = "includeThisValue"; + byte[] columnValue = Bytes.toBytes("includeThisValue"); Table table = getDefaultTable(); List puts = new ArrayList<>(rowCount); for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) { Put put = new Put(Bytes.toBytes(rowPrefix + rowIndex)); for (int i = 0; i < numCols; ++i) { - put.addColumn(COLUMN_FAMILY, dataHelper.randomData(""), Bytes.toBytes(columnValue)); + put.addColumn(COLUMN_FAMILY, dataHelper.randomData(""), columnValue); } puts.add(put); } @@ -1388,6 +1388,7 @@ public void testFirstKeyFilter() throws IOException { for (Result result : resultScanner) { Assert.assertArrayEquals(Bytes.toBytes(rowPrefix + rowIndex), result.getRow()); Assert.assertEquals("Should only return 1 keyvalue", 1, result.size()); + Assert.assertTrue(CellUtil.matchingValue(result.rawCells()[0], columnValue)); rowIndex++; } diff --git a/bigtable-client-core-parent/bigtable-hbase/src/main/java/com/google/cloud/bigtable/hbase/adapters/filters/FirstKeyOnlyFilterAdapter.java b/bigtable-client-core-parent/bigtable-hbase/src/main/java/com/google/cloud/bigtable/hbase/adapters/filters/FirstKeyOnlyFilterAdapter.java index 4f920d5881..e68b62e33a 100644 --- a/bigtable-client-core-parent/bigtable-hbase/src/main/java/com/google/cloud/bigtable/hbase/adapters/filters/FirstKeyOnlyFilterAdapter.java +++ b/bigtable-client-core-parent/bigtable-hbase/src/main/java/com/google/cloud/bigtable/hbase/adapters/filters/FirstKeyOnlyFilterAdapter.java @@ -29,8 +29,7 @@ @InternalApi("For internal usage only") public class FirstKeyOnlyFilterAdapter extends TypedFilterAdapterBase { - private static Filters.Filter LIMIT_ONE = - FILTERS.chain().filter(FILTERS.limit().cellsPerRow(1)).filter(FILTERS.value().strip()); + private static Filters.Filter LIMIT_ONE = FILTERS.limit().cellsPerRow(1); /** {@inheritDoc} */ @Override diff --git a/bigtable-client-core-parent/bigtable-hbase/src/test/java/com/google/cloud/bigtable/hbase/adapters/filters/TestFirstKeyOnlyFilterAdapter.java b/bigtable-client-core-parent/bigtable-hbase/src/test/java/com/google/cloud/bigtable/hbase/adapters/filters/TestFirstKeyOnlyFilterAdapter.java index 8805fb50a4..783e49ecb5 100644 --- a/bigtable-client-core-parent/bigtable-hbase/src/test/java/com/google/cloud/bigtable/hbase/adapters/filters/TestFirstKeyOnlyFilterAdapter.java +++ b/bigtable-client-core-parent/bigtable-hbase/src/test/java/com/google/cloud/bigtable/hbase/adapters/filters/TestFirstKeyOnlyFilterAdapter.java @@ -35,12 +35,6 @@ public class TestFirstKeyOnlyFilterAdapter { public void onlyTheFirstKeyFromEachRowIsEmitted() throws IOException { Filters.Filter adaptedFilter = adapter.adapt(new FilterAdapterContext(new Scan(), null), new FirstKeyOnlyFilter()); - Assert.assertEquals( - FILTERS - .chain() - .filter(FILTERS.limit().cellsPerRow(1)) - .filter(FILTERS.value().strip()) - .toProto(), - adaptedFilter.toProto()); + Assert.assertEquals(FILTERS.limit().cellsPerRow(1).toProto(), adaptedFilter.toProto()); } } From fcdb6a395af3546194be2b819a31ec47a4aaacb4 Mon Sep 17 00:00:00 2001 From: Rahul Kesharwani Date: Thu, 9 Apr 2020 00:06:55 +0530 Subject: [PATCH 3/3] to trigger failed CI Job --- .../com/google/cloud/bigtable/hbase/AbstractTestFilters.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bigtable-client-core-parent/bigtable-hbase-integration-tests-common/src/test/java/com/google/cloud/bigtable/hbase/AbstractTestFilters.java b/bigtable-client-core-parent/bigtable-hbase-integration-tests-common/src/test/java/com/google/cloud/bigtable/hbase/AbstractTestFilters.java index d8f56ff142..b3e350afdf 100644 --- a/bigtable-client-core-parent/bigtable-hbase-integration-tests-common/src/test/java/com/google/cloud/bigtable/hbase/AbstractTestFilters.java +++ b/bigtable-client-core-parent/bigtable-hbase-integration-tests-common/src/test/java/com/google/cloud/bigtable/hbase/AbstractTestFilters.java @@ -1388,7 +1388,9 @@ public void testFirstKeyFilter() throws IOException { for (Result result : resultScanner) { Assert.assertArrayEquals(Bytes.toBytes(rowPrefix + rowIndex), result.getRow()); Assert.assertEquals("Should only return 1 keyvalue", 1, result.size()); - Assert.assertTrue(CellUtil.matchingValue(result.rawCells()[0], columnValue)); + Assert.assertTrue( + "Should contains column value", + CellUtil.matchingValue(result.rawCells()[0], columnValue)); rowIndex++; }