You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by th...@apache.org on 2023/04/25 12:45:45 UTC

[jackrabbit-oak] 01/01: OAK-10210 Prefetch breaks Fast Result Size

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

thomasm pushed a commit to branch OAK-10210
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git

commit cbe36d4a43491ae19c37cfafadd617253b9cb308
Author: Thomas Mueller <th...@apache.org>
AuthorDate: Tue Apr 25 14:45:30 2023 +0200

    OAK-10210 Prefetch breaks Fast Result Size
---
 .../oak/plugins/index/cursor/PrefetchCursor.java   |  6 +++++
 .../plugins/index/cursor/PrefetchCursorTest.java   | 31 ++++++++++++++++++++++
 2 files changed, 37 insertions(+)

diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/cursor/PrefetchCursor.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/cursor/PrefetchCursor.java
index 60fe8c512e..1a0a283de7 100644
--- a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/cursor/PrefetchCursor.java
+++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/cursor/PrefetchCursor.java
@@ -26,6 +26,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 
+import org.apache.jackrabbit.oak.api.Result.SizePrecision;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.spi.query.Cursor;
 import org.apache.jackrabbit.oak.spi.query.IndexRow;
@@ -61,6 +62,11 @@ public class PrefetchCursor extends AbstractCursor {
         this.prefetchRelative = prefetchRelative;
     }
 
+    @Override
+    public long getSize(SizePrecision precision, long max) {
+        return cursor.getSize(precision, max);
+    }
+
     @Override
     public IndexRow next() {
         if (!prefetched.hasNext()) {
diff --git a/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/cursor/PrefetchCursorTest.java b/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/cursor/PrefetchCursorTest.java
index 05a0fe3e88..c424d99aae 100644
--- a/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/cursor/PrefetchCursorTest.java
+++ b/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/cursor/PrefetchCursorTest.java
@@ -25,6 +25,9 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import org.apache.jackrabbit.oak.api.Result.SizePrecision;
+import org.apache.jackrabbit.oak.spi.query.Cursor;
+import org.apache.jackrabbit.oak.spi.query.IndexRow;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.junit.Test;
 
@@ -96,6 +99,34 @@ public class PrefetchCursorTest {
                 "/content/images/abc.jpg"));
     }
     
+    /**
+     * Test that the PrefetchCursor forwards the getSize() request to the nested
+     * cursor.
+     */
+    @Test
+    public void fastResultSize() {
+        int expectedResult = 123;
+        PrefetchCursor prefetch = new PrefetchCursor(new Cursor() {
+
+            @Override
+            public boolean hasNext() {
+                return false;
+            }
+
+            @Override
+            public long getSize(SizePrecision precision, long max) {
+                return expectedResult;
+            }
+
+            @Override
+            public IndexRow next() {
+                return null;
+            }
+
+        }, null, 0, null, null);
+        assertEquals(expectedResult, prefetch.getSize(null, 0));
+    }
+
     @Test
     public void cursor() {
         List<String> paths = Arrays.asList(