This is an automated email from the ASF dual-hosted git repository.

kturner pushed a commit to branch 2.1
in repository https://gitbox.apache.org/repos/asf/accumulo.git


The following commit(s) were added to refs/heads/2.1 by this push:
     new e4df612062 adds an open ended scan to ScanConsistencyIT (#3656)
e4df612062 is described below

commit e4df61206245cd4b454debfeef2f62973cc4531b
Author: Keith Turner <ktur...@apache.org>
AuthorDate: Thu Jul 27 17:36:23 2023 -0400

    adds an open ended scan to ScanConsistencyIT (#3656)
---
 .../apache/accumulo/test/ScanConsistencyIT.java    | 51 ++++++++++++++--------
 1 file changed, 34 insertions(+), 17 deletions(-)

diff --git a/test/src/main/java/org/apache/accumulo/test/ScanConsistencyIT.java 
b/test/src/main/java/org/apache/accumulo/test/ScanConsistencyIT.java
index 41719d07e3..bdf67a2e4c 100644
--- a/test/src/main/java/org/apache/accumulo/test/ScanConsistencyIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/ScanConsistencyIT.java
@@ -48,7 +48,6 @@ import org.apache.accumulo.core.client.BatchScanner;
 import org.apache.accumulo.core.client.IsolatedScanner;
 import org.apache.accumulo.core.client.IteratorSetting;
 import org.apache.accumulo.core.client.Scanner;
-import org.apache.accumulo.core.client.ScannerBase;
 import org.apache.accumulo.core.client.admin.CompactionConfig;
 import org.apache.accumulo.core.client.rfile.RFile;
 import org.apache.accumulo.core.client.rfile.RFileWriter;
@@ -157,8 +156,9 @@ public class ScanConsistencyIT extends 
AccumuloClusterHarness {
 
       log.debug(tableOpsTask.get());
 
-      var stats1 = scanData(testContext, new Range(), false);
-      var stats2 = scanData(testContext, new Range(), true);
+      var stats1 = scanData(testContext, random, new Range(), false);
+      var stats2 = scanData(testContext, random, new Range(), true);
+      var stats3 = batchScanData(testContext, new Range());
       log.debug(
           String.format("Final scan, scanned:%,d verified:%,d", 
stats1.scanned, stats1.verified));
       assertTrue(stats1.verified > 0);
@@ -166,6 +166,8 @@ public class ScanConsistencyIT extends 
AccumuloClusterHarness {
       assertEquals(stats1.scanned, stats1.verified);
       assertEquals(stats2.scanned, stats1.scanned);
       assertEquals(stats2.verified, stats1.verified);
+      assertEquals(stats3.scanned, stats1.scanned);
+      assertEquals(stats3.verified, stats1.verified);
     } finally {
       executor.shutdownNow();
     }
@@ -325,16 +327,17 @@ public class ScanConsistencyIT extends 
AccumuloClusterHarness {
     }
   }
 
-  private static ScanStats scan(ScannerBase scanner, Set<Key> expected) {
+  private static ScanStats scan(Stream<Map.Entry<Key,Value>> scanner, Set<Key> 
expected) {
     ScanStats stats = new ScanStats();
-    for (Map.Entry<Key,Value> entry : scanner) {
+
+    scanner.forEach(entry -> {
       stats.scanned++;
       Key key = entry.getKey();
       key.setTimestamp(0);
       if (expected.remove(key)) {
         stats.verified++;
       }
-    }
+    });
 
     assertTrue(expected.isEmpty());
     return stats;
@@ -346,23 +349,37 @@ public class ScanConsistencyIT extends 
AccumuloClusterHarness {
         BatchScanner scanner = tctx.client.createBatchScanner(tctx.table)) {
       Set<Key> expected = 
expectedScanData.getExpectedData(range).collect(Collectors.toSet());
       scanner.setRanges(List.of(range));
-      return scan(scanner, expected);
+      return scan(scanner.stream(), expected);
     }
   }
 
-  private static ScanStats scanData(TestContext tctx, Range range, boolean 
scanIsolated)
-      throws Exception {
+  private static ScanStats scanData(TestContext tctx, Random random, Range 
range,
+      boolean scanIsolated) throws Exception {
     try (ExpectedScanData expectedScanData = tctx.dataTracker.beginScan();
-        Scanner scanner = tctx.client.createScanner(tctx.table)) {
+        Scanner baseScanner = tctx.client.createScanner(tctx.table)) {
       Set<Key> expected = 
expectedScanData.getExpectedData(range).collect(Collectors.toSet());
-      scanner.setRange(range);
 
-      Scanner s = scanner;
+      Scanner scanner = baseScanner;
       if (scanIsolated) {
-        s = new IsolatedScanner(scanner);
+        scanner = new IsolatedScanner(baseScanner);
+      }
+
+      Stream<Map.Entry<Key,Value>> scanStream;
+
+      if (!range.isInfiniteStopKey() && random.nextBoolean()) {
+        // Simulate the case where not all data in the range is read.
+        var openEndedRange =
+            new Range(range.getStartKey(), range.isStartKeyInclusive(), null, 
true);
+        scanner.setRange(openEndedRange);
+        // Create a stream that only reads the data in the original range, 
possibly leaving data
+        // unread on the scanner.
+        scanStream = scanner.stream().takeWhile(entry -> 
range.contains(entry.getKey()));
+      } else {
+        scanner.setRange(range);
+        scanStream = scanner.stream();
       }
 
-      return scan(s, expected);
+      return scan(scanStream, expected);
     }
   }
 
@@ -401,9 +418,9 @@ public class ScanConsistencyIT extends 
AccumuloClusterHarness {
 
         int scanChance = random.nextInt(3);
         if (scanChance == 0) {
-          allStats.add(scanData(tctx, range, false));
+          allStats.add(scanData(tctx, random, range, false));
         } else if (scanChance == 1) {
-          allStats.add(scanData(tctx, range, true));
+          allStats.add(scanData(tctx, random, range, true));
         } else {
           allStats.add(batchScanData(tctx, range));
         }
@@ -661,7 +678,7 @@ public class ScanConsistencyIT extends 
AccumuloClusterHarness {
   /**
    * @return absolute value of a random long
    */
-  private static long nextLongAbs(Random r) {
+  private static long nextLongAbs(Random random) {
     return random.nextLong() & 0x7fffffffffffffffL;
   }
 

Reply via email to