You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pegasus.apache.org by la...@apache.org on 2022/06/29 10:01:20 UTC
[incubator-pegasus] branch master updated: feat(java-client): Add hasNext() for PegasusScannerInterface (#1019)
This is an automated email from the ASF dual-hosted git repository.
laiyingchun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pegasus.git
The following commit(s) were added to refs/heads/master by this push:
new 289390cae feat(java-client): Add hasNext() for PegasusScannerInterface (#1019)
289390cae is described below
commit 289390cae0cbe42e458d9979aa47696b03c2c9f9
Author: WHBANG <38...@users.noreply.github.com>
AuthorDate: Wed Jun 29 18:01:11 2022 +0800
feat(java-client): Add hasNext() for PegasusScannerInterface (#1019)
---
.../org/apache/pegasus/client/PegasusScanner.java | 21 +++++++++++++
.../pegasus/client/PegasusScannerInterface.java | 8 +++++
.../java/org/apache/pegasus/client/TestScan.java | 35 ++++++++++++++++++++++
3 files changed, 64 insertions(+)
diff --git a/java-client/src/main/java/org/apache/pegasus/client/PegasusScanner.java b/java-client/src/main/java/org/apache/pegasus/client/PegasusScanner.java
index 80cf4a48b..a664f02d3 100644
--- a/java-client/src/main/java/org/apache/pegasus/client/PegasusScanner.java
+++ b/java-client/src/main/java/org/apache/pegasus/client/PegasusScanner.java
@@ -88,9 +88,27 @@ public class PegasusScanner implements PegasusScannerInterface {
_needCheckHash = needCheckHash;
_incomplete = false;
_fullScan = fullScan;
+ _nextItem = null;
+ }
+
+ public boolean hasNext() throws PException {
+ synchronized (_nextItemLock) {
+ if (_nextItem != null) {
+ return true;
+ }
+ _nextItem = next();
+ return _nextItem != null;
+ }
}
public Pair<Pair<byte[], byte[]>, byte[]> next() throws PException {
+ synchronized (_nextItemLock) {
+ if (_nextItem != null) {
+ Pair<Pair<byte[], byte[]>, byte[]> item = _nextItem;
+ _nextItem = null;
+ return item;
+ }
+ }
try {
return asyncNext().get(_options.timeoutMillis, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
@@ -359,5 +377,8 @@ public class PegasusScanner implements PegasusScannerInterface {
private boolean _fullScan;
+ private final Object _nextItemLock = new Object();
+ private Pair<Pair<byte[], byte[]>, byte[]> _nextItem;
+
private static final Logger logger = org.slf4j.LoggerFactory.getLogger(PegasusScanner.class);
}
diff --git a/java-client/src/main/java/org/apache/pegasus/client/PegasusScannerInterface.java b/java-client/src/main/java/org/apache/pegasus/client/PegasusScannerInterface.java
index dadb0bff6..b70c671c2 100644
--- a/java-client/src/main/java/org/apache/pegasus/client/PegasusScannerInterface.java
+++ b/java-client/src/main/java/org/apache/pegasus/client/PegasusScannerInterface.java
@@ -34,6 +34,14 @@ public interface PegasusScannerInterface {
*/
public Pair<Pair<byte[], byte[]>, byte[]> next() throws PException;
+ /**
+ * Judge whether scan completed
+ *
+ * @return Return false if no data left, return true means some data left.
+ * @throws PException
+ */
+ public boolean hasNext() throws PException;
+
/**
* Get the next item asynchronously.
*
diff --git a/java-client/src/test/java/org/apache/pegasus/client/TestScan.java b/java-client/src/test/java/org/apache/pegasus/client/TestScan.java
index 54db4172b..6eef04cdc 100644
--- a/java-client/src/test/java/org/apache/pegasus/client/TestScan.java
+++ b/java-client/src/test/java/org/apache/pegasus/client/TestScan.java
@@ -106,6 +106,41 @@ public class TestScan {
compareSortMap(data, base.get(expectedHashKey), expectedHashKey);
}
+ @Test
+ public void testHasNext() throws PException {
+ System.out.println("TESTING_HAS_NEXT, ALL SORT_KEYS ....");
+ ScanOptions options = new ScanOptions();
+ TreeMap<String, String> data = new TreeMap<String, String>();
+ PegasusScannerInterface scanner =
+ client.getScanner(
+ tableName, expectedHashKey.getBytes(), new byte[] {}, new byte[] {}, options);
+ Assert.assertNotNull(scanner);
+ Pair<Pair<byte[], byte[]>, byte[]> item;
+ int count = 0;
+ while (scanner.hasNext()) {
+ item = scanner.next();
+ count++;
+ Assert.assertEquals(expectedHashKey, new String(item.getLeft().getLeft()));
+ checkAndPutSortMap(
+ data,
+ expectedHashKey,
+ new String(item.getLeft().getRight()),
+ new String(item.getRight()));
+ if ((item = scanner.next()) != null) {
+ count++;
+ }
+ Assert.assertEquals(expectedHashKey, new String(item.getLeft().getLeft()));
+ checkAndPutSortMap(
+ data,
+ expectedHashKey,
+ new String(item.getLeft().getRight()),
+ new String(item.getRight()));
+ }
+ Assert.assertEquals(1000, count);
+ scanner.close();
+ compareSortMap(data, base.get(expectedHashKey), expectedHashKey);
+ }
+
@Test
public void testInclusive() throws PException {
/** ** [start, stop] *** */
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pegasus.apache.org
For additional commands, e-mail: commits-help@pegasus.apache.org