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

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

commit 7ca22ef1ab70597f2663ad868c8b5bda7e2e6bd2
Author: Julian Reschke <[email protected]>
AuthorDate: Tue Aug 4 12:37:58 2026 +0100

    SLING-13287: log type - w.i.p.
---
 .../impl/mapping/PagedQueryIterator.java           | 21 +++++++++++++---
 .../impl/mapping/PagedQueryIteratorTest.java       | 28 ++++++++++++++++++++--
 2 files changed, 44 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 2081daa9..4989bd31 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
@@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ValueMap;
 import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -82,29 +83,43 @@ public class PagedQueryIterator implements 
Iterator<Resource> {
         page += 1;
     }
 
+    private static String getDiagInformationWhenNotString(ValueMap valueMap, 
String propertyNName) {
+        Object value = valueMap.get(propertyNName);
+        if (value == null || value instanceof String[] || value instanceof 
String) {
+            // all good
+            return "";
+        } else {
+            return " (type: '" + value.getClass() + "')";
+        }
+    }
+
     private Resource getNext() throws NoSuchElementException {
         Resource resource = it.next();
         count += 1;
-        final String[] values = resource.getValueMap().get(propertyName, 
defaultValue);
+
+        final ValueMap valueMap = resource.getValueMap();
+        final String[] values = valueMap.get(propertyName, defaultValue);
 
         if (values.length > 0) {
             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 in page {}, property name 
'{}', got '{}'{}, despite querying for > '{}'"
                                 + " (the async index may not yet reflect the 
current property value)",
                         (page - 1),
                         propertyName,
                         value,
+                        getDiagInformationWhenNotString(valueMap, 
propertyName),
                         lastKey);
             }
             if (lastValue != null && value.compareTo(lastValue) < 0) {
                 log.warn(
-                        "unexpected query result in page {}, property name 
'{}', got '{}', last value was '{}'"
+                        "unexpected query result in page {}, property name 
'{}', got '{}'{}, last value was '{}'"
                                 + " (the async index may not yet reflect the 
current property value)",
                         (page - 1),
                         propertyName,
                         value,
+                        getDiagInformationWhenNotString(valueMap, 
propertyName),
                         lastValue);
             }
 
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 24ac0777..7f6b208b 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
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Date;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.function.Predicate;
@@ -37,6 +38,7 @@ import org.mockito.MockitoAnnotations;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
@@ -98,14 +100,36 @@ public class PagedQueryIteratorTest extends 
AbstractMappingMapEntriesTest {
         checkResult(it, expected);
     }
 
+    @Test
+    public void testSimpleWrongType() {
+        // SLING-13284: out-of-order results (from a stale async index) should 
not abort iteration
+        String[] expected = new String[] {"a", "b", "c"};
+        Collection<Resource> expectedResources = toResourceList(expected);
+
+        ValueMap m = mock(ValueMap.class);
+        when(m.get(eq(PROPNAME), any(Object.class))).thenReturn(new Date[] 
{new Date(0)});
+        Resource r = mock(Resource.class);
+        when(r.getValueMap()).thenReturn(m);
+
+        expectedResources.add(r);
+
+        when(resourceResolver.findResources(eq("testSimpleWrongType"), 
eq("JCR-SQL2")))
+                .thenReturn(expectedResources.iterator());
+        PagedQueryIterator it =
+                new PagedQueryIterator("alias", PROPNAME, resourceResolver, 
"testSimpleWrongType", 2000);
+        assertNotNull(it);
+        checkResult(it, expected);
+    }
+
     @Test
     public void testSimpleWrongResultAfterKey() {
         // SLING-13284: out-of-order results across page boundaries should not 
abort iteration
         String[] expected = new String[] {"x", "x", "a", "a"};
         Collection<Resource> expectedResources = toResourceList(expected);
-        when(resourceResolver.findResources("testSimpleWrongOrder", 
"JCR-SQL2"))
+        when(resourceResolver.findResources("testSimpleWrongResultAfterKey", 
"JCR-SQL2"))
                 .thenReturn(expectedResources.iterator());
-        PagedQueryIterator it = new PagedQueryIterator("alias", PROPNAME, 
resourceResolver, "testSimpleWrongOrder", 1);
+        PagedQueryIterator it =
+                new PagedQueryIterator("alias", PROPNAME, resourceResolver, 
"testSimpleWrongResultAfterKey", 1);
         int count = 0;
         while (it.hasNext()) {
             it.next();

Reply via email to