You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by re...@apache.org on 2026/08/27 08:20:19 UTC

(sling-org-apache-sling-resourceresolver) branch SLING-13323 created (now 6fead819)

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

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


      at 6fead819 SLING-13323: when paging encounters unexpected values, log the position inside the page as well

This branch includes the following new commits:

     new 6fead819 SLING-13323: when paging encounters unexpected values, log the position inside the page as well

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(sling-org-apache-sling-resourceresolver) 01/01: SLING-13323: when paging encounters unexpected values, log the position inside the page as well

Posted by re...@apache.org.
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 <re...@apache.org>
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