Search in sources :

Example 6 with DelegatingTokenHolder

use of org.neo4j.token.DelegatingTokenHolder in project neo4j by neo4j.

the class RecordStorageReaderTestBase method before.

@BeforeEach
public void before() throws Throwable {
    this.tokenHolders = new TokenHolders(new DelegatingTokenHolder(new SimpleTokenCreator(), TokenHolder.TYPE_PROPERTY_KEY), new DelegatingTokenHolder(new SimpleTokenCreator(), TokenHolder.TYPE_LABEL), new DelegatingTokenHolder(new SimpleTokenCreator(), TokenHolder.TYPE_RELATIONSHIP_TYPE));
    RecordStorageEngineRule.Builder builder = storageEngineRule.getWith(fs, pageCache, databaseLayout).tokenHolders(tokenHolders);
    builder = modify(builder);
    this.storageEngine = builder.build();
    this.storageReader = storageEngine.newReader();
    this.commitReader = storageEngine.newReader();
    this.commitContext = storageEngine.newCommandCreationContext(INSTANCE);
    commitContext.initialize(NULL);
    storageEngineRule.before();
}
Also used : TokenHolders(org.neo4j.token.TokenHolders) DelegatingTokenHolder(org.neo4j.token.DelegatingTokenHolder) RecordStorageEngineRule(org.neo4j.test.rule.RecordStorageEngineRule) BeforeEach(org.junit.jupiter.api.BeforeEach)

Example 7 with DelegatingTokenHolder

use of org.neo4j.token.DelegatingTokenHolder in project neo4j by neo4j.

the class GraphStoreFixture method writableTokenHolders.

public TokenHolders writableTokenHolders() {
    TokenHolder propertyKeyTokens = new DelegatingTokenHolder(buildTokenCreator((name, internal, tx, next) -> {
        int id = next.propertyKey();
        tx.propertyKey(id, name, internal);
        return id;
    }), TokenHolder.TYPE_PROPERTY_KEY);
    TokenHolder labelTokens = new DelegatingTokenHolder(buildTokenCreator((name, internal, tx, next) -> {
        int id = next.label();
        tx.nodeLabel(id, name, internal);
        return id;
    }), TokenHolder.TYPE_LABEL);
    TokenHolder relationshipTypeTokens = new DelegatingTokenHolder(buildTokenCreator((name, internal, tx, next) -> {
        int id = next.relationshipType();
        tx.relationshipType(id, name, internal);
        return id;
    }), TokenHolder.TYPE_RELATIONSHIP_TYPE);
    TokenHolders tokenHolders = new TokenHolders(propertyKeyTokens, labelTokens, relationshipTypeTokens);
    tokenHolders.setInitialTokens(allReadableTokens(directStoreAccess().nativeStores()), NULL);
    return tokenHolders;
}
Also used : MutableInt(org.apache.commons.lang3.mutable.MutableInt) SchemaRule(org.neo4j.internal.schema.SchemaRule) TokenCreator(org.neo4j.token.TokenCreator) StoreTokens.allReadableTokens(org.neo4j.internal.recordstorage.StoreTokens.allReadableTokens) Preconditions(org.neo4j.util.Preconditions) ThrowingSupplier(org.neo4j.function.ThrowingSupplier) TransactionToApply(org.neo4j.kernel.impl.api.TransactionToApply) DatabaseLayout(org.neo4j.io.layout.DatabaseLayout) IndexStatisticsStore(org.neo4j.kernel.impl.api.index.stats.IndexStatisticsStore) NodeLabelsField(org.neo4j.kernel.impl.store.NodeLabelsField) StorageNodeCursor(org.neo4j.storageengine.api.StorageNodeCursor) DEFAULT_DATABASE_NAME(org.neo4j.configuration.GraphDatabaseSettings.DEFAULT_DATABASE_NAME) LookupAccessorsFromRunningDb(org.neo4j.consistency.LookupAccessorsFromRunningDb) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) IndexNotFoundKernelException(org.neo4j.internal.kernel.api.exceptions.schema.IndexNotFoundKernelException) Map(java.util.Map) AbstractBaseRecord(org.neo4j.kernel.impl.store.record.AbstractBaseRecord) NULL(org.neo4j.io.pagecache.context.CursorContext.NULL) PageCache(org.neo4j.io.pagecache.PageCache) RelationshipGroupDegreesStore(org.neo4j.internal.counts.RelationshipGroupDegreesStore) StorageEngine(org.neo4j.storageengine.api.StorageEngine) IndexProviderMap(org.neo4j.kernel.impl.api.index.IndexProviderMap) SchemaRecord(org.neo4j.kernel.impl.store.record.SchemaRecord) TestDirectory(org.neo4j.test.rule.TestDirectory) RecordStorageEngine(org.neo4j.internal.recordstorage.RecordStorageEngine) StandardCharsets(java.nio.charset.StandardCharsets) InternalTransactionCommitProcess(org.neo4j.kernel.impl.api.InternalTransactionCommitProcess) StoragePropertyCursor(org.neo4j.storageengine.api.StoragePropertyCursor) DirectStoreAccess(org.neo4j.consistency.store.DirectStoreAccess) GraphDatabaseAPI(org.neo4j.kernel.internal.GraphDatabaseAPI) RecordStore(org.neo4j.kernel.impl.store.RecordStore) INSTANCE(org.neo4j.memory.EmptyMemoryTracker.INSTANCE) StoreType(org.neo4j.kernel.impl.store.StoreType) ANY_LABEL(org.neo4j.internal.kernel.api.TokenRead.ANY_LABEL) NodeStore(org.neo4j.kernel.impl.store.NodeStore) IndexDescriptor(org.neo4j.internal.schema.IndexDescriptor) DatabaseManagementService(org.neo4j.dbms.api.DatabaseManagementService) CountsStore(org.neo4j.counts.CountsStore) IndexingService(org.neo4j.kernel.impl.api.index.IndexingService) TransactionAppender(org.neo4j.kernel.impl.transaction.log.TransactionAppender) IdGeneratorFactory(org.neo4j.internal.id.IdGeneratorFactory) System.currentTimeMillis(java.lang.System.currentTimeMillis) GraphDatabaseSettings(org.neo4j.configuration.GraphDatabaseSettings) TokenHolder(org.neo4j.token.api.TokenHolder) TestDatabaseManagementServiceBuilder(org.neo4j.test.TestDatabaseManagementServiceBuilder) GraphDatabaseService(org.neo4j.graphdb.GraphDatabaseService) NeoStores(org.neo4j.kernel.impl.store.NeoStores) EntityUpdates(org.neo4j.storageengine.api.EntityUpdates) DelegatingTokenHolder(org.neo4j.token.DelegatingTokenHolder) StorageReader(org.neo4j.storageengine.api.StorageReader) TransactionApplicationMode(org.neo4j.storageengine.api.TransactionApplicationMode) GraphDatabaseInternalSettings(org.neo4j.configuration.GraphDatabaseInternalSettings) DependencyResolver(org.neo4j.common.DependencyResolver) Iterator(java.util.Iterator) TransactionRepresentation(org.neo4j.kernel.impl.transaction.TransactionRepresentation) PropertyRecord(org.neo4j.kernel.impl.store.record.PropertyRecord) Setting(org.neo4j.graphdb.config.Setting) IOException(java.io.IOException) IndexAccessors(org.neo4j.consistency.checking.index.IndexAccessors) PrefetchingIterator(org.neo4j.internal.helpers.collection.PrefetchingIterator) TokenStore(org.neo4j.kernel.impl.store.TokenStore) Neo4jLayout(org.neo4j.io.layout.Neo4jLayout) Consumer(java.util.function.Consumer) CountsAccessor(org.neo4j.counts.CountsAccessor) LongIterator(org.eclipse.collections.api.iterator.LongIterator) RelationshipGroupRecord(org.neo4j.kernel.impl.store.record.RelationshipGroupRecord) KernelException(org.neo4j.exceptions.KernelException) TokenHolders(org.neo4j.token.TokenHolders) NamedToken(org.neo4j.token.api.NamedToken) NodeRecord(org.neo4j.kernel.impl.store.record.NodeRecord) CommitEvent(org.neo4j.kernel.impl.transaction.tracing.CommitEvent) RelationshipRecord(org.neo4j.kernel.impl.store.record.RelationshipRecord) TransactionIdStore(org.neo4j.storageengine.api.TransactionIdStore) TokenHolder(org.neo4j.token.api.TokenHolder) DelegatingTokenHolder(org.neo4j.token.DelegatingTokenHolder) TokenHolders(org.neo4j.token.TokenHolders) DelegatingTokenHolder(org.neo4j.token.DelegatingTokenHolder)

Example 8 with DelegatingTokenHolder

use of org.neo4j.token.DelegatingTokenHolder in project neo4j by neo4j.

the class ConsistencyCheckService method runFullConsistencyCheck.

public Result runFullConsistencyCheck(DatabaseLayout databaseLayout, Config config, ProgressMonitorFactory progressFactory, final LogProvider logProvider, final FileSystemAbstraction fileSystem, final PageCache pageCache, DebugContext debugContext, Path reportDir, ConsistencyFlags consistencyFlags, PageCacheTracer pageCacheTracer, MemoryTracker memoryTracker) throws ConsistencyCheckIncompleteException {
    assertRecovered(databaseLayout, config, fileSystem, memoryTracker);
    Log outLog = logProvider.getLog(getClass());
    config.set(GraphDatabaseSettings.pagecache_warmup_enabled, false);
    LifeSupport life = new LifeSupport();
    final DefaultIdGeneratorFactory idGeneratorFactory = new DefaultIdGeneratorFactory(fileSystem, immediate(), databaseLayout.getDatabaseName());
    DatabaseReadOnlyChecker readOnlyChecker = readOnly();
    StoreFactory factory = new StoreFactory(databaseLayout, config, idGeneratorFactory, pageCache, fileSystem, logProvider, pageCacheTracer, readOnlyChecker);
    // Don't start the counts stores here as part of life, instead only shut down. This is because it's better to let FullCheck
    // start it and add its missing/broken detection where it can report to user.
    ConsistencySummaryStatistics summary;
    final Path reportFile = chooseReportPath(reportDir);
    Log4jLogProvider reportLogProvider = new Log4jLogProvider(LogConfig.createBuilder(fileSystem, reportFile, Level.INFO).createOnDemand().withCategory(false).build());
    Log reportLog = reportLogProvider.getLog(getClass());
    Log log = new DuplicatingLog(outLog, reportLog);
    // Bootstrap kernel extensions
    Monitors monitors = new Monitors();
    JobScheduler jobScheduler = life.add(JobSchedulerFactory.createInitialisedScheduler());
    TokenHolders tokenHolders = new TokenHolders(new DelegatingTokenHolder(new ReadOnlyTokenCreator(), TokenHolder.TYPE_PROPERTY_KEY), new DelegatingTokenHolder(new ReadOnlyTokenCreator(), TokenHolder.TYPE_LABEL), new DelegatingTokenHolder(new ReadOnlyTokenCreator(), TokenHolder.TYPE_RELATIONSHIP_TYPE));
    final RecoveryCleanupWorkCollector workCollector = RecoveryCleanupWorkCollector.ignore();
    DatabaseExtensions extensions = life.add(instantiateExtensions(databaseLayout, fileSystem, config, new SimpleLogService(logProvider), pageCache, jobScheduler, workCollector, // We use TOOL context because it's true, and also because it uses the 'single' operational mode, which is important.
    TOOL, monitors, tokenHolders, pageCacheTracer, readOnlyChecker));
    DefaultIndexProviderMap indexes = life.add(new DefaultIndexProviderMap(extensions, config));
    try (NeoStores neoStores = factory.openAllNeoStores()) {
        long lastCommittedTransactionId = neoStores.getMetaDataStore().getLastCommittedTransactionId();
        CountsStoreManager countsStoreManager = life.add(new CountsStoreManager(pageCache, fileSystem, databaseLayout, pageCacheTracer, memoryTracker, lastCommittedTransactionId));
        RelationshipGroupDegreesStoreManager groupDegreesStoreManager = life.add(new RelationshipGroupDegreesStoreManager(pageCache, fileSystem, databaseLayout, pageCacheTracer, memoryTracker, lastCommittedTransactionId));
        // Load tokens before starting extensions, etc.
        try (var cursorContext = new CursorContext(pageCacheTracer.createPageCursorTracer(CONSISTENCY_TOKEN_READER_TAG))) {
            tokenHolders.setInitialTokens(StoreTokens.allReadableTokens(neoStores), cursorContext);
        }
        life.start();
        IndexStatisticsStore indexStatisticsStore = new IndexStatisticsStore(pageCache, databaseLayout, workCollector, readOnlyChecker, pageCacheTracer);
        life.add(indexStatisticsStore);
        int numberOfThreads = defaultConsistencyCheckThreadsNumber();
        DirectStoreAccess stores = new DirectStoreAccess(neoStores, indexes, tokenHolders, indexStatisticsStore, idGeneratorFactory);
        double memoryLimitLeewayFactor = config.get(GraphDatabaseInternalSettings.consistency_check_memory_limit_factor);
        FullCheck check = new FullCheck(progressFactory, numberOfThreads, consistencyFlags, config, debugContext, NodeBasedMemoryLimiter.defaultWithLeeway(memoryLimitLeewayFactor));
        summary = check.execute(pageCache, stores, countsStoreManager, groupDegreesStoreManager, null, pageCacheTracer, memoryTracker, log);
    } finally {
        life.shutdown();
        reportLogProvider.close();
    }
    if (!summary.isConsistent()) {
        log.warn("See '%s' for a detailed consistency report.", reportFile);
        return Result.failure(reportFile, summary);
    }
    return Result.success(reportFile, summary);
}
Also used : SimpleLogService(org.neo4j.logging.internal.SimpleLogService) Log4jLogProvider(org.neo4j.logging.log4j.Log4jLogProvider) DirectStoreAccess(org.neo4j.consistency.store.DirectStoreAccess) StoreFactory(org.neo4j.kernel.impl.store.StoreFactory) RecoveryCleanupWorkCollector(org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector) DatabaseReadOnlyChecker(org.neo4j.configuration.helpers.DatabaseReadOnlyChecker) IndexStatisticsStore(org.neo4j.kernel.impl.api.index.stats.IndexStatisticsStore) LifeSupport(org.neo4j.kernel.lifecycle.LifeSupport) DuplicatingLog(org.neo4j.logging.DuplicatingLog) TokenHolders(org.neo4j.token.TokenHolders) DelegatingTokenHolder(org.neo4j.token.DelegatingTokenHolder) ConsistencySummaryStatistics(org.neo4j.consistency.report.ConsistencySummaryStatistics) Path(java.nio.file.Path) JobScheduler(org.neo4j.scheduler.JobScheduler) Log(org.neo4j.logging.Log) DuplicatingLog(org.neo4j.logging.DuplicatingLog) DefaultIdGeneratorFactory(org.neo4j.internal.id.DefaultIdGeneratorFactory) DatabaseExtensions(org.neo4j.kernel.extension.DatabaseExtensions) CursorContext(org.neo4j.io.pagecache.context.CursorContext) DefaultIndexProviderMap(org.neo4j.kernel.impl.transaction.state.DefaultIndexProviderMap) FullCheck(org.neo4j.consistency.checking.full.FullCheck) NeoStores(org.neo4j.kernel.impl.store.NeoStores) Monitors(org.neo4j.monitoring.Monitors) ReadOnlyTokenCreator(org.neo4j.token.ReadOnlyTokenCreator)

Example 9 with DelegatingTokenHolder

use of org.neo4j.token.DelegatingTokenHolder in project neo4j by neo4j.

the class BatchingNeoStores method instantiateStores.

private void instantiateStores() throws IOException {
    neoStores = newStoreFactory(databaseLayout, idGeneratorFactory, pageCacheTracer, immutable.empty()).openAllNeoStores(true);
    propertyKeyRepository = new BatchingPropertyKeyTokenRepository(neoStores.getPropertyKeyTokenStore());
    labelRepository = new BatchingLabelTokenRepository(neoStores.getLabelTokenStore());
    relationshipTypeRepository = new BatchingRelationshipTypeTokenRepository(neoStores.getRelationshipTypeTokenStore());
    tokenHolders = new TokenHolders(new DelegatingTokenHolder((key, internal) -> propertyKeyRepository.getOrCreateId(key, internal), TYPE_PROPERTY_KEY), new DelegatingTokenHolder((key, internal) -> labelRepository.getOrCreateId(key, internal), TYPE_LABEL), new DelegatingTokenHolder((key, internal) -> relationshipTypeRepository.getOrCreateId(key, internal), TYPE_RELATIONSHIP_TYPE));
    tokenHolders.propertyKeyTokens().setInitialTokens(neoStores.getPropertyKeyTokenStore().getTokens(CursorContext.NULL));
    temporaryNeoStores = instantiateTempStores();
    try (var cursorContext = new CursorContext(pageCacheTracer.createPageCursorTracer(BATCHING_STORE_CREATION_TAG))) {
        neoStores.start(cursorContext);
        temporaryNeoStores.start(cursorContext);
        MetaDataStore metaDataStore = neoStores.getMetaDataStore();
        metaDataStore.setLastCommittedAndClosedTransactionId(initialIds.lastCommittedTransactionId(), initialIds.lastCommittedTransactionChecksum(), BASE_TX_COMMIT_TIMESTAMP, initialIds.lastCommittedTransactionLogByteOffset(), initialIds.lastCommittedTransactionLogVersion(), cursorContext);
        metaDataStore.setCheckpointLogVersion(initialIds.checkpointLogVersion(), cursorContext);
    }
}
Also used : MetaDataStore(org.neo4j.kernel.impl.store.MetaDataStore) BatchingLabelTokenRepository(org.neo4j.internal.batchimport.store.BatchingTokenRepository.BatchingLabelTokenRepository) BatchingRelationshipTypeTokenRepository(org.neo4j.internal.batchimport.store.BatchingTokenRepository.BatchingRelationshipTypeTokenRepository) BatchingPropertyKeyTokenRepository(org.neo4j.internal.batchimport.store.BatchingTokenRepository.BatchingPropertyKeyTokenRepository) CursorContext(org.neo4j.io.pagecache.context.CursorContext) TokenHolders(org.neo4j.token.TokenHolders) DelegatingTokenHolder(org.neo4j.token.DelegatingTokenHolder)

Example 10 with DelegatingTokenHolder

use of org.neo4j.token.DelegatingTokenHolder in project neo4j by neo4j.

the class SchemaStorageReadAndWriteTest method before.

@BeforeAll
void before() throws Exception {
    testDirectory.prepareDirectory(getClass(), "test");
    var storeFactory = new StoreFactory(databaseLayout, Config.defaults(), new DefaultIdGeneratorFactory(fs, immediate(), databaseLayout.getDatabaseName()), pageCache, fs, NullLogProvider.getInstance(), PageCacheTracer.NULL, writable());
    neoStores = storeFactory.openNeoStores(true, StoreType.SCHEMA, StoreType.PROPERTY_KEY_TOKEN, StoreType.LABEL_TOKEN, StoreType.RELATIONSHIP_TYPE_TOKEN);
    AtomicInteger tokenIdCounter = new AtomicInteger();
    TokenCreator tokenCreator = (name, internal) -> tokenIdCounter.incrementAndGet();
    TokenHolders tokens = new TokenHolders(new DelegatingTokenHolder(tokenCreator, TokenHolder.TYPE_PROPERTY_KEY), new DelegatingTokenHolder(tokenCreator, TokenHolder.TYPE_LABEL), new DelegatingTokenHolder(tokenCreator, TokenHolder.TYPE_RELATIONSHIP_TYPE));
    tokens.setInitialTokens(StoreTokens.allTokens(neoStores), NULL);
    tokenIdCounter.set(Math.max(tokenIdCounter.get(), tokens.propertyKeyTokens().size()));
    tokenIdCounter.set(Math.max(tokenIdCounter.get(), tokens.labelTokens().size()));
    tokenIdCounter.set(Math.max(tokenIdCounter.get(), tokens.relationshipTypeTokens().size()));
    storage = new SchemaStorage(neoStores.getSchemaStore(), tokens, () -> KernelVersion.LATEST);
}
Also used : RepeatedTest(org.junit.jupiter.api.RepeatedTest) SchemaRule(org.neo4j.internal.schema.SchemaRule) TokenCreator(org.neo4j.token.TokenCreator) KernelVersion(org.neo4j.kernel.KernelVersion) Config(org.neo4j.configuration.Config) NullLogProvider(org.neo4j.logging.NullLogProvider) DatabaseLayout(org.neo4j.io.layout.DatabaseLayout) AfterAll(org.junit.jupiter.api.AfterAll) TokenHolder(org.neo4j.token.api.TokenHolder) TestInstance(org.junit.jupiter.api.TestInstance) NeoStores(org.neo4j.kernel.impl.store.NeoStores) Inject(org.neo4j.test.extension.Inject) BeforeAll(org.junit.jupiter.api.BeforeAll) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) DelegatingTokenHolder(org.neo4j.token.DelegatingTokenHolder) PageCacheTracer(org.neo4j.io.pagecache.tracing.PageCacheTracer) NULL(org.neo4j.io.pagecache.context.CursorContext.NULL) PageCache(org.neo4j.io.pagecache.PageCache) DatabaseReadOnlyChecker.writable(org.neo4j.configuration.helpers.DatabaseReadOnlyChecker.writable) TestDirectory(org.neo4j.test.rule.TestDirectory) EphemeralPageCacheExtension(org.neo4j.test.extension.pagecache.EphemeralPageCacheExtension) RecoveryCleanupWorkCollector.immediate(org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector.immediate) EphemeralNeo4jLayoutExtension(org.neo4j.test.extension.EphemeralNeo4jLayoutExtension) INSTANCE(org.neo4j.memory.EmptyMemoryTracker.INSTANCE) TokenHolders(org.neo4j.token.TokenHolders) EphemeralFileSystemAbstraction(org.neo4j.io.fs.EphemeralFileSystemAbstraction) DefaultIdGeneratorFactory(org.neo4j.internal.id.DefaultIdGeneratorFactory) StoreType(org.neo4j.kernel.impl.store.StoreType) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) StoreFactory(org.neo4j.kernel.impl.store.StoreFactory) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) DefaultIdGeneratorFactory(org.neo4j.internal.id.DefaultIdGeneratorFactory) StoreFactory(org.neo4j.kernel.impl.store.StoreFactory) TokenHolders(org.neo4j.token.TokenHolders) TokenCreator(org.neo4j.token.TokenCreator) DelegatingTokenHolder(org.neo4j.token.DelegatingTokenHolder) BeforeAll(org.junit.jupiter.api.BeforeAll)

Aggregations

DelegatingTokenHolder (org.neo4j.token.DelegatingTokenHolder)10 TokenHolders (org.neo4j.token.TokenHolders)7 TokenHolder (org.neo4j.token.api.TokenHolder)5 DefaultIdGeneratorFactory (org.neo4j.internal.id.DefaultIdGeneratorFactory)4 RecoveryCleanupWorkCollector (org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector)3 IndexStatisticsStore (org.neo4j.kernel.impl.api.index.stats.IndexStatisticsStore)3 NeoStores (org.neo4j.kernel.impl.store.NeoStores)3 IOException (java.io.IOException)2 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)2 Test (org.junit.jupiter.api.Test)2 Config (org.neo4j.configuration.Config)2 DatabaseReadOnlyChecker (org.neo4j.configuration.helpers.DatabaseReadOnlyChecker)2 DirectStoreAccess (org.neo4j.consistency.store.DirectStoreAccess)2 SchemaRule (org.neo4j.internal.schema.SchemaRule)2 DatabaseLayout (org.neo4j.io.layout.DatabaseLayout)2 PageCache (org.neo4j.io.pagecache.PageCache)2 CursorContext (org.neo4j.io.pagecache.context.CursorContext)2 NULL (org.neo4j.io.pagecache.context.CursorContext.NULL)2 DatabaseExtensions (org.neo4j.kernel.extension.DatabaseExtensions)2 IndexingService (org.neo4j.kernel.impl.api.index.IndexingService)2