You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by al...@apache.org on 2022/05/02 17:44:25 UTC
[kudu] branch master updated: [client] fix toggling fault-tolerance for a scanner
This is an automated email from the ASF dual-hosted git repository.
alexey pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kudu.git
The following commit(s) were added to refs/heads/master by this push:
new 54d0f0b22 [client] fix toggling fault-tolerance for a scanner
54d0f0b22 is described below
commit 54d0f0b227b82a5ae5bb6095877858e6cbb7c9c8
Author: Alexey Serbin <al...@apache.org>
AuthorDate: Fri Apr 29 17:29:24 2022 -0700
[client] fix toggling fault-tolerance for a scanner
Change-Id: Ic50f9d62623d8b9ced7d854ce0e80a0faaa60ad3
Reviewed-on: http://gerrit.cloudera.org:8080/18462
Reviewed-by: Andrew Wong <aw...@cloudera.com>
Tested-by: Alexey Serbin <al...@apache.org>
---
.../kudu/client/AbstractKuduScannerBuilder.java | 2 +-
.../java/org/apache/kudu/client/TestScanToken.java | 22 ++++++++++++++++
src/kudu/client/scan_configuration.cc | 6 +++--
src/kudu/client/scan_token-test.cc | 30 ++++++++++++++++++++++
4 files changed, 57 insertions(+), 3 deletions(-)
diff --git a/java/kudu-client/src/main/java/org/apache/kudu/client/AbstractKuduScannerBuilder.java b/java/kudu-client/src/main/java/org/apache/kudu/client/AbstractKuduScannerBuilder.java
index 0e6b2d7cc..2c9b4aa36 100644
--- a/java/kudu-client/src/main/java/org/apache/kudu/client/AbstractKuduScannerBuilder.java
+++ b/java/kudu-client/src/main/java/org/apache/kudu/client/AbstractKuduScannerBuilder.java
@@ -96,7 +96,7 @@ public abstract class AbstractKuduScannerBuilder
public S setFaultTolerant(boolean isFaultTolerant) {
this.isFaultTolerant = isFaultTolerant;
if (isFaultTolerant) {
- readMode = AsyncKuduScanner.ReadMode.READ_AT_SNAPSHOT;
+ this.readMode = AsyncKuduScanner.ReadMode.READ_AT_SNAPSHOT;
}
return (S) this;
}
diff --git a/java/kudu-client/src/test/java/org/apache/kudu/client/TestScanToken.java b/java/kudu-client/src/test/java/org/apache/kudu/client/TestScanToken.java
index 3ec8f173b..4ed897085 100644
--- a/java/kudu-client/src/test/java/org/apache/kudu/client/TestScanToken.java
+++ b/java/kudu-client/src/test/java/org/apache/kudu/client/TestScanToken.java
@@ -27,6 +27,7 @@ import static org.apache.kudu.test.ClientTestUtil.loadDefaultTable;
import static org.apache.kudu.test.MetricTestUtils.totalRequestCount;
import static org.apache.kudu.test.MetricTestUtils.validateRequestCount;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -865,4 +866,25 @@ public class TestScanToken {
KuduScanner scanner = tokens.get(0).intoScanner(newClient);
assertEquals(1, countRowsInScan(scanner));
}
+
+ @Test
+ public void testScannerBuilderFaultToleranceToggle() throws IOException {
+ KuduTable table = createDefaultTable(client, testTableName);
+ KuduScanner.KuduScannerBuilder scannerBuilder =
+ new KuduScanner.KuduScannerBuilder(asyncClient, table);
+ assertFalse(scannerBuilder.isFaultTolerant);
+ assertEquals(AsyncKuduScanner.ReadMode.READ_LATEST, scannerBuilder.readMode);
+
+ scannerBuilder.setFaultTolerant(true);
+ assertTrue(scannerBuilder.isFaultTolerant);
+ assertEquals(AsyncKuduScanner.ReadMode.READ_AT_SNAPSHOT, scannerBuilder.readMode);
+
+ scannerBuilder.setFaultTolerant(false);
+ assertFalse(scannerBuilder.isFaultTolerant);
+ assertEquals(AsyncKuduScanner.ReadMode.READ_AT_SNAPSHOT, scannerBuilder.readMode);
+
+ scannerBuilder.readMode(AsyncKuduScanner.ReadMode.READ_YOUR_WRITES);
+ assertFalse(scannerBuilder.isFaultTolerant);
+ assertEquals(AsyncKuduScanner.ReadMode.READ_YOUR_WRITES, scannerBuilder.readMode);
+ }
}
diff --git a/src/kudu/client/scan_configuration.cc b/src/kudu/client/scan_configuration.cc
index 32bc78470..707efc297 100644
--- a/src/kudu/client/scan_configuration.cc
+++ b/src/kudu/client/scan_configuration.cc
@@ -167,8 +167,10 @@ Status ScanConfiguration::SetReadMode(KuduScanner::ReadMode read_mode) {
}
Status ScanConfiguration::SetFaultTolerant(bool fault_tolerant) {
- RETURN_NOT_OK(SetReadMode(KuduScanner::READ_AT_SNAPSHOT));
- is_fault_tolerant_ = true;
+ if (fault_tolerant) {
+ RETURN_NOT_OK(SetReadMode(KuduScanner::READ_AT_SNAPSHOT));
+ }
+ is_fault_tolerant_ = fault_tolerant;
return Status::OK();
}
diff --git a/src/kudu/client/scan_token-test.cc b/src/kudu/client/scan_token-test.cc
index ac75b4503..77c00b99b 100644
--- a/src/kudu/client/scan_token-test.cc
+++ b/src/kudu/client/scan_token-test.cc
@@ -1060,5 +1060,35 @@ TEST_P(StaleScanTokensParamTest, DroppingFirstRange) {
INSTANTIATE_TEST_SUITE_P(FirstRangeDropped, StaleScanTokensParamTest,
testing::Range(FirstRangeChangeMode::BEGIN,
FirstRangeChangeMode::END));
+
+TEST_F(ScanTokenTest, ToggleFaultToleranceForScanConfiguration) {
+ constexpr const char* const kTableName = "fault_tolerance_toggle";
+ KuduSchema schema;
+ {
+ KuduSchemaBuilder builder;
+ builder.AddColumn("key")->NotNull()->Type(KuduColumnSchema::INT64)->PrimaryKey();
+ ASSERT_OK(builder.Build(&schema));
+ }
+
+ shared_ptr<KuduTable> table;
+ ASSERT_OK(CreateAndOpenTable(kTableName, schema, &table));
+ ScanConfiguration sc(table.get());
+ ASSERT_FALSE(sc.is_fault_tolerant());
+ ASSERT_EQ(KuduScanner::READ_LATEST, sc.read_mode());
+
+ ASSERT_OK(sc.SetFaultTolerant(true));
+ ASSERT_TRUE(sc.is_fault_tolerant());
+ ASSERT_EQ(KuduScanner::READ_AT_SNAPSHOT, sc.read_mode());
+
+ ASSERT_OK(sc.SetFaultTolerant(false));
+ ASSERT_FALSE(sc.is_fault_tolerant());
+ ASSERT_EQ(KuduScanner::READ_AT_SNAPSHOT, sc.read_mode());
+
+ ASSERT_OK(sc.SetReadMode(KuduScanner::READ_YOUR_WRITES));
+ ASSERT_OK(sc.SetFaultTolerant(false));
+ ASSERT_FALSE(sc.is_fault_tolerant());
+ ASSERT_EQ(KuduScanner::READ_YOUR_WRITES, sc.read_mode());
+}
+
} // namespace client
} // namespace kudu