Search in sources :

Example 1 with Writer

use of org.neo4j.index.internal.gbptree.Writer in project neo4j by neo4j.

the class GBPTreeGenericCountsStore method directUpdater.

/**
 * Opens and returns a {@link CountUpdater} which makes direct insertions into the backing tree. This comes from the use case of having a way
 * to build the initial data set without the context of transactions, such as batch-insertion or initial import.
 *
 * @param applyDeltas if {@code true} the writer will apply the changes as deltas, which means reading from the tree.
 * If {@code false} all changes will be written as-is, i.e. as if they are absolute counts.
 */
protected CountUpdater directUpdater(boolean applyDeltas, CursorContext cursorContext) throws IOException {
    boolean success = false;
    Lock lock = this.lock.writeLock();
    lock.lock();
    try {
        CountUpdater.CountWriter writer = applyDeltas ? new DeltaTreeWriter(() -> tree.writer(cursorContext), key -> readCountFromTree(key, cursorContext), layout, maxCacheSize) : new TreeWriter(tree.writer(cursorContext));
        CountUpdater updater = new CountUpdater(writer, lock);
        success = true;
        return updater;
    } finally {
        if (!success) {
            lock.unlock();
        }
    }
}
Also used : GBPTreeVisitor(org.neo4j.index.internal.gbptree.GBPTreeVisitor) MetadataMismatchException(org.neo4j.index.internal.gbptree.MetadataMismatchException) Writer(org.neo4j.index.internal.gbptree.Writer) Sets.immutable(org.eclipse.collections.api.factory.Sets.immutable) OutOfOrderSequence(org.neo4j.util.concurrent.OutOfOrderSequence) DatabaseReadOnlyChecker.readOnly(org.neo4j.configuration.helpers.DatabaseReadOnlyChecker.readOnly) Seeker(org.neo4j.index.internal.gbptree.Seeker) GBPTreeConsistencyCheckVisitor(org.neo4j.index.internal.gbptree.GBPTreeConsistencyCheckVisitor) CursorContext(org.neo4j.io.pagecache.context.CursorContext) IOUtils.closeAllUnchecked(org.neo4j.io.IOUtils.closeAllUnchecked) ReporterFactory(org.neo4j.annotations.documented.ReporterFactory) TreeFileNotFoundException(org.neo4j.index.internal.gbptree.TreeFileNotFoundException) ArrayUtils(org.apache.commons.lang3.ArrayUtils) NULL(org.neo4j.io.pagecache.tracing.PageCacheTracer.NULL) ReentrantReadWriteLock(java.util.concurrent.locks.ReentrantReadWriteLock) BASE_TX_ID(org.neo4j.storageengine.api.TransactionIdStore.BASE_TX_ID) Function(java.util.function.Function) GBPTree(org.neo4j.index.internal.gbptree.GBPTree) UnderlyingStorageException(org.neo4j.exceptions.UnderlyingStorageException) PrimitiveLongArrayQueue(org.neo4j.collection.PrimitiveLongArrayQueue) LongHashSet(org.eclipse.collections.impl.set.mutable.primitive.LongHashSet) Map(java.util.Map) PageCacheTracer(org.neo4j.io.pagecache.tracing.PageCacheTracer) RecoveryCleanupWorkCollector(org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector) CountsKey.strayTxId(org.neo4j.internal.counts.CountsKey.strayTxId) Path(java.nio.file.Path) ReadWriteLock(java.util.concurrent.locks.ReadWriteLock) MemoryTracker(org.neo4j.memory.MemoryTracker) PrintStream(java.io.PrintStream) PageCache(org.neo4j.io.pagecache.PageCache) EMPTY_LONG_ARRAY(org.neo4j.collection.PrimitiveLongCollections.EMPTY_LONG_ARRAY) ArrayQueueOutOfOrderSequence(org.neo4j.util.concurrent.ArrayQueueOutOfOrderSequence) IOException(java.io.IOException) LongConsumer(java.util.function.LongConsumer) MutableLongSet(org.eclipse.collections.api.set.primitive.MutableLongSet) UncheckedIOException(java.io.UncheckedIOException) AtomicLong(java.util.concurrent.atomic.AtomicLong) Lock(java.util.concurrent.locks.Lock) CountsStorage(org.neo4j.counts.CountsStorage) MIN_STRAY_TX_ID(org.neo4j.internal.counts.CountsKey.MIN_STRAY_TX_ID) Preconditions.checkState(org.neo4j.util.Preconditions.checkState) MAX_STRAY_TX_ID(org.neo4j.internal.counts.CountsKey.MAX_STRAY_TX_ID) DatabaseReadOnlyChecker(org.neo4j.configuration.helpers.DatabaseReadOnlyChecker) ABSENT(org.neo4j.internal.counts.CountsChanges.ABSENT) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) ReentrantReadWriteLock(java.util.concurrent.locks.ReentrantReadWriteLock) ReadWriteLock(java.util.concurrent.locks.ReadWriteLock) Lock(java.util.concurrent.locks.Lock)

Example 2 with Writer

use of org.neo4j.index.internal.gbptree.Writer in project neo4j by neo4j.

the class IdRangeMarkerTest method shouldCloseWriterOnClose.

@Test
void shouldCloseWriterOnClose() throws IOException {
    // when
    Writer writer = mock(Writer.class);
    try (IdRangeMarker marker = new IdRangeMarker(idsPerEntry, layout, writer, mock(Lock.class), mock(ValueMerger.class), true, new AtomicBoolean(), 1, new AtomicLong(0), true, NO_MONITOR)) {
        verify(writer, never()).close();
    }
    // then
    verify(writer).close();
}
Also used : AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) AtomicLong(java.util.concurrent.atomic.AtomicLong) ValueMerger(org.neo4j.index.internal.gbptree.ValueMerger) Writer(org.neo4j.index.internal.gbptree.Writer) Lock(java.util.concurrent.locks.Lock) Test(org.junit.jupiter.api.Test)

Aggregations

AtomicLong (java.util.concurrent.atomic.AtomicLong)2 Lock (java.util.concurrent.locks.Lock)2 Writer (org.neo4j.index.internal.gbptree.Writer)2 IOException (java.io.IOException)1 PrintStream (java.io.PrintStream)1 UncheckedIOException (java.io.UncheckedIOException)1 Path (java.nio.file.Path)1 Map (java.util.Map)1 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)1 ReadWriteLock (java.util.concurrent.locks.ReadWriteLock)1 ReentrantReadWriteLock (java.util.concurrent.locks.ReentrantReadWriteLock)1 Function (java.util.function.Function)1 LongConsumer (java.util.function.LongConsumer)1 ArrayUtils (org.apache.commons.lang3.ArrayUtils)1 Sets.immutable (org.eclipse.collections.api.factory.Sets.immutable)1 MutableLongSet (org.eclipse.collections.api.set.primitive.MutableLongSet)1 LongHashSet (org.eclipse.collections.impl.set.mutable.primitive.LongHashSet)1 Test (org.junit.jupiter.api.Test)1 ReporterFactory (org.neo4j.annotations.documented.ReporterFactory)1 PrimitiveLongArrayQueue (org.neo4j.collection.PrimitiveLongArrayQueue)1