From 373a575fc178396af71f591913a32e4880276d90 Mon Sep 17 00:00:00 2001 From: Jeronimo Irazabal Date: Fri, 25 Nov 2022 16:02:46 -0300 Subject: [PATCH] fix: zscanAll optional seekKey Signed-off-by: Jeronimo Irazabal chore: default non-inclusive seek Signed-off-by: Jeronimo Irazabal chore: zscanall optional seekKey Signed-off-by: Jeronimo Irazabal chore: scanall optional seekKey Signed-off-by: Jeronimo Irazabal fix: optional seekKey Signed-off-by: Jeronimo Irazabal chore: revert gradle version Signed-off-by: Jeronimo Irazabal test: split scan and zscan test cases Signed-off-by: Jeronimo Irazabal test: simplified zscan Signed-off-by: Jeronimo Irazabal test: simplified zscan Signed-off-by: Jeronimo Irazabal minor code changes Signed-off-by: Jeronimo Irazabal --- gradle/wrapper/gradle-wrapper.properties | 2 +- .../io/codenotary/immudb4j/ImmuClient.java | 40 ++++++++------ .../java/io/codenotary/immudb4j/ScanTest.java | 54 +++++++++---------- 3 files changed, 48 insertions(+), 48 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 68f2a7d..12f7085 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-all.zip diff --git a/src/main/java/io/codenotary/immudb4j/ImmuClient.java b/src/main/java/io/codenotary/immudb4j/ImmuClient.java index 4af070f..ca00ac3 100644 --- a/src/main/java/io/codenotary/immudb4j/ImmuClient.java +++ b/src/main/java/io/codenotary/immudb4j/ImmuClient.java @@ -581,8 +581,8 @@ public synchronized List historyAll(byte[] key, long offset, boolean desc try { ImmudbProto.Entries entries = blockingStub.history(ImmudbProto.HistoryRequest.newBuilder() .setKey(Utils.toByteString(key)) - .setOffset(offset) .setDesc(desc) + .setOffset(offset) .setLimit(limit) .build()); @@ -633,8 +633,8 @@ public synchronized List scanAll(byte[] prefix, byte[] seekKey, byte[] en .setEndKey(Utils.toByteString(endKey)) .setInclusiveSeek(inclusiveSeek) .setInclusiveEnd(inclusiveEnd) - .setLimit(limit) .setDesc(desc) + .setLimit(limit) .build(); final ImmudbProto.Entries entries = blockingStub.scan(req); @@ -972,11 +972,11 @@ public List zScanAll(String set) { } public List zScanAll(String set, boolean reverse, long limit) { - return pzScanAll(Utils.toByteArray(set), null, null, 0, null, 0, true, reverse, limit); + return pzScanAll(Utils.toByteArray(set), null, null, null, null, 0, false, reverse, limit); } public List zScanAll(byte[] set, double minScore, double maxScore, boolean reverse, long limit) { - return zScanAll(set, minScore, maxScore, 0, null, 0, true, false, 0); + return pzScanAll(set, minScore, maxScore, null, null, 0, false, false, 0); } public List zScanAll(byte[] set, double minScore, double maxScore, double seekScore, byte[] seekKey, @@ -984,19 +984,23 @@ public List zScanAll(byte[] set, double minScore, double maxScore, doubl return pzScanAll(set, minScore, maxScore, seekScore, seekKey, seekAtTx, inclusiveSeek, reverse, limit); } - private List pzScanAll(byte[] set, Double minScore, Double maxScore, double seekScore, byte[] seekKey, + private synchronized List pzScanAll(byte[] set, Double minScore, Double maxScore, Double seekScore, + byte[] seekKey, long seekAtTx, boolean inclusiveSeek, boolean reverse, long limit) { final ImmudbProto.ZScanRequest.Builder reqBuilder = ImmudbProto.ZScanRequest.newBuilder(); reqBuilder.setSet(Utils.toByteString(set)) - .setSeekScore(seekScore) .setSeekKey(Utils.toByteString(seekKey)) .setSeekAtTx(seekAtTx) .setInclusiveSeek(inclusiveSeek) .setDesc(reverse) .setLimit(limit); + if (seekScore != null) { + reqBuilder.setSeekScore(seekScore); + } + if (minScore != null) { reqBuilder.setMinScore(Score.newBuilder().setScore(minScore).build()); } @@ -1010,10 +1014,6 @@ private List pzScanAll(byte[] set, Double minScore, Double maxScore, dou return buildList(zEntries); } - // - // ========== TX ========== - // - public synchronized Tx txById(long txId) throws TxNotFoundException, NoSuchAlgorithmException { try { final ImmudbProto.Tx tx = blockingStub.txById(ImmudbProto.TxRequest.newBuilder().setTx(txId).build()); @@ -1099,6 +1099,7 @@ public synchronized Tx verifiedTxById(long txId) throws TxNotFoundException, Ver public synchronized List txScanAll(long initialTxId) { final ImmudbProto.TxScanRequest req = ImmudbProto.TxScanRequest.newBuilder().setInitialTx(initialTxId).build(); final ImmudbProto.TxList txList = blockingStub.txScan(req); + return buildList(txList); } @@ -1106,9 +1107,10 @@ public synchronized List txScanAll(long initialTxId, int limit, boolean desc final ImmudbProto.TxScanRequest req = ImmudbProto.TxScanRequest .newBuilder() .setInitialTx(initialTxId) - .setLimit(limit) .setDesc(desc) + .setLimit(limit) .build(); + final ImmudbProto.TxList txList = blockingStub.txScan(req); return buildList(txList); } @@ -1351,6 +1353,7 @@ public Iterator scan(byte[] prefix, byte[] seekKey, byte[] endKey, boolea public synchronized Iterator scan(byte[] prefix, byte[] seekKey, byte[] endKey, boolean inclusiveSeek, boolean inclusiveEnd, boolean desc, long limit) { + final ImmudbProto.ScanRequest req = ScanRequest.newBuilder() .setPrefix(Utils.toByteString(prefix)) .setSeekKey(Utils.toByteString(seekKey)) @@ -1375,11 +1378,11 @@ public Iterator zScan(String set) { } public Iterator zScan(String set, boolean reverse, long limit) { - return pzScan(Utils.toByteArray(set), null, null, 0, null, 0, true, reverse, limit); + return pzScan(Utils.toByteArray(set), null, null, null, null, 0, false, reverse, limit); } public Iterator zScan(byte[] set, double minScore, double maxScore, boolean reverse, long limit) { - return zScan(set, minScore, maxScore, 0, null, 0, true, false, 0); + return pzScan(set, minScore, maxScore, null, null, 0, false, false, 0); } public Iterator zScan(byte[] set, double minScore, double maxScore, double seekScore, byte[] seekKey, @@ -1387,20 +1390,23 @@ public Iterator zScan(byte[] set, double minScore, double maxScore, doub return pzScan(set, minScore, maxScore, seekScore, seekKey, seekAtTx, inclusiveSeek, reverse, limit); } - private synchronized Iterator pzScan(byte[] set, Double minScore, Double maxScore, double seekScore, + private synchronized Iterator pzScan(byte[] set, Double minScore, Double maxScore, Double seekScore, byte[] seekKey, long seekAtTx, boolean inclusiveSeek, boolean reverse, long limit) { final ImmudbProto.ZScanRequest.Builder reqBuilder = ImmudbProto.ZScanRequest.newBuilder(); reqBuilder.setSet(Utils.toByteString(set)) - .setSeekScore(seekScore) .setSeekKey(Utils.toByteString(seekKey)) .setSeekAtTx(seekAtTx) .setInclusiveSeek(inclusiveSeek) .setDesc(reverse) .setLimit(limit); + if (seekScore != null) { + reqBuilder.setSeekScore(seekScore); + } + if (minScore != null) { reqBuilder.setMinScore(Score.newBuilder().setScore(minScore).build()); } @@ -1427,9 +1433,9 @@ public synchronized Iterator history(byte[] key, long offset, boolean des try { ImmudbProto.HistoryRequest req = ImmudbProto.HistoryRequest.newBuilder() .setKey(Utils.toByteString(key)) - .setLimit(limit) - .setOffset(offset) .setDesc(desc) + .setOffset(offset) + .setLimit(limit) .build(); final Iterator chunks = blockingStub.streamHistory(req); diff --git a/src/test/java/io/codenotary/immudb4j/ScanTest.java b/src/test/java/io/codenotary/immudb4j/ScanTest.java index 73fd2eb..3fe658a 100644 --- a/src/test/java/io/codenotary/immudb4j/ScanTest.java +++ b/src/test/java/io/codenotary/immudb4j/ScanTest.java @@ -25,12 +25,12 @@ public class ScanTest extends ImmuClientIntegrationTest { - @Test(testName = "scan", priority = 2) + @Test(testName = "scan zscan") public void t1() { immuClient.openSession("defaultdb", "immudb", "immudb"); - byte[] value1 = {0, 1, 2, 3}; - byte[] value2 = {4, 5, 6, 7}; + byte[] value1 = { 0, 1, 2, 3 }; + byte[] value2 = { 4, 5, 6, 7 }; try { immuClient.set("scan1", value1); @@ -39,6 +39,23 @@ public void t1() { Assert.fail("Failed at set.", e); } + try { + immuClient.set("zadd1", value1); + immuClient.set("zadd2", value2); + } catch (CorruptedDataException e) { + Assert.fail("Failed at set.", e); + } + + try { + immuClient.zAdd("set1", "zadd1", 1); + immuClient.zAdd("set1", "zadd2", 2); + + immuClient.zAdd("set2", "zadd1", 2); + immuClient.zAdd("set2", "zadd2", 1); + } catch (CorruptedDataException e) { + Assert.fail("Failed to zAdd", e); + } + List scanResult = immuClient.scanAll("scan"); System.out.println(scanResult.size()); @@ -63,32 +80,7 @@ public void t1() { Assert.assertEquals(i, 2); - immuClient.closeSession(); - } - - @Test(testName = "set, zAdd, zScan", priority = 3) - public void t2() { - immuClient.openSession("defaultdb", "immudb", "immudb"); - - byte[] value1 = {0, 1, 2, 3}; - byte[] value2 = {4, 5, 6, 7}; - - try { - immuClient.set("zadd1", value1); - immuClient.set("zadd2", value2); - } catch (CorruptedDataException e) { - Assert.fail("Failed at set.", e); - } - - try { - immuClient.zAdd("set1", "zadd1", 1); - immuClient.zAdd("set1", "zadd2", 2); - - immuClient.zAdd("set2", "zadd1", 2); - immuClient.zAdd("set2", "zadd2", 1); - } catch (CorruptedDataException e) { - Assert.fail("Failed to zAdd", e); - } + Assert.assertFalse(immuClient.scan("nonexistent-prefix").hasNext()); List zScan1 = immuClient.zScanAll("set1", false, 5); Assert.assertEquals(zScan1.size(), 2); @@ -103,7 +95,7 @@ public void t2() { Assert.assertEquals(zScan2.size(), 2); Iterator zScan3 = immuClient.zScan("set2"); - int i = 0; + i = 0; while (zScan3.hasNext()) { Assert.assertEquals(zScan3.next().getKey(), zScan2.get(i).getKey()); @@ -112,6 +104,8 @@ public void t2() { Assert.assertEquals(i, 2); + Assert.assertFalse(immuClient.zScan("nonexistent-set").hasNext()); + immuClient.closeSession(); }