use of org.eclipse.collections.api.list.primitive.LongList in project neo4j by neo4j.
the class ParallelRelationshipCursorTestBase method shouldScanAllRelationshipsFromRandomlySizedWorkers.
@Test
void shouldScanAllRelationshipsFromRandomlySizedWorkers() throws InterruptedException {
// given
ExecutorService service = Executors.newFixedThreadPool(4);
Scan<RelationshipScanCursor> scan = read.allRelationshipsScan();
CursorFactory cursors = testSupport.kernelToTest().cursors();
try {
// when
List<Future<LongList>> futures = new ArrayList<>();
for (int i = 0; i < 11; i++) {
futures.add(service.submit(randomBatchWorker(scan, () -> cursors.allocateRelationshipScanCursor(NULL), REL_GET)));
}
service.shutdown();
service.awaitTermination(1, TimeUnit.MINUTES);
// then
List<LongList> lists = futures.stream().map(TestUtils::unsafeGet).collect(Collectors.toList());
assertDistinct(lists);
LongList concat = concat(lists).toSortedList();
assertEquals(RELATIONSHIPS, concat);
} finally {
service.shutdown();
service.awaitTermination(1, TimeUnit.MINUTES);
}
}
use of org.eclipse.collections.api.list.primitive.LongList in project neo4j by neo4j.
the class ParallelRelationshipCursorTestBase method shouldScanAllRelationshipsFromMultipleThreadWithBigSizeHints.
@Test
void shouldScanAllRelationshipsFromMultipleThreadWithBigSizeHints() throws InterruptedException, ExecutionException {
// given
ExecutorService service = Executors.newFixedThreadPool(4);
Scan<RelationshipScanCursor> scan = read.allRelationshipsScan();
CursorFactory cursors = testSupport.kernelToTest().cursors();
try {
// when
Supplier<RelationshipScanCursor> allocateRelCursor = () -> cursors.allocateRelationshipScanCursor(NULL);
Future<LongList> future1 = service.submit(singleBatchWorker(scan, allocateRelCursor, REL_GET, 100));
Future<LongList> future2 = service.submit(singleBatchWorker(scan, allocateRelCursor, REL_GET, 100));
Future<LongList> future3 = service.submit(singleBatchWorker(scan, allocateRelCursor, REL_GET, 100));
Future<LongList> future4 = service.submit(singleBatchWorker(scan, allocateRelCursor, REL_GET, 100));
// then
LongList ids1 = future1.get();
LongList ids2 = future2.get();
LongList ids3 = future3.get();
LongList ids4 = future4.get();
assertDistinct(ids1, ids2, ids3, ids4);
LongList concat = concat(ids1, ids2, ids3, ids4).toSortedList();
assertEquals(RELATIONSHIPS, concat);
} finally {
service.shutdown();
service.awaitTermination(1, TimeUnit.MINUTES);
}
}
use of org.eclipse.collections.api.list.primitive.LongList in project neo4j by neo4j.
the class ParallelRelationshipCursorTransactionStateTestBase method shouldScanAllRelationshipsFromMultipleThreads.
@Test
void shouldScanAllRelationshipsFromMultipleThreads() throws InterruptedException, ExecutionException, KernelException {
// given
ExecutorService service = Executors.newFixedThreadPool(4);
CursorFactory cursors = testSupport.kernelToTest().cursors();
int size = 128;
LongArrayList ids = new LongArrayList();
try (KernelTransaction tx = beginTransaction()) {
Write write = tx.dataWrite();
int type = tx.tokenWrite().relationshipTypeGetOrCreateForName("R");
for (int i = 0; i < size; i++) {
ids.add(write.relationshipCreate(write.nodeCreate(), type, write.nodeCreate()));
}
org.neo4j.internal.kernel.api.Read read = tx.dataRead();
Scan<RelationshipScanCursor> scan = read.allRelationshipsScan();
// when
Future<LongList> future1 = service.submit(singleBatchWorker(scan, () -> cursors.allocateRelationshipScanCursor(NULL), REL_GET, size / 4));
Future<LongList> future2 = service.submit(singleBatchWorker(scan, () -> cursors.allocateRelationshipScanCursor(NULL), REL_GET, size / 4));
Future<LongList> future3 = service.submit(singleBatchWorker(scan, () -> cursors.allocateRelationshipScanCursor(NULL), REL_GET, size / 4));
Future<LongList> future4 = service.submit(singleBatchWorker(scan, () -> cursors.allocateRelationshipScanCursor(NULL), REL_GET, size / 4));
// then
LongList ids1 = future1.get();
LongList ids2 = future2.get();
LongList ids3 = future3.get();
LongList ids4 = future4.get();
TestUtils.assertDistinct(ids1, ids2, ids3, ids4);
LongList concat = TestUtils.concat(ids1, ids2, ids3, ids4);
assertEquals(ids.toSortedList(), concat.toSortedList());
tx.rollback();
} finally {
service.shutdown();
service.awaitTermination(1, TimeUnit.MINUTES);
}
}
use of org.eclipse.collections.api.list.primitive.LongList in project neo4j by neo4j.
the class ParallelRelationshipCursorTransactionStateTestBase method shouldScanAllRelationshipFromRandomlySizedWorkers.
@Test
void shouldScanAllRelationshipFromRandomlySizedWorkers() throws InterruptedException, KernelException {
// given
ExecutorService service = Executors.newFixedThreadPool(4);
int size = 128;
LongArrayList ids = new LongArrayList();
try (KernelTransaction tx = beginTransaction()) {
Write write = tx.dataWrite();
int type = tx.tokenWrite().relationshipTypeGetOrCreateForName("R");
for (int i = 0; i < size; i++) {
ids.add(write.relationshipCreate(write.nodeCreate(), type, write.nodeCreate()));
}
Read read = tx.dataRead();
Scan<RelationshipScanCursor> scan = read.allRelationshipsScan();
CursorFactory cursors = testSupport.kernelToTest().cursors();
// when
List<Future<LongList>> futures = new ArrayList<>();
for (int i = 0; i < 10; i++) {
futures.add(service.submit(randomBatchWorker(scan, () -> cursors.allocateRelationshipScanCursor(NULL), REL_GET)));
}
// then
List<LongList> lists = futures.stream().map(TestUtils::unsafeGet).collect(Collectors.toList());
TestUtils.assertDistinct(lists);
LongList concat = TestUtils.concat(lists);
assertEquals(ids.toSortedList(), concat.toSortedList());
tx.rollback();
} finally {
service.shutdown();
service.awaitTermination(1, TimeUnit.MINUTES);
}
}
use of org.eclipse.collections.api.list.primitive.LongList in project neo4j by neo4j.
the class ParallelRelationshipCursorTransactionStateTestBase method shouldScanAllRelationshipsFromMultipleThreadWithBigSizeHints.
@Test
void shouldScanAllRelationshipsFromMultipleThreadWithBigSizeHints() throws InterruptedException, ExecutionException, KernelException {
// given
ExecutorService service = Executors.newFixedThreadPool(4);
CursorFactory cursors = testSupport.kernelToTest().cursors();
int size = 128;
LongArrayList ids = new LongArrayList();
try (KernelTransaction tx = beginTransaction()) {
Write write = tx.dataWrite();
int type = tx.tokenWrite().relationshipTypeGetOrCreateForName("R");
for (int i = 0; i < size; i++) {
ids.add(write.relationshipCreate(write.nodeCreate(), type, write.nodeCreate()));
}
org.neo4j.internal.kernel.api.Read read = tx.dataRead();
Scan<RelationshipScanCursor> scan = read.allRelationshipsScan();
// when
Supplier<RelationshipScanCursor> allocateCursor = () -> cursors.allocateRelationshipScanCursor(NULL);
Future<LongList> future1 = service.submit(singleBatchWorker(scan, allocateCursor, REL_GET, 100));
Future<LongList> future2 = service.submit(singleBatchWorker(scan, allocateCursor, REL_GET, 100));
Future<LongList> future3 = service.submit(singleBatchWorker(scan, allocateCursor, REL_GET, 100));
Future<LongList> future4 = service.submit(singleBatchWorker(scan, allocateCursor, REL_GET, 100));
// then
LongList ids1 = future1.get();
LongList ids2 = future2.get();
LongList ids3 = future3.get();
LongList ids4 = future4.get();
TestUtils.assertDistinct(ids1, ids2, ids3, ids4);
LongList concat = TestUtils.concat(ids1, ids2, ids3, ids4);
assertEquals(ids.toSortedList(), concat.toSortedList());
} finally {
service.shutdown();
service.awaitTermination(1, TimeUnit.MINUTES);
}
}
Aggregations