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

reschke pushed a commit to branch SLING-13323
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git

commit 6fead81976a65c466a92720ff8fe841dad1df4af
Author: Julian Reschke <[email protected]>
AuthorDate: Thu Aug 27 09:20:02 2026 +0100

    SLING-13323: when paging encounters unexpected values, log the position 
inside the page as well
---
 .../impl/mapping/PagedQueryIterator.java             |  9 +++++++--
 .../impl/mapping/PagedQueryIteratorTest.java         | 20 +++++++++++++++++---
 2 files changed, 24 insertions(+), 5 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/PagedQueryIterator.java
 
b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/PagedQueryIterator.java
index d98adb4c..45500233 100644
--- 
a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/PagedQueryIterator.java
+++ 
b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/PagedQueryIterator.java
@@ -48,6 +48,7 @@ public class PagedQueryIterator implements Iterator<Resource> 
{
     private String lastValue = null;
     private Iterator<Resource> it;
     private int count = 0;
+    private int indexInPage = 0;
     private int page = 0;
     private Resource next = null;
     private int largestPage = 0;
@@ -74,6 +75,7 @@ public class PagedQueryIterator implements Iterator<Resource> 
{
 
     private void nextPage() {
         count = 0;
+        indexInPage = 0;
         String formattedQuery = String.format(query, 
QueryBuildHelper.escapeString(lastKey));
         log.debug("start {} query (page {}): {}", subject, page, 
formattedQuery);
         long queryStart = System.nanoTime();
@@ -96,6 +98,7 @@ public class PagedQueryIterator implements Iterator<Resource> 
{
     private Resource getNext() throws NoSuchElementException {
         Resource resource = it.next();
         count += 1;
+        indexInPage += 1;
 
         final ValueMap valueMap = resource.getValueMap();
         final String[] values = valueMap.get(propertyName, defaultValue);
@@ -104,8 +107,9 @@ public class PagedQueryIterator implements 
Iterator<Resource> {
             String value = values[0];
             if (value.compareTo(lastKey) < 0) {
                 log.warn(
-                        "unexpected query result in page {}, property name 
'{}', got '{}'{}, despite querying for > '{}'"
+                        "unexpected query result at index {} in page {}, 
property name '{}', got '{}'{}, despite querying for > '{}'"
                                 + " (the async index may not yet reflect the 
current property value)",
+                        indexInPage,
                         (page - 1),
                         propertyName,
                         value,
@@ -114,8 +118,9 @@ public class PagedQueryIterator implements 
Iterator<Resource> {
             }
             if (lastValue != null && value.compareTo(lastValue) < 0) {
                 log.warn(
-                        "unexpected query result in page {}, property name 
'{}', got '{}'{}, last value was '{}'"
+                        "unexpected query result at index {} in page {}, 
property name '{}', got '{}'{}, last value was '{}'"
                                 + " (the async index may not yet reflect the 
current property value)",
+                        indexInPage,
                         (page - 1),
                         propertyName,
                         value,
diff --git 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/PagedQueryIteratorTest.java
 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/PagedQueryIteratorTest.java
index 33a013b8..5e8b6684 100644
--- 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/PagedQueryIteratorTest.java
+++ 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/PagedQueryIteratorTest.java
@@ -98,9 +98,23 @@ public class PagedQueryIteratorTest extends 
AbstractMappingMapEntriesTest {
         Collection<Resource> expectedResources = toResourceList(expected);
         when(resourceResolver.findResources(eq("testSimpleWrongOrder"), 
eq("JCR-SQL2")))
                 .thenReturn(expectedResources.iterator());
-        PagedQueryIterator it =
-                new PagedQueryIterator("alias", PROPNAME, resourceResolver, 
"testSimpleWrongOrder", 2000);
-        checkResult(it, expected);
+        try (TestLogger logger = TestLogger.create(PagedQueryIterator.class)
+                .contains("unexpected")
+                .start()) {
+            PagedQueryIterator it =
+                    new PagedQueryIterator("alias", PROPNAME, 
resourceResolver, "testSimpleWrongOrder", 2000);
+            checkResult(it, expected);
+
+            // implementation detail: assumes format of log message
+            List<String> logEntries = logger.stopAndGetLogs();
+            assertTrue(
+                    "Log should contain 'unexpected query result', but got: " 
+ logEntries,
+                    logEntries.toString().contains("unexpected query result"));
+            String expectedMessage = String.format("at index %d in page %d", 
4, 0);
+            assertTrue(
+                    "Log should contain '" + expectedMessage + "', but got: " 
+ logEntries,
+                    logEntries.toString().contains(expectedMessage));
+        }
     }
 
     @Test

Reply via email to