Search in sources :

Example 11 with IdGenerator

use of org.neo4j.internal.id.IdGenerator in project neo4j by neo4j.

the class IndexedIdGeneratorRecoverabilityTest method simpleCrashTest.

@Test
void simpleCrashTest() throws Exception {
    final EphemeralFileSystemAbstraction snapshot;
    final long id1;
    final long id2;
    try (IdGenerator freelist = instantiateFreelist()) {
        id1 = freelist.nextId(NULL);
        id2 = freelist.nextId(NULL);
        markUsed(freelist, id1, id2);
        freelist.checkpoint(NULL);
        markDeleted(freelist, id1, id2);
        pageCache.flushAndForce();
        snapshot = fs.snapshot();
    }
    try (PageCache newPageCache = getPageCache(snapshot);
        IdGenerator freelist = instantiateFreelist()) {
        markDeleted(freelist, id1, id2);
        // Recovery is completed ^^^
        freelist.start(NO_FREE_IDS, NULL);
        markFree(freelist, id1, id2);
        final ImmutableLongSet reused = LongSets.immutable.of(freelist.nextId(NULL), freelist.nextId(NULL));
        assertEquals(LongSets.immutable.of(id1, id2), reused, "IDs are not reused");
    } finally {
        snapshot.close();
    }
}
Also used : ImmutableLongSet(org.eclipse.collections.api.set.primitive.ImmutableLongSet) EphemeralFileSystemAbstraction(org.neo4j.io.fs.EphemeralFileSystemAbstraction) IdGenerator(org.neo4j.internal.id.IdGenerator) PageCache(org.neo4j.io.pagecache.PageCache) Test(org.junit.jupiter.api.Test)

Example 12 with IdGenerator

use of org.neo4j.internal.id.IdGenerator in project neo4j by neo4j.

the class IdGeneratorMigratorTest method assertIdGeneratorContainsIds.

private void assertIdGeneratorContainsIds(Path idFilePath, IdType idType, int rounds, int numDeleted, int numCreated, long startingId) throws IOException {
    try (IdGenerator idGenerator = new IndexedIdGenerator(pageCache, idFilePath, immediate(), idType, false, () -> -1, Long.MAX_VALUE, writable(), Config.defaults(), DEFAULT_DATABASE_NAME, CursorContext.NULL)) {
        idGenerator.start(ignored -> {
            throw new RuntimeException("Should not ask for free ids");
        }, CursorContext.NULL);
        long nextExpectedId = startingId;
        for (int i = 0; i < rounds; i++) {
            for (int d = 0; d < numDeleted; d++) {
                assertEquals(nextExpectedId++, idGenerator.nextId(CursorContext.NULL));
            }
            nextExpectedId += numCreated;
        }
    }
}
Also used : IndexedIdGenerator(org.neo4j.internal.id.indexed.IndexedIdGenerator) IndexedIdGenerator(org.neo4j.internal.id.indexed.IndexedIdGenerator) IdGenerator(org.neo4j.internal.id.IdGenerator)

Aggregations

IdGenerator (org.neo4j.internal.id.IdGenerator)12 Test (org.junit.jupiter.api.Test)9 ImmutableLongSet (org.eclipse.collections.api.set.primitive.ImmutableLongSet)3 Path (java.nio.file.Path)2 MutableBoolean (org.apache.commons.lang3.mutable.MutableBoolean)2 Config (org.neo4j.configuration.Config)2 DefaultIdGeneratorFactory (org.neo4j.internal.id.DefaultIdGeneratorFactory)2 DatabaseLayout (org.neo4j.io.layout.DatabaseLayout)2 LogPosition (org.neo4j.kernel.impl.transaction.log.LogPosition)2 GraphDatabaseAPI (org.neo4j.kernel.internal.GraphDatabaseAPI)2 Monitors (org.neo4j.monitoring.Monitors)2 IOException (java.io.IOException)1 String.valueOf (java.lang.String.valueOf)1 InvocationHandler (java.lang.reflect.InvocationHandler)1 Clock (java.time.Clock)1 Instant (java.time.Instant)1 Optional (java.util.Optional)1 MINUTES (java.util.concurrent.TimeUnit.MINUTES)1 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)1 RandomStringUtils.randomAlphanumeric (org.apache.commons.lang3.RandomStringUtils.randomAlphanumeric)1