diff --git a/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/index/AbstractLuceneIndex.java b/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/index/AbstractLuceneIndex.java index 2decb85ed549e..f9dd5fd607f70 100644 --- a/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/index/AbstractLuceneIndex.java +++ b/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/index/AbstractLuceneIndex.java @@ -30,9 +30,8 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; -import java.util.stream.Collectors; -import java.util.stream.Stream; import org.neo4j.graphdb.ResourceIterator; import org.neo4j.helpers.ArrayUtil; @@ -60,6 +59,8 @@ public abstract class AbstractLuceneIndex { protected final PartitionedIndexStorage indexStorage; private final IndexPartitionFactory partitionFactory; + // Note that we rely on the thread-safe internal snapshot feature of the CopyOnWriteArrayList + // for the thread-safety of this and derived classes. private CopyOnWriteArrayList partitions = new CopyOnWriteArrayList<>(); private volatile boolean open; @@ -93,33 +94,16 @@ public void create() throws IOException */ public void open() throws IOException { - Stream> indexDirectories = indexStorage.openIndexDirectories().entrySet().stream(); - List list = null; - try - { - list = indexDirectories.map( e -> createPartition( e.getKey(), e.getValue() ) ) - .collect( Collectors.toList() ); - } - catch ( UncheckedIOException e ) + Set> indexDirectories = indexStorage.openIndexDirectories().entrySet(); + List list = new ArrayList<>( indexDirectories.size() ); + for ( Map.Entry entry : indexDirectories ) { - throw e.getCause(); + list.add( partitionFactory.createPartition( entry.getKey(), entry.getValue() ) ); } partitions.addAll( list ); open = true; } - private AbstractIndexPartition createPartition( File key, Directory value ) - { - try - { - return partitionFactory.createPartition( key, value ); - } - catch ( IOException e ) - { - throw new UncheckedIOException( e ); - } - } - public boolean isOpen() { return open; @@ -221,9 +205,8 @@ public void flush() throws IOException public void close() throws IOException { open = false; - List partitionsCopy = new ArrayList<>( partitions ); + IOUtils.closeAll( partitions ); partitions.clear(); - IOUtils.closeAll( partitionsCopy ); } /** diff --git a/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/labelscan/WritableDatabaseLabelScanIndex.java b/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/labelscan/WritableDatabaseLabelScanIndex.java index deaadc89d26c2..a8e222bcf46e7 100644 --- a/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/labelscan/WritableDatabaseLabelScanIndex.java +++ b/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/labelscan/WritableDatabaseLabelScanIndex.java @@ -44,15 +44,7 @@ public WritableDatabaseLabelScanIndex( BitmapDocumentFormat format, PartitionedI @Override public LabelScanReader getLabelScanReader() { -// partitionsLock.lock(); - try - { - return luceneIndex.getLabelScanReader(); - } - finally - { -// partitionsLock.unlock(); - } + return luceneIndex.getLabelScanReader(); } @Override