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

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

commit c60ebd2cf5c3c370d7bd3e2b2ab62a9d06714892
Author: Thomas Mueller <thom...@apache.org>
AuthorDate: Wed Jun 15 15:07:57 2022 +0200

    OAK-9804 Flaky unit test 
FlatFileStoreTest.resumePreviousUnfinishedDownload()
---
 .../index/indexer/document/flatfile/FlatFileStoreTest.java  | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git 
a/oak-run-commons/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStoreTest.java
 
b/oak-run-commons/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStoreTest.java
index 18bc33e75d..eb7f1a2672 100644
--- 
a/oak-run-commons/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStoreTest.java
+++ 
b/oak-run-commons/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStoreTest.java
@@ -23,6 +23,7 @@ import com.google.common.collect.Iterables;
 import org.apache.commons.io.FileUtils;
 import org.apache.jackrabbit.oak.index.indexer.document.CompositeException;
 import org.apache.jackrabbit.oak.index.indexer.document.NodeStateEntry;
+import 
org.apache.jackrabbit.oak.index.indexer.document.NodeStateEntry.NodeStateEntryBuilder;
 import 
org.apache.jackrabbit.oak.index.indexer.document.NodeStateEntryTraverser;
 import 
org.apache.jackrabbit.oak.index.indexer.document.NodeStateEntryTraverserFactory;
 import org.apache.jackrabbit.oak.plugins.document.mongo.DocumentStoreSplitter;
@@ -397,7 +398,11 @@ public class FlatFileStoreTest {
             assertContainsMergeFolder(spyBuilder.getFlatFileStoreDir(), true);
 
             List<String> sortedPaths = 
TestUtils.sortPaths(mongoDocs.stream().map(md -> 
md.path).collect(Collectors.toList()));
-            assertEquals(mongoDocs.size(), nsetf.getTotalProvidedDocCount());
+            // with multi-threaded download and multiple threads,
+            // we can't expect that each entry is downloaded exactly once,
+            // as there could be some overlap (the range check happends
+            // _after_ retrieving the entry)
+            assertTrue(mongoDocs.size() <= nsetf.getTotalProvidedDocCount());
             assertEquals(sortedPaths, entryPaths);
         } finally {
             System.clearProperty(OAK_INDEXER_SORT_STRATEGY_TYPE);
@@ -479,7 +484,8 @@ public class FlatFileStoreTest {
                     String traverserId = getId();
                     return new Iterator<NodeStateEntry>() {
 
-                        NodeStateEntry lastReturnedDoc;
+                        // ensure we don't get a NullPointerException in 
logger.debug below
+                        NodeStateEntry lastReturnedDoc = new 
NodeStateEntryBuilder(null, "/").build();
 
                         @Override
                         public boolean hasNext() {
@@ -488,7 +494,8 @@ public class FlatFileStoreTest {
 
                         @Override
                         public NodeStateEntry next() {
-                            if (providedDocuments.get() == 
breakAfterDelivering.get()) {
+                            // multiple threads could fail at the same time, 
that's fine
+                            if (providedDocuments.get() >= 
breakAfterDelivering.get()) {
                                 logger.debug("{} Breaking after getting docs 
with id {}", traverserId, lastReturnedDoc.getId());
                                 throw new 
IllegalStateException(EXCEPTION_MESSAGE);
                             }

Reply via email to