Author: thomasm Date: Wed Aug 12 14:23:11 2020 New Revision: 1880808 URL: http://svn.apache.org/viewvc?rev=1880808&view=rev Log: OAK-9173 Oak-run indexing fails with 'This map is closed'
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStore.java jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStoreIterator.java jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStoreIteratorTest.java Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStore.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStore.java?rev=1880808&r1=1880807&r2=1880808&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStore.java (original) +++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStore.java Wed Aug 12 14:23:11 2020 @@ -61,7 +61,9 @@ public class FlatFileStore implements It @Override public Iterator<NodeStateEntry> iterator() { String fileName = new File(storeFile.getParent(), "linkedList").getAbsolutePath(); - return new FlatFileStoreIterator(blobStore, fileName, createBaseIterator(), preferredPathElements); + FlatFileStoreIterator it = new FlatFileStoreIterator(blobStore, fileName, createBaseIterator(), preferredPathElements); + closer.register(it::close); + return it; } private Iterator<NodeStateEntry> createBaseIterator() { Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStoreIterator.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStoreIterator.java?rev=1880808&r1=1880807&r2=1880808&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStoreIterator.java (original) +++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStoreIterator.java Wed Aug 12 14:23:11 2020 @@ -22,6 +22,7 @@ package org.apache.jackrabbit.oak.index. import static com.google.common.collect.Iterators.concat; import static com.google.common.collect.Iterators.singletonIterator; +import java.io.Closeable; import java.util.Iterator; import java.util.Set; @@ -36,7 +37,7 @@ import org.slf4j.LoggerFactory; import com.google.common.collect.AbstractIterator; -class FlatFileStoreIterator extends AbstractIterator<NodeStateEntry> implements Iterator<NodeStateEntry> { +class FlatFileStoreIterator extends AbstractIterator<NodeStateEntry> implements Iterator<NodeStateEntry>, Closeable { private final Logger log = LoggerFactory.getLogger(getClass()); private final Iterator<NodeStateEntry> baseItr; private final NodeStateEntryList buffer; @@ -85,7 +86,6 @@ class FlatFileStoreIterator extends Abst current = computeNextEntry(); if (current == null) { log.info("Max buffer size in complete traversal is [{}]", maxBufferSize); - buffer.close(); return endOfData(); } else { return current; @@ -130,7 +130,6 @@ class FlatFileStoreIterator extends Abst if (qitr.hasNext()) { return wrapIfNeeded(qitr.next()); } - buffer.close(); return endOfData(); } }; @@ -148,4 +147,9 @@ class FlatFileStoreIterator extends Abst // (actually wrapping would work just fine - it's just not needed) return e; } + + @Override + public void close() { + buffer.close(); + } } Modified: jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStoreIteratorTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStoreIteratorTest.java?rev=1880808&r1=1880807&r2=1880808&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStoreIteratorTest.java (original) +++ jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStoreIteratorTest.java Wed Aug 12 14:23:11 2020 @@ -60,7 +60,7 @@ public class FlatFileStoreIteratorTest { public void simpleTraversal() { Set<String> preferred = ImmutableSet.of("jcr:content"); CountingIterable<NodeStateEntry> citr = createList(preferred, asList("/a", "/a/jcr:content", "/a/jcr:content/metadata", - "/a/d", "/e")); + "/a/d", "/e", "/e/e")); FlatFileStoreIterator fitr = newFlatFileStore(citr.iterator(), preferred); NodeStateEntry a = fitr.next(); @@ -86,7 +86,11 @@ public class FlatFileStoreIteratorTest { NodeStateEntry nse4 = fitr.next(); assertEquals("/e", nse4.getPath()); - assertEquals(0, nse4.getNodeState().getChildNodeCount(100)); + assertEquals(1, nse4.getNodeState().getChildNodeCount(100)); + + NodeStateEntry nse5 = fitr.next(); + assertEquals("/e/e", nse5.getPath()); + assertEquals(0, nse5.getNodeState().getChildNodeCount(100)); assertFalse(fitr.hasNext()); } @@ -239,4 +243,4 @@ public class FlatFileStoreIteratorTest { // ignore } } -} \ No newline at end of file +}