Search in sources :

Example 41 with KernelException

use of org.neo4j.exceptions.KernelException in project neo4j by neo4j.

the class SchemaImpl method getIndexState.

@Override
public IndexState getIndexState(final IndexDefinition index) {
    try {
        transaction.assertOpen();
        SchemaRead schemaRead = transaction.schemaRead();
        IndexDescriptor reference = getIndexReference(schemaRead, transaction.tokenRead(), (IndexDefinitionImpl) index);
        InternalIndexState indexState = schemaRead.indexGetState(reference);
        switch(indexState) {
            case POPULATING:
                return POPULATING;
            case ONLINE:
                return ONLINE;
            case FAILED:
                return FAILED;
            default:
                throw new IllegalArgumentException(String.format("Illegal index state %s", indexState));
        }
    } catch (KernelException e) {
        throw newIndexNotFoundException(index, e);
    }
}
Also used : InternalIndexState(org.neo4j.internal.kernel.api.InternalIndexState) SchemaRead(org.neo4j.internal.kernel.api.SchemaRead) IndexDescriptor(org.neo4j.internal.schema.IndexDescriptor) InvalidTransactionTypeKernelException(org.neo4j.internal.kernel.api.exceptions.InvalidTransactionTypeKernelException) IndexNotFoundKernelException(org.neo4j.internal.kernel.api.exceptions.schema.IndexNotFoundKernelException) TokenCapacityExceededKernelException(org.neo4j.internal.kernel.api.exceptions.schema.TokenCapacityExceededKernelException) SchemaKernelException(org.neo4j.internal.kernel.api.exceptions.schema.SchemaKernelException) KernelException(org.neo4j.exceptions.KernelException)

Example 42 with KernelException

use of org.neo4j.exceptions.KernelException in project neo4j by neo4j.

the class TransactionImpl method nodesByLabelAndProperties.

private ResourceIterator<Node> nodesByLabelAndProperties(KernelTransaction transaction, int labelId, PropertyIndexQuery.ExactPredicate... queries) {
    Read read = transaction.dataRead();
    if (isInvalidQuery(labelId, queries)) {
        return emptyResourceIterator();
    }
    int[] propertyIds = getPropertyIds(queries);
    IndexDescriptor index = findUsableMatchingCompositeIndex(transaction, SchemaDescriptor.forLabel(labelId, propertyIds), propertyIds, () -> transaction.schemaRead().indexesGetForLabel(labelId));
    if (index != IndexDescriptor.NO_INDEX) {
        try {
            NodeValueIndexCursor cursor = transaction.cursors().allocateNodeValueIndexCursor(transaction.cursorContext(), transaction.memoryTracker());
            IndexReadSession indexSession = read.indexReadSession(index);
            read.nodeIndexSeek(indexSession, cursor, unconstrained(), getReorderedIndexQueries(index.schema().getPropertyIds(), queries));
            return new CursorIterator<>(cursor, NodeIndexCursor::nodeReference, c -> newNodeEntity(c.nodeReference()), coreApiResourceTracker);
        } catch (KernelException e) {
        // weird at this point but ignore and fallback to a label scan
        }
    }
    return getNodesByLabelAndPropertyWithoutPropertyIndex(transaction, labelId, queries);
}
Also used : SchemaRead(org.neo4j.internal.kernel.api.SchemaRead) TokenRead(org.neo4j.internal.kernel.api.TokenRead) Read(org.neo4j.internal.kernel.api.Read) NodeIndexCursor(org.neo4j.internal.kernel.api.NodeIndexCursor) NodeValueIndexCursor(org.neo4j.internal.kernel.api.NodeValueIndexCursor) CursorIterator(org.neo4j.kernel.impl.coreapi.internal.CursorIterator) IndexDescriptor(org.neo4j.internal.schema.IndexDescriptor) InvalidTransactionTypeKernelException(org.neo4j.internal.kernel.api.exceptions.InvalidTransactionTypeKernelException) IndexNotFoundKernelException(org.neo4j.internal.kernel.api.exceptions.schema.IndexNotFoundKernelException) QueryExecutionKernelException(org.neo4j.kernel.impl.query.QueryExecutionKernelException) SchemaKernelException(org.neo4j.internal.kernel.api.exceptions.schema.SchemaKernelException) KernelException(org.neo4j.exceptions.KernelException) IndexReadSession(org.neo4j.internal.kernel.api.IndexReadSession)

Example 43 with KernelException

use of org.neo4j.exceptions.KernelException in project neo4j by neo4j.

the class TransactionImpl method nodesByLabelAndProperty.

private ResourceIterator<Node> nodesByLabelAndProperty(KernelTransaction transaction, int labelId, PropertyIndexQuery query) {
    Read read = transaction.dataRead();
    if (query.propertyKeyId() == TokenRead.NO_TOKEN || labelId == TokenRead.NO_TOKEN) {
        return emptyResourceIterator();
    }
    var index = findUsableMatchingIndex(transaction, SchemaDescriptor.forLabel(labelId, query.propertyKeyId()));
    if (index != IndexDescriptor.NO_INDEX) {
        // Ha! We found an index - let's use it to find matching nodes
        try {
            NodeValueIndexCursor cursor = transaction.cursors().allocateNodeValueIndexCursor(transaction.cursorContext(), transaction.memoryTracker());
            IndexReadSession indexSession = read.indexReadSession(index);
            read.nodeIndexSeek(indexSession, cursor, unconstrained(), query);
            return new CursorIterator<>(cursor, NodeIndexCursor::nodeReference, c -> newNodeEntity(c.nodeReference()), coreApiResourceTracker);
        } catch (KernelException e) {
        // weird at this point but ignore and fallback to a label scan
        }
    }
    return getNodesByLabelAndPropertyWithoutPropertyIndex(transaction, labelId, query);
}
Also used : SchemaRead(org.neo4j.internal.kernel.api.SchemaRead) TokenRead(org.neo4j.internal.kernel.api.TokenRead) Read(org.neo4j.internal.kernel.api.Read) NodeIndexCursor(org.neo4j.internal.kernel.api.NodeIndexCursor) NodeValueIndexCursor(org.neo4j.internal.kernel.api.NodeValueIndexCursor) CursorIterator(org.neo4j.kernel.impl.coreapi.internal.CursorIterator) InvalidTransactionTypeKernelException(org.neo4j.internal.kernel.api.exceptions.InvalidTransactionTypeKernelException) IndexNotFoundKernelException(org.neo4j.internal.kernel.api.exceptions.schema.IndexNotFoundKernelException) QueryExecutionKernelException(org.neo4j.kernel.impl.query.QueryExecutionKernelException) SchemaKernelException(org.neo4j.internal.kernel.api.exceptions.schema.SchemaKernelException) KernelException(org.neo4j.exceptions.KernelException) IndexReadSession(org.neo4j.internal.kernel.api.IndexReadSession)

Example 44 with KernelException

use of org.neo4j.exceptions.KernelException in project neo4j by neo4j.

the class TransactionImpl method getNodesByLabelAndPropertyWithoutPropertyIndex.

private ResourceIterator<Node> getNodesByLabelAndPropertyWithoutPropertyIndex(KernelTransaction ktx, int labelId, PropertyIndexQuery... queries) {
    var index = findUsableMatchingIndex(ktx, SchemaDescriptor.forAnyEntityTokens(EntityType.NODE));
    if (index != IndexDescriptor.NO_INDEX) {
        try {
            var session = ktx.dataRead().tokenReadSession(index);
            var cursor = ktx.cursors().allocateNodeLabelIndexCursor(ktx.cursorContext());
            ktx.dataRead().nodeLabelScan(session, cursor, unconstrained(), new TokenPredicate(labelId));
            var nodeCursor = ktx.cursors().allocateNodeCursor(ktx.cursorContext());
            var propertyCursor = ktx.cursors().allocatePropertyCursor(ktx.cursorContext(), ktx.memoryTracker());
            return new NodeLabelPropertyIterator(ktx.dataRead(), cursor, nodeCursor, propertyCursor, c -> newNodeEntity(c.nodeReference()), coreApiResourceTracker, queries);
        } catch (KernelException e) {
        // ignore, fallback to all node scan
        }
    }
    return getNodesByLabelAndPropertyViaAllNodesScan(ktx, labelId, queries);
}
Also used : TokenPredicate(org.neo4j.internal.kernel.api.TokenPredicate) NodeLabelPropertyIterator(org.neo4j.kernel.impl.coreapi.internal.NodeLabelPropertyIterator) InvalidTransactionTypeKernelException(org.neo4j.internal.kernel.api.exceptions.InvalidTransactionTypeKernelException) IndexNotFoundKernelException(org.neo4j.internal.kernel.api.exceptions.schema.IndexNotFoundKernelException) QueryExecutionKernelException(org.neo4j.kernel.impl.query.QueryExecutionKernelException) SchemaKernelException(org.neo4j.internal.kernel.api.exceptions.schema.SchemaKernelException) KernelException(org.neo4j.exceptions.KernelException)

Example 45 with KernelException

use of org.neo4j.exceptions.KernelException in project neo4j by neo4j.

the class DatabaseManagementServiceFactory method setupProcedures.

/**
 * Creates and registers the systems procedures, including those which belong to a particular edition.
 * N.B. This method takes a {@link DatabaseManager} as an unused parameter *intentionally*, in
 * order to enforce that the databaseManager must be constructed first.
 */
@SuppressWarnings("unused")
private static void setupProcedures(GlobalModule globalModule, AbstractEditionModule editionModule, DatabaseManager<?> databaseManager) {
    Supplier<GlobalProcedures> procedureInitializer = () -> {
        Config globalConfig = globalModule.getGlobalConfig();
        Path proceduresDirectory = globalConfig.get(GraphDatabaseSettings.plugin_dir);
        LogService logService = globalModule.getLogService();
        Log internalLog = logService.getInternalLog(GlobalProcedures.class);
        Log proceduresLog = logService.getUserLog(GlobalProcedures.class);
        ProcedureConfig procedureConfig = new ProcedureConfig(globalConfig);
        Edition neo4jEdition = globalModule.getDbmsInfo().edition;
        SpecialBuiltInProcedures builtInProcedures = new SpecialBuiltInProcedures(Version.getNeo4jVersion(), neo4jEdition.toString());
        GlobalProceduresRegistry globalProcedures = new GlobalProceduresRegistry(builtInProcedures, proceduresDirectory, internalLog, procedureConfig);
        globalProcedures.registerType(Node.class, NTNode);
        globalProcedures.registerType(NodeValue.class, NTNode);
        globalProcedures.registerType(Relationship.class, NTRelationship);
        globalProcedures.registerType(RelationshipValue.class, NTRelationship);
        globalProcedures.registerType(org.neo4j.graphdb.Path.class, NTPath);
        globalProcedures.registerType(PathValue.class, NTPath);
        globalProcedures.registerType(Geometry.class, NTGeometry);
        globalProcedures.registerType(Point.class, NTPoint);
        globalProcedures.registerType(PointValue.class, NTPoint);
        // Below components are not public API, but are made available for internal
        // procedures to call, and to provide temporary workarounds for the following
        // patterns:
        // - Batch-transaction imports (GDAPI, needs to be real and passed to background processing threads)
        // - Group-transaction writes (same pattern as above, but rather than splitting large transactions,
        // combine lots of small ones)
        // - Bleeding-edge performance (KernelTransaction, to bypass overhead of working with Core API)
        globalProcedures.registerComponent(DependencyResolver.class, Context::dependencyResolver, false);
        globalProcedures.registerComponent(KernelTransaction.class, ctx -> ctx.internalTransaction().kernelTransaction(), false);
        globalProcedures.registerComponent(GraphDatabaseAPI.class, Context::graphDatabaseAPI, false);
        globalProcedures.registerComponent(SystemGraphComponents.class, ctx -> globalModule.getSystemGraphComponents(), false);
        globalProcedures.registerComponent(ValueMapper.class, Context::valueMapper, true);
        // Register injected public API components
        globalProcedures.registerComponent(Log.class, ctx -> proceduresLog, true);
        globalProcedures.registerComponent(Transaction.class, new ProcedureTransactionProvider(), true);
        globalProcedures.registerComponent(org.neo4j.procedure.TerminationGuard.class, new TerminationGuardProvider(), true);
        globalProcedures.registerComponent(SecurityContext.class, Context::securityContext, true);
        globalProcedures.registerComponent(ProcedureCallContext.class, Context::procedureCallContext, true);
        globalProcedures.registerComponent(FulltextAdapter.class, ctx -> ctx.dependencyResolver().resolveDependency(FulltextAdapter.class), true);
        globalProcedures.registerComponent(GraphDatabaseService.class, ctx -> new GraphDatabaseFacade((GraphDatabaseFacade) ctx.graphDatabaseAPI(), new ProcedureLoginContextTransformer(ctx)), true);
        globalProcedures.registerComponent(DataCollector.class, ctx -> ctx.dependencyResolver().resolveDependency(DataCollector.class), false);
        // Edition procedures
        try {
            editionModule.registerProcedures(globalProcedures, procedureConfig, globalModule, databaseManager);
        } catch (KernelException e) {
            internalLog.error("Failed to register built-in edition procedures at start up: " + e.getMessage());
        }
        globalModule.getGlobalLife().add(globalProcedures);
        return globalProcedures;
    };
    GlobalProcedures procedures = tryResolveOrCreate(GlobalProcedures.class, globalModule.getExternalDependencyResolver(), procedureInitializer);
    if (procedures instanceof Consumer) {
        ((Consumer) procedures).accept(procedureInitializer);
    }
    globalModule.getGlobalDependencies().satisfyDependency(procedures);
}
Also used : Log(org.neo4j.logging.Log) NodeValue(org.neo4j.values.virtual.NodeValue) Config(org.neo4j.configuration.Config) LifeSupport(org.neo4j.kernel.lifecycle.LifeSupport) DisabledNeoWebServer(org.neo4j.server.web.DisabledNeoWebServer) HttpConnector(org.neo4j.configuration.connectors.HttpConnector) SpecialBuiltInProcedures(org.neo4j.procedure.builtin.SpecialBuiltInProcedures) SecurityContext(org.neo4j.internal.kernel.api.security.SecurityContext) HttpsConnector(org.neo4j.configuration.connectors.HttpsConnector) ProcedureTransactionProvider(org.neo4j.procedure.impl.ProcedureTransactionProvider) Transaction(org.neo4j.graphdb.Transaction) Path(java.nio.file.Path) DatabaseIdRepository(org.neo4j.kernel.database.DatabaseIdRepository) NAMED_SYSTEM_DATABASE_ID(org.neo4j.kernel.database.DatabaseIdRepository.NAMED_SYSTEM_DATABASE_ID) ProcedureConfig(org.neo4j.procedure.impl.ProcedureConfig) RelationshipValue(org.neo4j.values.virtual.RelationshipValue) Dependencies(org.neo4j.collection.Dependencies) Geometry(org.neo4j.graphdb.spatial.Geometry) PointValue(org.neo4j.values.storable.PointValue) DatabaseContext(org.neo4j.dbms.database.DatabaseContext) GraphDatabaseAPI(org.neo4j.kernel.internal.GraphDatabaseAPI) DatabaseStateService(org.neo4j.dbms.DatabaseStateService) Optional(java.util.Optional) PathValue(org.neo4j.values.virtual.PathValue) BoltServer(org.neo4j.bolt.BoltServer) DatabaseManagementService(org.neo4j.dbms.api.DatabaseManagementService) DatabaseManager(org.neo4j.dbms.database.DatabaseManager) ValueMapper(org.neo4j.values.ValueMapper) GraphDatabaseSettings(org.neo4j.configuration.GraphDatabaseSettings) ServerSettings(org.neo4j.server.configuration.ServerSettings) LogProvider(org.neo4j.logging.LogProvider) DbmsRuntimeSystemGraphComponent(org.neo4j.dbms.database.DbmsRuntimeSystemGraphComponent) ProcedureLoginContextTransformer(org.neo4j.procedure.impl.ProcedureLoginContextTransformer) NTNode(org.neo4j.internal.kernel.api.procs.Neo4jTypes.NTNode) Function(java.util.function.Function) Supplier(java.util.function.Supplier) Node(org.neo4j.graphdb.Node) SYSTEM_DATABASE_NAME(org.neo4j.configuration.GraphDatabaseSettings.SYSTEM_DATABASE_NAME) GlobalProcedures(org.neo4j.kernel.api.procedure.GlobalProcedures) DefaultDatabaseInitializer(org.neo4j.dbms.database.DefaultDatabaseInitializer) GraphDatabaseService(org.neo4j.graphdb.GraphDatabaseService) BoltGraphDatabaseManagementServiceSPI(org.neo4j.bolt.dbapi.BoltGraphDatabaseManagementServiceSPI) SystemGraphComponents(org.neo4j.dbms.database.SystemGraphComponents) Point(org.neo4j.graphdb.spatial.Point) DbmsInfo(org.neo4j.kernel.impl.factory.DbmsInfo) DataCollector(org.neo4j.internal.collector.DataCollector) DependencyResolver(org.neo4j.common.DependencyResolver) Lifecycle(org.neo4j.kernel.lifecycle.Lifecycle) NTGeometry(org.neo4j.internal.kernel.api.procs.Neo4jTypes.NTGeometry) SecurityProvider(org.neo4j.kernel.api.security.provider.SecurityProvider) TerminationGuardProvider(org.neo4j.procedure.impl.TerminationGuardProvider) Edition(org.neo4j.common.Edition) Version(org.neo4j.kernel.internal.Version) NTPoint(org.neo4j.internal.kernel.api.procs.Neo4jTypes.NTPoint) DatabaseManagementServiceImpl(org.neo4j.dbms.database.DatabaseManagementServiceImpl) FulltextAdapter(org.neo4j.kernel.api.impl.fulltext.FulltextAdapter) Context(org.neo4j.kernel.api.procedure.Context) AbstractEditionModule(org.neo4j.graphdb.factory.module.edition.AbstractEditionModule) NTPath(org.neo4j.internal.kernel.api.procs.Neo4jTypes.NTPath) Consumer(java.util.function.Consumer) LogService(org.neo4j.logging.internal.LogService) GlobalProceduresRegistry(org.neo4j.procedure.impl.GlobalProceduresRegistry) ProcedureCallContext(org.neo4j.internal.kernel.api.procs.ProcedureCallContext) Relationship(org.neo4j.graphdb.Relationship) KernelException(org.neo4j.exceptions.KernelException) CommunityEditionModule.tryResolveOrCreate(org.neo4j.graphdb.factory.module.edition.CommunityEditionModule.tryResolveOrCreate) NTRelationship(org.neo4j.internal.kernel.api.procs.Neo4jTypes.NTRelationship) UnableToStartDatabaseException(org.neo4j.dbms.database.UnableToStartDatabaseException) KernelTransaction(org.neo4j.kernel.api.KernelTransaction) GraphDatabaseFacade(org.neo4j.kernel.impl.factory.GraphDatabaseFacade) GlobalModule(org.neo4j.graphdb.factory.module.GlobalModule) NodeValue(org.neo4j.values.virtual.NodeValue) KernelTransaction(org.neo4j.kernel.api.KernelTransaction) ProcedureLoginContextTransformer(org.neo4j.procedure.impl.ProcedureLoginContextTransformer) ValueMapper(org.neo4j.values.ValueMapper) PathValue(org.neo4j.values.virtual.PathValue) Config(org.neo4j.configuration.Config) ProcedureConfig(org.neo4j.procedure.impl.ProcedureConfig) NTNode(org.neo4j.internal.kernel.api.procs.Neo4jTypes.NTNode) Node(org.neo4j.graphdb.Node) RelationshipValue(org.neo4j.values.virtual.RelationshipValue) TerminationGuardProvider(org.neo4j.procedure.impl.TerminationGuardProvider) SystemGraphComponents(org.neo4j.dbms.database.SystemGraphComponents) ProcedureCallContext(org.neo4j.internal.kernel.api.procs.ProcedureCallContext) GlobalProceduresRegistry(org.neo4j.procedure.impl.GlobalProceduresRegistry) GraphDatabaseAPI(org.neo4j.kernel.internal.GraphDatabaseAPI) Consumer(java.util.function.Consumer) ProcedureTransactionProvider(org.neo4j.procedure.impl.ProcedureTransactionProvider) KernelException(org.neo4j.exceptions.KernelException) ProcedureConfig(org.neo4j.procedure.impl.ProcedureConfig) SpecialBuiltInProcedures(org.neo4j.procedure.builtin.SpecialBuiltInProcedures) Path(java.nio.file.Path) NTPath(org.neo4j.internal.kernel.api.procs.Neo4jTypes.NTPath) GraphDatabaseService(org.neo4j.graphdb.GraphDatabaseService) FulltextAdapter(org.neo4j.kernel.api.impl.fulltext.FulltextAdapter) Log(org.neo4j.logging.Log) PointValue(org.neo4j.values.storable.PointValue) Point(org.neo4j.graphdb.spatial.Point) NTPoint(org.neo4j.internal.kernel.api.procs.Neo4jTypes.NTPoint) DataCollector(org.neo4j.internal.collector.DataCollector) GlobalProcedures(org.neo4j.kernel.api.procedure.GlobalProcedures) Edition(org.neo4j.common.Edition) DependencyResolver(org.neo4j.common.DependencyResolver) Geometry(org.neo4j.graphdb.spatial.Geometry) NTGeometry(org.neo4j.internal.kernel.api.procs.Neo4jTypes.NTGeometry) Transaction(org.neo4j.graphdb.Transaction) KernelTransaction(org.neo4j.kernel.api.KernelTransaction) Relationship(org.neo4j.graphdb.Relationship) NTRelationship(org.neo4j.internal.kernel.api.procs.Neo4jTypes.NTRelationship) SecurityContext(org.neo4j.internal.kernel.api.security.SecurityContext) GraphDatabaseFacade(org.neo4j.kernel.impl.factory.GraphDatabaseFacade) LogService(org.neo4j.logging.internal.LogService)

Aggregations

KernelException (org.neo4j.exceptions.KernelException)58 IndexNotFoundKernelException (org.neo4j.internal.kernel.api.exceptions.schema.IndexNotFoundKernelException)22 InvalidTransactionTypeKernelException (org.neo4j.internal.kernel.api.exceptions.InvalidTransactionTypeKernelException)21 SchemaKernelException (org.neo4j.internal.kernel.api.exceptions.schema.SchemaKernelException)16 KernelTransaction (org.neo4j.kernel.api.KernelTransaction)15 IndexDescriptor (org.neo4j.internal.schema.IndexDescriptor)13 TokenCapacityExceededKernelException (org.neo4j.internal.kernel.api.exceptions.schema.TokenCapacityExceededKernelException)12 Test (org.junit.jupiter.api.Test)11 ProcedureException (org.neo4j.internal.kernel.api.exceptions.ProcedureException)10 PropertyKeyIdNotFoundKernelException (org.neo4j.internal.kernel.api.exceptions.PropertyKeyIdNotFoundKernelException)10 QueryExecutionKernelException (org.neo4j.kernel.impl.query.QueryExecutionKernelException)10 List (java.util.List)8 NotFoundException (org.neo4j.graphdb.NotFoundException)8 SchemaRead (org.neo4j.internal.kernel.api.SchemaRead)8 Arrays (java.util.Arrays)7 Collectors (java.util.stream.Collectors)7 ConstraintViolationException (org.neo4j.graphdb.ConstraintViolationException)7 EntityNotFoundException (org.neo4j.internal.kernel.api.exceptions.EntityNotFoundException)7 IllegalTokenNameException (org.neo4j.internal.kernel.api.exceptions.schema.IllegalTokenNameException)7 ArrayList (java.util.ArrayList)6