Search in sources :

Example 1 with TokenNameLookup

use of org.neo4j.common.TokenNameLookup in project neo4j by neo4j.

the class IndexingService method init.

/**
 * Called while the database starts up, before recovery.
 */
@Override
public void init() throws IOException {
    validateDefaultProviderExisting();
    try (var cursorContext = new CursorContext(pageCacheTracer.createPageCursorTracer(INIT_TAG))) {
        indexMapRef.modify(indexMap -> {
            Map<InternalIndexState, List<IndexLogRecord>> indexStates = new EnumMap<>(InternalIndexState.class);
            for (IndexDescriptor descriptor : indexDescriptors) {
                // No index (except NLI) is allowed to have the name generated for NLI.
                if (descriptor.getName().equals(IndexDescriptor.NLI_GENERATED_NAME) && !(descriptor.schema().isAnyTokenSchemaDescriptor() && descriptor.schema().entityType() == NODE)) {
                    throw new IllegalStateException("Index '" + descriptor.userDescription(tokenNameLookup) + "' is using a reserved name: '" + IndexDescriptor.NLI_GENERATED_NAME + "'. This index must be removed on an earlier version " + "to be able to use binaries for version 4.3 or newer.");
                }
                IndexProxy indexProxy;
                IndexProviderDescriptor providerDescriptor = descriptor.getIndexProvider();
                IndexProvider provider = providerMap.lookup(providerDescriptor);
                InternalIndexState initialState = provider.getInitialState(descriptor, cursorContext);
                indexStates.computeIfAbsent(initialState, internalIndexState -> new ArrayList<>()).add(new IndexLogRecord(descriptor));
                internalLog.debug(indexStateInfo("init", initialState, descriptor));
                switch(initialState) {
                    case ONLINE:
                        monitor.initialState(databaseName, descriptor, ONLINE);
                        indexProxy = indexProxyCreator.createOnlineIndexProxy(descriptor);
                        break;
                    case POPULATING:
                        // The database was shut down during population, or a crash has occurred, or some other sad thing.
                        monitor.initialState(databaseName, descriptor, POPULATING);
                        indexProxy = indexProxyCreator.createRecoveringIndexProxy(descriptor);
                        break;
                    case FAILED:
                        monitor.initialState(databaseName, descriptor, FAILED);
                        IndexPopulationFailure failure = failure(provider.getPopulationFailure(descriptor, cursorContext));
                        indexProxy = indexProxyCreator.createFailedIndexProxy(descriptor, failure);
                        break;
                    default:
                        throw new IllegalArgumentException("" + initialState);
                }
                indexMap.putIndexProxy(indexProxy);
            }
            logIndexStateSummary("init", indexStates);
            return indexMap;
        });
    }
    indexStatisticsStore.init();
}
Also used : LifecycleAdapter(org.neo4j.kernel.lifecycle.LifecycleAdapter) Arrays(java.util.Arrays) ResourceIterator(org.neo4j.graphdb.ResourceIterator) Log(org.neo4j.logging.Log) CursorContext(org.neo4j.io.pagecache.context.CursorContext) TokenNameLookup(org.neo4j.common.TokenNameLookup) IndexPopulator(org.neo4j.kernel.api.index.IndexPopulator) LongObjectProcedure(org.eclipse.collections.api.block.procedure.primitive.LongObjectProcedure) UnaryOperator(java.util.function.UnaryOperator) Config(org.neo4j.configuration.Config) Value(org.neo4j.values.storable.Value) Preconditions(org.neo4j.util.Preconditions) IndexStatisticsStore(org.neo4j.kernel.impl.api.index.stats.IndexStatisticsStore) UnderlyingStorageException(org.neo4j.exceptions.UnderlyingStorageException) IndexUpdater(org.neo4j.kernel.api.index.IndexUpdater) IndexNotFoundKernelException(org.neo4j.internal.kernel.api.exceptions.schema.IndexNotFoundKernelException) IndexPopulationFailedKernelException(org.neo4j.kernel.api.exceptions.index.IndexPopulationFailedKernelException) LongHashSet(org.eclipse.collections.impl.set.mutable.primitive.LongHashSet) Map(java.util.Map) LongIterable(org.eclipse.collections.api.LongIterable) PageCacheTracer(org.neo4j.io.pagecache.tracing.PageCacheTracer) IndexProviderDescriptor(org.neo4j.internal.schema.IndexProviderDescriptor) Path(java.nio.file.Path) EnumMap(java.util.EnumMap) SYSTEM(org.neo4j.common.Subject.SYSTEM) Collection(java.util.Collection) Set(java.util.Set) IndexEntryUpdate(org.neo4j.storageengine.api.IndexEntryUpdate) Collectors(java.util.stream.Collectors) String.format(java.lang.String.format) UncheckedIOException(java.io.UncheckedIOException) List(java.util.List) EntityType(org.neo4j.common.EntityType) IndexPrototype(org.neo4j.internal.schema.IndexPrototype) FAILED(org.neo4j.internal.kernel.api.InternalIndexState.FAILED) IndexDescriptor(org.neo4j.internal.schema.IndexDescriptor) MutableBoolean(org.apache.commons.lang3.mutable.MutableBoolean) DatabaseReadOnlyChecker(org.neo4j.configuration.helpers.DatabaseReadOnlyChecker) NODE(org.neo4j.common.EntityType.NODE) Iterators.asResourceIterator(org.neo4j.internal.helpers.collection.Iterators.asResourceIterator) GraphDatabaseSettings(org.neo4j.configuration.GraphDatabaseSettings) InternalIndexState(org.neo4j.internal.kernel.api.InternalIndexState) IndexSamplingController(org.neo4j.kernel.impl.api.index.sampling.IndexSamplingController) LogProvider(org.neo4j.logging.LogProvider) HashMap(java.util.HashMap) MutableLongObjectMap(org.eclipse.collections.api.map.primitive.MutableLongObjectMap) Iterators.iterator(org.neo4j.internal.helpers.collection.Iterators.iterator) IndexProvider(org.neo4j.kernel.api.index.IndexProvider) ArrayList(java.util.ArrayList) IndexEntryConflictException(org.neo4j.kernel.api.exceptions.index.IndexEntryConflictException) LongObjectHashMap(org.eclipse.collections.impl.map.mutable.primitive.LongObjectHashMap) ThrowingConsumer(org.neo4j.function.ThrowingConsumer) POPULATING(org.neo4j.internal.kernel.api.InternalIndexState.POPULATING) IndexPopulationFailure.failure(org.neo4j.kernel.impl.api.index.IndexPopulationFailure.failure) ONLINE(org.neo4j.internal.kernel.api.InternalIndexState.ONLINE) IndexStoreViewFactory(org.neo4j.kernel.impl.transaction.state.storeview.IndexStoreViewFactory) JobScheduler(org.neo4j.scheduler.JobScheduler) MemoryTracker(org.neo4j.memory.MemoryTracker) NodePropertyAccessor(org.neo4j.storageengine.api.NodePropertyAccessor) IndexUpdateListener(org.neo4j.storageengine.api.IndexUpdateListener) Subject(org.neo4j.common.Subject) Iterators(org.neo4j.internal.helpers.collection.Iterators) IndexSamplingMode(org.neo4j.kernel.impl.api.index.sampling.IndexSamplingMode) Iterables.asList(org.neo4j.internal.helpers.collection.Iterables.asList) IOException(java.io.IOException) IndexActivationFailedKernelException(org.neo4j.kernel.api.exceptions.index.IndexActivationFailedKernelException) RELATIONSHIP(org.neo4j.common.EntityType.RELATIONSHIP) MutableLongSet(org.eclipse.collections.api.set.primitive.MutableLongSet) TimeUnit(java.util.concurrent.TimeUnit) KernelException(org.neo4j.exceptions.KernelException) StringJoiner(java.util.StringJoiner) UniquePropertyValueValidationException(org.neo4j.kernel.api.exceptions.schema.UniquePropertyValueValidationException) SchemaState(org.neo4j.internal.schema.SchemaState) LongSet(org.eclipse.collections.api.set.primitive.LongSet) IndexProviderDescriptor(org.neo4j.internal.schema.IndexProviderDescriptor) ArrayList(java.util.ArrayList) CursorContext(org.neo4j.io.pagecache.context.CursorContext) IndexDescriptor(org.neo4j.internal.schema.IndexDescriptor) IndexProvider(org.neo4j.kernel.api.index.IndexProvider) InternalIndexState(org.neo4j.internal.kernel.api.InternalIndexState) List(java.util.List) ArrayList(java.util.ArrayList) Iterables.asList(org.neo4j.internal.helpers.collection.Iterables.asList) EnumMap(java.util.EnumMap)

Example 2 with TokenNameLookup

use of org.neo4j.common.TokenNameLookup in project neo4j by neo4j.

the class SchemaStorageTest method shouldThrowExceptionOnRelationshipRuleNotFound.

@Test
void shouldThrowExceptionOnRelationshipRuleNotFound() {
    TokenNameLookup tokenNameLookup = getDefaultTokenNameLookup();
    var e = assertThrows(SchemaRuleNotFoundException.class, () -> storage.constraintsGetSingle(ConstraintDescriptorFactory.existsForRelType(TYPE1_ID, PROP1_ID), NULL));
    assertThat(e, tokenNameLookup).hasUserMessage("No relationship type property existence constraint was found for -[:Type1 {prop1}]-.");
}
Also used : TokenNameLookup(org.neo4j.common.TokenNameLookup) Test(org.junit.jupiter.api.Test)

Example 3 with TokenNameLookup

use of org.neo4j.common.TokenNameLookup in project neo4j by neo4j.

the class SchemaStorageTest method shouldThrowExceptionOnRelationshipDuplicateRuleFound.

@Test
void shouldThrowExceptionOnRelationshipDuplicateRuleFound() {
    TokenNameLookup tokenNameLookup = getDefaultTokenNameLookup();
    SchemaStorage schemaStorageSpy = Mockito.spy(storage);
    when(schemaStorageSpy.streamAllSchemaRules(false, NULL)).thenReturn(Stream.of(getRelationshipPropertyExistenceConstraintRule(1L, TYPE1_ID, PROP1_ID), getRelationshipPropertyExistenceConstraintRule(2L, TYPE1_ID, PROP1_ID)));
    var e = assertThrows(DuplicateSchemaRuleException.class, () -> schemaStorageSpy.constraintsGetSingle(ConstraintDescriptorFactory.existsForRelType(TYPE1_ID, PROP1_ID), NULL));
    assertThat(e, tokenNameLookup).hasUserMessage("Multiple relationship type property existence constraints found for -[:Type1 {prop1}]-.");
}
Also used : TokenNameLookup(org.neo4j.common.TokenNameLookup) Test(org.junit.jupiter.api.Test)

Example 4 with TokenNameLookup

use of org.neo4j.common.TokenNameLookup in project neo4j by neo4j.

the class GraphDbStructureGuide method showSchema.

private static void showSchema(DbStructureVisitor visitor, KernelTransaction ktx) throws IndexNotFoundKernelException {
    TokenNameLookup nameLookup = ktx.tokenRead();
    showIndices(visitor, ktx, nameLookup);
    showUniqueConstraints(visitor, ktx, nameLookup);
}
Also used : TokenNameLookup(org.neo4j.common.TokenNameLookup)

Example 5 with TokenNameLookup

use of org.neo4j.common.TokenNameLookup in project neo4j by neo4j.

the class LuceneIndexAccessorIT method shouldReadAllDocumentsInSchemaIndexAfterRandomAdditionsAndDeletions.

@Test
void shouldReadAllDocumentsInSchemaIndexAfterRandomAdditionsAndDeletions() throws Exception {
    // given
    IndexDescriptor descriptor = IndexPrototype.forSchema(SchemaDescriptor.forLabel(0, 1)).withName("test").materialise(1);
    TokenNameLookup tokenNameLookup = mock(TokenNameLookup.class);
    populateWithInitialNodes(descriptor, 0, new LongHashSet());
    try (IndexAccessor accessor = indexProvider.getOnlineAccessor(descriptor, samplingConfig, tokenNameLookup)) {
        // when
        BitSet expectedEntities = writeRandomThings(accessor, descriptor);
        int expectedCount = expectedEntities.cardinality();
        // then
        int count = 0;
        try (BoundedIterable<Long> reader = accessor.newAllEntriesValueReader(NULL)) {
            for (Long entityId : reader) {
                count++;
                assertThat(expectedEntities.get(toIntExact(entityId))).isTrue();
            }
        }
        assertThat(count).isEqualTo(expectedCount);
    }
}
Also used : LongHashSet(org.eclipse.collections.impl.set.mutable.primitive.LongHashSet) TokenNameLookup(org.neo4j.common.TokenNameLookup) IndexAccessor(org.neo4j.kernel.api.index.IndexAccessor) BitSet(java.util.BitSet) MutableLong(org.apache.commons.lang3.mutable.MutableLong) IndexDescriptor(org.neo4j.internal.schema.IndexDescriptor) Test(org.junit.jupiter.api.Test)

Aggregations

TokenNameLookup (org.neo4j.common.TokenNameLookup)9 Test (org.junit.jupiter.api.Test)5 LongHashSet (org.eclipse.collections.impl.set.mutable.primitive.LongHashSet)2 Config (org.neo4j.configuration.Config)2 IOException (java.io.IOException)1 UncheckedIOException (java.io.UncheckedIOException)1 String.format (java.lang.String.format)1 Path (java.nio.file.Path)1 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 BitSet (java.util.BitSet)1 Collection (java.util.Collection)1 EnumMap (java.util.EnumMap)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 Set (java.util.Set)1 StringJoiner (java.util.StringJoiner)1 TimeUnit (java.util.concurrent.TimeUnit)1 UnaryOperator (java.util.function.UnaryOperator)1