diff --git a/direct/core/src/main/java/cz/o2/proxima/direct/core/view/LocalCachedPartitionedView.java b/direct/core/src/main/java/cz/o2/proxima/direct/core/view/LocalCachedPartitionedView.java index 77cc1d48f..fbaa3b3cc 100644 --- a/direct/core/src/main/java/cz/o2/proxima/direct/core/view/LocalCachedPartitionedView.java +++ b/direct/core/src/main/java/cz/o2/proxima/direct/core/view/LocalCachedPartitionedView.java @@ -341,7 +341,7 @@ private void scanWildcardPrefix( (attr, e) -> { KeyValue kv = toKv(key, attr, e); if (kv != null) { - if (missing.decrementAndGet() != 0) { + if (missing.getAndDecrement() != 0) { consumer.accept(kv); } else { return false; diff --git a/direct/core/src/test/java/cz/o2/proxima/direct/core/view/LocalCachedPartitionedViewTest.java b/direct/core/src/test/java/cz/o2/proxima/direct/core/view/LocalCachedPartitionedViewTest.java index c716e7a75..6d63d6cad 100644 --- a/direct/core/src/test/java/cz/o2/proxima/direct/core/view/LocalCachedPartitionedViewTest.java +++ b/direct/core/src/test/java/cz/o2/proxima/direct/core/view/LocalCachedPartitionedViewTest.java @@ -206,6 +206,29 @@ public void testScanWildcardWithDelete() { assertEquals(1, kvs.size()); } + @Test + public void testScanWildcardWithLimit() { + view.assign(singlePartition()); + writer.write(update("key", "device.1", device, now), (succ, exc) -> {}); + writer.write(update("key", "device.2", device, now + 1), (succ, exc) -> {}); + List> kvs = new ArrayList<>(); + view.scanWildcard("key", device, now, kvs::add); + assertEquals(1, kvs.size()); + kvs.clear(); + view.scanWildcard( + "key", + device, + view.fetchOffset(Listing.ATTRIBUTE, device.toAttributePrefix()), + now + 1, + 1, + kvs::add); + assertEquals(1, kvs.size()); + view.scanWildcard("key", device, kvs.get(0).getOffset(), now + 1, 1, kvs::add); + assertEquals(2, kvs.size()); + assertEquals("device.1", kvs.get(0).getAttribute()); + assertEquals("device.2", kvs.get(1).getAttribute()); + } + @Test public void testScanWildcardAllWithDelete() { view.assign(singlePartition());