This is an automated email from the ASF dual-hosted git repository.
reschke pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git
The following commit(s) were added to refs/heads/master by this push:
new ce88b10c SLING-13323: when paging encounters unexpected values, log
the position inside the page as well (#234)
ce88b10c is described below
commit ce88b10cea837fe7abddf46f2178cc168cbe8bd2
Author: Julian Reschke <[email protected]>
AuthorDate: Mon Sep 28 12:25:25 2026 +0200
SLING-13323: when paging encounters unexpected values, log the position
inside the page as well (#234)
---
.../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