Skip to content

Commit

Permalink
Moves IndexWriter into .gbptree and renames to Writer
Browse files Browse the repository at this point in the history
  • Loading branch information
tinwelint committed Jan 12, 2017
1 parent 9bb3145 commit f3b1a99
Show file tree
Hide file tree
Showing 12 changed files with 37 additions and 70 deletions.
23 changes: 10 additions & 13 deletions community/index/src/main/java/org/neo4j/index/gbptree/GBPTree.java
Expand Up @@ -35,9 +35,6 @@
import org.neo4j.collection.primitive.Primitive; import org.neo4j.collection.primitive.Primitive;
import org.neo4j.collection.primitive.PrimitiveLongSet; import org.neo4j.collection.primitive.PrimitiveLongSet;
import org.neo4j.cursor.RawCursor; import org.neo4j.cursor.RawCursor;
import org.neo4j.index.IndexWriter;
import org.neo4j.index.ValueMerger;
import org.neo4j.index.ValueMergers;
import org.neo4j.io.pagecache.CursorException; import org.neo4j.io.pagecache.CursorException;
import org.neo4j.io.pagecache.IOLimiter; import org.neo4j.io.pagecache.IOLimiter;
import org.neo4j.io.pagecache.PageCache; import org.neo4j.io.pagecache.PageCache;
Expand Down Expand Up @@ -72,7 +69,7 @@
* while at the same time keeping one pointer to the stable version, in case there's a crash or non-clean * while at the same time keeping one pointer to the stable version, in case there's a crash or non-clean
* shutdown, followed by recovery. * shutdown, followed by recovery.
* <p> * <p>
* Currently no leaves will be removed or merged as part of {@link IndexWriter#remove(Object) removals}. * Currently no leaves will be removed or merged as part of {@link Writer#remove(Object) removals}.
* <p> * <p>
* A single writer w/ multiple concurrent readers is supported. Assuming usage adheres to this * A single writer w/ multiple concurrent readers is supported. Assuming usage adheres to this
* constraint neither writer nor readers are blocking. Readers are virtually garbage-free. * constraint neither writer nor readers are blocking. Readers are virtually garbage-free.
Expand Down Expand Up @@ -186,9 +183,9 @@ default void checkpointCompleted()
private final FreeListIdProvider freeList; private final FreeListIdProvider freeList;


/** /**
* A single instance {@link IndexWriter} because tree only supports single writer. * A single instance {@link Writer} because tree only supports single writer.
*/ */
private final SingleIndexWriter writer; private final SingleWriter writer;


/** /**
* Check-pointing flushes updates to stable storage. * Check-pointing flushes updates to stable storage.
Expand Down Expand Up @@ -284,7 +281,7 @@ public GBPTree( PageCache pageCache, File indexFile, Layout<KEY,VALUE> layout, i
this.pagedFile = openOrCreate( pageCache, indexFile, tentativePageSize, layout ); this.pagedFile = openOrCreate( pageCache, indexFile, tentativePageSize, layout );
this.bTreeNode = new TreeNode<>( pageSize, layout ); this.bTreeNode = new TreeNode<>( pageSize, layout );
this.freeList = new FreeListIdProvider( pagedFile, pageSize, rootId, FreeListIdProvider.NO_MONITOR ); this.freeList = new FreeListIdProvider( pagedFile, pageSize, rootId, FreeListIdProvider.NO_MONITOR );
this.writer = new SingleIndexWriter( new InternalTreeLogic<>( freeList, bTreeNode, layout ) ); this.writer = new SingleWriter( new InternalTreeLogic<>( freeList, bTreeNode, layout ) );


try try
{ {
Expand Down Expand Up @@ -616,16 +613,16 @@ public void close() throws IOException
} }


/** /**
* Returns a {@link IndexWriter} able to modify the index, i.e. insert and remove keys/values. * Returns a {@link Writer} able to modify the index, i.e. insert and remove keys/values.
* After usage the returned writer must be closed, typically by using try-with-resource clause. * After usage the returned writer must be closed, typically by using try-with-resource clause.
* *
* @return the single {@link IndexWriter} for this index. The returned writer must be * @return the single {@link Writer} for this index. The returned writer must be
* {@link IndexWriter#close() closed} before another caller can acquire this writer. * {@link Writer#close() closed} before another caller can acquire this writer.
* @throws IOException on error accessing the index. * @throws IOException on error accessing the index.
* @throws IllegalStateException for calls made between a successful call to this method and closing the * @throws IllegalStateException for calls made between a successful call to this method and closing the
* returned writer. * returned writer.
*/ */
public IndexWriter<KEY,VALUE> writer() throws IOException public Writer<KEY,VALUE> writer() throws IOException
{ {
if ( !writerTaken.compareAndSet( false, true ) ) if ( !writerTaken.compareAndSet( false, true ) )
{ {
Expand Down Expand Up @@ -728,7 +725,7 @@ public String toString()
stableGeneration( generation ), unstableGeneration( generation ) ); stableGeneration( generation ), unstableGeneration( generation ) );
} }


private class SingleIndexWriter implements IndexWriter<KEY,VALUE> private class SingleWriter implements Writer<KEY,VALUE>
{ {
private final InternalTreeLogic<KEY,VALUE> treeLogic; private final InternalTreeLogic<KEY,VALUE> treeLogic;
private final StructurePropagation<KEY> structurePropagation; private final StructurePropagation<KEY> structurePropagation;
Expand All @@ -739,7 +736,7 @@ private class SingleIndexWriter implements IndexWriter<KEY,VALUE>
private long stableGeneration; private long stableGeneration;
private long unstableGeneration; private long unstableGeneration;


SingleIndexWriter( InternalTreeLogic<KEY,VALUE> treeLogic ) SingleWriter( InternalTreeLogic<KEY,VALUE> treeLogic )
{ {
this.structurePropagation = new StructurePropagation<>( layout.newKey() ); this.structurePropagation = new StructurePropagation<>( layout.newKey() );
this.treeLogic = treeLogic; this.treeLogic = treeLogic;
Expand Down
Expand Up @@ -23,7 +23,6 @@
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;


import org.neo4j.index.ValueMerger;
import org.neo4j.io.pagecache.PageCursor; import org.neo4j.io.pagecache.PageCursor;


import static org.neo4j.index.gbptree.KeySearch.isHit; import static org.neo4j.index.gbptree.KeySearch.isHit;
Expand Down
Expand Up @@ -17,7 +17,7 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.neo4j.index; package org.neo4j.index.gbptree;


/** /**
* Decides what to do when inserting key which already exists in index. Different implementations of * Decides what to do when inserting key which already exists in index. Different implementations of
Expand Down
Expand Up @@ -17,7 +17,7 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.neo4j.index; package org.neo4j.index.gbptree;


/** /**
* Common {@link ValueMerger} implementations. * Common {@link ValueMerger} implementations.
Expand Down
Expand Up @@ -17,7 +17,7 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.neo4j.index; package org.neo4j.index.gbptree;


import java.io.Closeable; import java.io.Closeable;
import java.io.IOException; import java.io.IOException;
Expand All @@ -30,7 +30,7 @@
* @param <KEY> type of keys * @param <KEY> type of keys
* @param <VALUE> type of values * @param <VALUE> type of values
*/ */
public interface IndexWriter<KEY,VALUE> extends Closeable public interface Writer<KEY,VALUE> extends Closeable
{ {
/** /**
* Associate given {@code key} with given {@code value}. * Associate given {@code key} with given {@code value}.
Expand Down
24 changes: 0 additions & 24 deletions community/index/src/main/java/org/neo4j/index/package-info.java

This file was deleted.

Expand Up @@ -23,7 +23,6 @@
import org.junit.Test; import org.junit.Test;


import org.neo4j.collection.primitive.PrimitiveLongCollections; import org.neo4j.collection.primitive.PrimitiveLongCollections;
import org.neo4j.index.ValueMergers;
import org.neo4j.io.pagecache.CursorException; import org.neo4j.io.pagecache.CursorException;
import org.neo4j.io.pagecache.PageCursor; import org.neo4j.io.pagecache.PageCursor;


Expand Down
Expand Up @@ -40,7 +40,6 @@
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;


import org.neo4j.cursor.RawCursor; import org.neo4j.cursor.RawCursor;
import org.neo4j.index.IndexWriter;
import org.neo4j.io.pagecache.IOLimiter; import org.neo4j.io.pagecache.IOLimiter;
import org.neo4j.io.pagecache.PageCache; import org.neo4j.io.pagecache.PageCache;
import org.neo4j.test.rule.PageCacheRule; import org.neo4j.test.rule.PageCacheRule;
Expand Down Expand Up @@ -110,7 +109,7 @@ public void shouldStayCorrectAfterRandomModifications() throws Exception
} }


// WHEN // WHEN
try ( IndexWriter<MutableLong,MutableLong> writer = index.writer() ) try ( Writer<MutableLong,MutableLong> writer = index.writer() )
{ {
for ( Map.Entry<MutableLong,MutableLong> entry : data.entrySet() ) for ( Map.Entry<MutableLong,MutableLong> entry : data.entrySet() )
{ {
Expand Down Expand Up @@ -274,7 +273,7 @@ public void shouldReadCorrectlyWhenConcurrentlyInsertingInOrder() throws Throwab
int inserted = 0; int inserted = 0;
while ( (inserted < 100_000 || numberOfReads.get() < 10_000) && !failHalt.get() ) while ( (inserted < 100_000 || numberOfReads.get() < 10_000) && !failHalt.get() )
{ {
try ( IndexWriter<MutableLong,MutableLong> writer = index.writer() ) try ( Writer<MutableLong,MutableLong> writer = index.writer() )
{ {
int groupCount = random1.nextInt( 1000 ) + 1; int groupCount = random1.nextInt( 1000 ) + 1;
for ( int i = 0; i < groupCount; i++, inserted++ ) for ( int i = 0; i < groupCount; i++, inserted++ )
Expand Down Expand Up @@ -354,7 +353,7 @@ public void shouldReadCorrectlyWhenConcurrentlyInsertingOutOfOrder() throws Thro
int iteration = currentWriteIteration.get(); int iteration = currentWriteIteration.get();
while ( !failHalt.get() && numberOfReads.get() < wantedNbrOfReads ) while ( !failHalt.get() && numberOfReads.get() < wantedNbrOfReads )
{ {
try ( IndexWriter<MutableLong,MutableLong> writer = index.writer() ) try ( Writer<MutableLong,MutableLong> writer = index.writer() )
{ {
for ( long i = minRange( nbrOfGroups, rangeWidth, iteration ) + iteration % nbrOfGroups; for ( long i = minRange( nbrOfGroups, rangeWidth, iteration ) + iteration % nbrOfGroups;
i < maxRange( nbrOfGroups, rangeWidth, iteration ); i += nbrOfGroups ) i < maxRange( nbrOfGroups, rangeWidth, iteration ); i += nbrOfGroups )
Expand Down Expand Up @@ -443,7 +442,7 @@ public void shouldReadCorrectlyWhenConcurrentlyInsertingOutOfOrderAndSeekingBack
while ( !failHalt.get() && while ( !failHalt.get() &&
(numberOfReads.get() < wantedNbrOfReads || iteration < nbrOfLeastWantedIterations) ) (numberOfReads.get() < wantedNbrOfReads || iteration < nbrOfLeastWantedIterations) )
{ {
try ( IndexWriter<MutableLong,MutableLong> writer = index.writer() ) try ( Writer<MutableLong,MutableLong> writer = index.writer() )
{ {
for ( long i = maxRange( nbrOfGroups, rangeWidth, iteration ) - iteration % nbrOfGroups; for ( long i = maxRange( nbrOfGroups, rangeWidth, iteration ) - iteration % nbrOfGroups;
i > minRange( nbrOfGroups, rangeWidth, iteration ); i -= nbrOfGroups ) i > minRange( nbrOfGroups, rangeWidth, iteration ); i -= nbrOfGroups )
Expand Down Expand Up @@ -531,7 +530,7 @@ public void shouldReadCorrectlyWhenConcurrentlyRemovingOutOfOrder() throws Throw
int iteration = currentWriteIteration.get(); int iteration = currentWriteIteration.get();
while ( !failHalt.get() && lastRemovedKey.get() < maxValue - 2) while ( !failHalt.get() && lastRemovedKey.get() < maxValue - 2)
{ {
try ( IndexWriter<MutableLong,MutableLong> writer = index.writer() ) try ( Writer<MutableLong,MutableLong> writer = index.writer() )
{ {
int minRange = minRange( nbrOfGroups, rangeWidth, iteration ); int minRange = minRange( nbrOfGroups, rangeWidth, iteration );
int maxRange = maxRange( nbrOfGroups, rangeWidth, iteration ); int maxRange = maxRange( nbrOfGroups, rangeWidth, iteration );
Expand Down Expand Up @@ -620,7 +619,7 @@ public void shouldReadCorrectlyWhenConcurrentlyRemovingOutOfOrderBackwards() thr
int iteration = currentWriteIteration.get(); int iteration = currentWriteIteration.get();
while ( !failHalt.get() && lastRemovedKey.get() < maxValue + 1) while ( !failHalt.get() && lastRemovedKey.get() < maxValue + 1)
{ {
try ( IndexWriter<MutableLong,MutableLong> writer = index.writer() ) try ( Writer<MutableLong,MutableLong> writer = index.writer() )
{ {
int minRange = minRange( nbrOfGroups, rangeWidth, iteration ); int minRange = minRange( nbrOfGroups, rangeWidth, iteration );
int maxRange = maxRange( nbrOfGroups, rangeWidth, iteration ); int maxRange = maxRange( nbrOfGroups, rangeWidth, iteration );
Expand Down Expand Up @@ -662,7 +661,7 @@ private void insertEverythingInRange( GBPTree<MutableLong,MutableLong> index, lo
MutableLong key = new MutableLong(); MutableLong key = new MutableLong();
MutableLong value = new MutableLong(); MutableLong value = new MutableLong();


try ( IndexWriter<MutableLong,MutableLong> writer = index.writer() ) try ( Writer<MutableLong,MutableLong> writer = index.writer() )
{ {
while ( nextToInsert < maxValue ) while ( nextToInsert < maxValue )
{ {
Expand Down Expand Up @@ -710,7 +709,7 @@ private static void randomlyModifyIndex( GBPTree<MutableLong,MutableLong> index,
Map<MutableLong,MutableLong> data, Random random ) throws IOException Map<MutableLong,MutableLong> data, Random random ) throws IOException
{ {
int changeCount = random.nextInt( 10 ) + 10; int changeCount = random.nextInt( 10 ) + 10;
try ( IndexWriter<MutableLong,MutableLong> writer = index.writer() ) try ( Writer<MutableLong,MutableLong> writer = index.writer() )
{ {
for ( int i = 0; i < changeCount; i++ ) for ( int i = 0; i < changeCount; i++ )
{ {
Expand Down
Expand Up @@ -33,7 +33,6 @@
import java.util.stream.Collectors; import java.util.stream.Collectors;


import org.neo4j.cursor.RawCursor; import org.neo4j.cursor.RawCursor;
import org.neo4j.index.IndexWriter;
import org.neo4j.io.pagecache.PageCache; import org.neo4j.io.pagecache.PageCache;
import org.neo4j.test.rule.PageCacheRule; import org.neo4j.test.rule.PageCacheRule;
import org.neo4j.test.rule.RandomRule; import org.neo4j.test.rule.RandomRule;
Expand Down Expand Up @@ -76,7 +75,7 @@ public void shouldRecoverFromCrashBeforeFirstCheckpoint() throws Exception
{ {
PageCache pageCache = createPageCache(); PageCache pageCache = createPageCache();
GBPTree<MutableLong,MutableLong> index = createIndex( pageCache, file ); GBPTree<MutableLong,MutableLong> index = createIndex( pageCache, file );
IndexWriter<MutableLong,MutableLong> writer = index.writer(); Writer<MutableLong,MutableLong> writer = index.writer();


key.setValue( 1L ); key.setValue( 1L );
value.setValue( 10L ); value.setValue( 10L );
Expand All @@ -97,7 +96,7 @@ public void shouldRecoverFromCrashBeforeFirstCheckpoint() throws Exception
// this is the mimic:ed recovery // this is the mimic:ed recovery
index.prepareForRecovery(); index.prepareForRecovery();


try ( IndexWriter<MutableLong,MutableLong> writer = index.writer() ) try ( Writer<MutableLong,MutableLong> writer = index.writer() )
{ {
writer.put( key, value ); writer.put( key, value );
} }
Expand Down Expand Up @@ -428,7 +427,7 @@ class InsertAction extends RecoverableAction
@Override @Override
public void execute( GBPTree<MutableLong,MutableLong> index ) throws IOException public void execute( GBPTree<MutableLong,MutableLong> index ) throws IOException
{ {
try ( IndexWriter<MutableLong,MutableLong> writer = index.writer() ) try ( Writer<MutableLong,MutableLong> writer = index.writer() )
{ {
for ( int i = 0; i < data.length; ) for ( int i = 0; i < data.length; )
{ {
Expand All @@ -450,7 +449,7 @@ class RemoveAction extends RecoverableAction
@Override @Override
public void execute( GBPTree<MutableLong,MutableLong> index ) throws IOException public void execute( GBPTree<MutableLong,MutableLong> index ) throws IOException
{ {
try ( IndexWriter<MutableLong,MutableLong> writer = index.writer() ) try ( Writer<MutableLong,MutableLong> writer = index.writer() )
{ {
for ( int i = 0; i < data.length; ) for ( int i = 0; i < data.length; )
{ {
Expand Down
Expand Up @@ -36,7 +36,6 @@
import org.neo4j.collection.primitive.PrimitiveLongCollections; import org.neo4j.collection.primitive.PrimitiveLongCollections;
import org.neo4j.collection.primitive.PrimitiveLongSet; import org.neo4j.collection.primitive.PrimitiveLongSet;
import org.neo4j.cursor.RawCursor; import org.neo4j.cursor.RawCursor;
import org.neo4j.index.IndexWriter;
import org.neo4j.index.gbptree.GBPTree.Monitor; import org.neo4j.index.gbptree.GBPTree.Monitor;
import org.neo4j.io.pagecache.IOLimiter; import org.neo4j.io.pagecache.IOLimiter;
import org.neo4j.io.pagecache.PageCache; import org.neo4j.io.pagecache.PageCache;
Expand Down Expand Up @@ -330,7 +329,7 @@ public void shouldRemapFileIfMappedWithPageSizeLargerThanCreationSize() throws E
new GBPTree<>( pageCache, indexFile, layout, pageSize / 2, NO_MONITOR ) ) new GBPTree<>( pageCache, indexFile, layout, pageSize / 2, NO_MONITOR ) )
{ {
// Insert some data // Insert some data
try ( IndexWriter<MutableLong, MutableLong> writer = index.writer() ) try ( Writer<MutableLong, MutableLong> writer = index.writer() )
{ {
MutableLong key = new MutableLong(); MutableLong key = new MutableLong();
MutableLong value = new MutableLong(); MutableLong value = new MutableLong();
Expand Down Expand Up @@ -406,7 +405,7 @@ public void shouldNotBeAbleToAcquireModifierTwice() throws Exception
{ {
// GIVEN // GIVEN
index = createIndex( 256 ); index = createIndex( 256 );
IndexWriter<MutableLong,MutableLong> writer = index.writer(); Writer<MutableLong,MutableLong> writer = index.writer();


// WHEN // WHEN
try try
Expand All @@ -423,11 +422,11 @@ public void shouldNotBeAbleToAcquireModifierTwice() throws Exception
} }


@Test @Test
public void shouldAllowClosingIndexWriterMultipleTimes() throws Exception public void shouldAllowClosingWriterMultipleTimes() throws Exception
{ {
// GIVEN // GIVEN
index = createIndex( 256 ); index = createIndex( 256 );
IndexWriter<MutableLong,MutableLong> writer = index.writer(); Writer<MutableLong,MutableLong> writer = index.writer();
writer.put( new MutableLong( 0 ), new MutableLong( 1 ) ); writer.put( new MutableLong( 0 ), new MutableLong( 1 ) );
writer.close(); writer.close();


Expand All @@ -446,7 +445,7 @@ public void checkPointShouldLockOutWriter() throws Exception
CheckpointControlledMonitor monitor = new CheckpointControlledMonitor(); CheckpointControlledMonitor monitor = new CheckpointControlledMonitor();
index = createIndex( 1024, monitor ); index = createIndex( 1024, monitor );
long key = 10; long key = 10;
try ( IndexWriter<MutableLong,MutableLong> writer = index.writer() ) try ( Writer<MutableLong,MutableLong> writer = index.writer() )
{ {
writer.put( new MutableLong( key ), new MutableLong( key ) ); writer.put( new MutableLong( key ), new MutableLong( key ) );
} }
Expand Down Expand Up @@ -477,7 +476,7 @@ public void checkPointShouldWaitForWriter() throws Exception
Barrier.Control barrier = new Barrier.Control(); Barrier.Control barrier = new Barrier.Control();
Thread writerThread = new Thread( throwing( () -> Thread writerThread = new Thread( throwing( () ->
{ {
try ( IndexWriter<MutableLong,MutableLong> writer = index.writer() ) try ( Writer<MutableLong,MutableLong> writer = index.writer() )
{ {
writer.put( new MutableLong( 1 ), new MutableLong( 1 ) ); writer.put( new MutableLong( 1 ), new MutableLong( 1 ) );
barrier.reached(); barrier.reached();
Expand All @@ -502,7 +501,7 @@ public void shouldSeeSimpleInsertions() throws Exception
{ {
index = createIndex( 256 ); index = createIndex( 256 );
int count = 1000; int count = 1000;
try ( IndexWriter<MutableLong,MutableLong> writer = index.writer() ) try ( Writer<MutableLong,MutableLong> writer = index.writer() )
{ {
for ( int i = 0; i < count; i++ ) for ( int i = 0; i < count; i++ )
{ {
Expand Down Expand Up @@ -533,7 +532,7 @@ public void shouldSplitCorrectly() throws Exception
// WHEN // WHEN
int count = 1_000; int count = 1_000;
PrimitiveLongSet seen = Primitive.longSet( count ); PrimitiveLongSet seen = Primitive.longSet( count );
try ( IndexWriter<MutableLong,MutableLong> writer = index.writer() ) try ( Writer<MutableLong,MutableLong> writer = index.writer() )
{ {
for ( int i = 0; i < count; i++ ) for ( int i = 0; i < count; i++ )
{ {
Expand Down
Expand Up @@ -31,8 +31,6 @@
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;


import org.neo4j.index.ValueMerger;
import org.neo4j.index.ValueMergers;
import org.neo4j.io.pagecache.PageCursor; import org.neo4j.io.pagecache.PageCursor;
import org.neo4j.test.rule.RandomRule; import org.neo4j.test.rule.RandomRule;
import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.is;
Expand All @@ -43,9 +41,10 @@
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeTrue; import static org.junit.Assume.assumeTrue;
import static org.neo4j.index.ValueMergers.overwrite;
import static org.neo4j.index.gbptree.ConsistencyChecker.assertNoCrashOrBrokenPointerInGSPP; import static org.neo4j.index.gbptree.ConsistencyChecker.assertNoCrashOrBrokenPointerInGSPP;
import static org.neo4j.index.gbptree.GenSafePointerPair.pointer; import static org.neo4j.index.gbptree.GenSafePointerPair.pointer;
import static org.neo4j.index.gbptree.ValueMergers.overwrite;


@RunWith( Parameterized.class ) @RunWith( Parameterized.class )
public class InternalTreeLogicTest public class InternalTreeLogicTest
Expand Down
Expand Up @@ -42,8 +42,8 @@
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;


import static org.neo4j.index.ValueMergers.overwrite;
import static org.neo4j.index.gbptree.GenSafePointerPair.pointer; import static org.neo4j.index.gbptree.GenSafePointerPair.pointer;
import static org.neo4j.index.gbptree.ValueMergers.overwrite;


public class SeekCursorTest public class SeekCursorTest
{ {
Expand Down

0 comments on commit f3b1a99

Please sign in to comment.