Search in sources :

Example 11 with NamedDatabaseId

use of org.neo4j.kernel.database.NamedDatabaseId in project neo4j by neo4j.

the class CommunityDatabaseStateProcedureTest method shouldReturnEmptyErrorForNoError.

@Test
void shouldReturnEmptyErrorForNoError() throws ProcedureException {
    // given
    var existing = idRepository.getRaw("existing");
    Map<NamedDatabaseId, DatabaseState> states = Map.of(existing, new CommunityDatabaseState(existing, true, false, null));
    var stateService = new StubDatabaseStateService(states, CommunityDatabaseState::unknown);
    var procedure = procedure(stateService);
    // when
    var result = procedure.apply(mock(Context.class), new AnyValue[] { stringValue(existing.name()) }, mock(ResourceTracker.class));
    var returned = Arrays.asList(result.next());
    // then
    assertEquals(4, returned.size(), "Procedure result should have 4 columns: role, address, state and error message");
    var roleColumn = stringValue("standalone");
    var addressColumn = stringValue("localhost:7687");
    var statusColumn = stringValue("online");
    var errorColumn = stringValue("");
    assertEquals(Arrays.asList(roleColumn, addressColumn, statusColumn, errorColumn), returned, "Error column should be empty");
}
Also used : Context(org.neo4j.kernel.api.procedure.Context) DatabaseState(org.neo4j.dbms.DatabaseState) CommunityDatabaseState(org.neo4j.dbms.CommunityDatabaseState) CommunityDatabaseState(org.neo4j.dbms.CommunityDatabaseState) ResourceTracker(org.neo4j.kernel.api.ResourceTracker) StubDatabaseStateService(org.neo4j.dbms.StubDatabaseStateService) NamedDatabaseId(org.neo4j.kernel.database.NamedDatabaseId) Test(org.junit.jupiter.api.Test)

Example 12 with NamedDatabaseId

use of org.neo4j.kernel.database.NamedDatabaseId in project neo4j by neo4j.

the class BookmarksParserV4 method parseBookmarks.

private List<Bookmark> parseBookmarks(ListValue bookmarks) throws BookmarkParsingException {
    var maxSystemDbTxId = ABSENT_BOOKMARK_ID;
    NamedDatabaseId userDbId = null;
    var maxUserDbTxId = ABSENT_BOOKMARK_ID;
    List<String> customBookmarkStrings = new ArrayList<>();
    for (var bookmark : bookmarks) {
        if (bookmark != Values.NO_VALUE) {
            var bookmarkString = toBookmarkString(bookmark);
            if (customBookmarkFormatParser.isCustomBookmark(bookmarkString)) {
                customBookmarkStrings.add(bookmarkString);
            } else {
                var parsedBookmark = parse(bookmarkString);
                if (NAMED_SYSTEM_DATABASE_ID.equals(parsedBookmark.namedDatabaseId)) {
                    maxSystemDbTxId = Math.max(maxSystemDbTxId, parsedBookmark.txId);
                } else {
                    if (userDbId == null) {
                        userDbId = parsedBookmark.namedDatabaseId;
                    } else {
                        assertSameDatabaseId(userDbId, parsedBookmark.namedDatabaseId, bookmarks);
                    }
                    maxUserDbTxId = Math.max(maxUserDbTxId, parsedBookmark.txId);
                }
            }
        }
    }
    if (customBookmarkStrings.isEmpty()) {
        return buildBookmarks(NAMED_SYSTEM_DATABASE_ID, maxSystemDbTxId, userDbId, maxUserDbTxId);
    }
    List<Bookmark> customBookmarks;
    try {
        customBookmarks = customBookmarkFormatParser.parse(customBookmarkStrings);
    } catch (Exception e) {
        throw BookmarkParsingException.newInvalidBookmarkError("Parsing of supplied bookmarks failed with message: " + e.getMessage(), e);
    }
    if (maxSystemDbTxId != ABSENT_BOOKMARK_ID) {
        customBookmarks.add(new BookmarkWithDatabaseId(maxSystemDbTxId, NAMED_SYSTEM_DATABASE_ID));
    }
    if (maxUserDbTxId != ABSENT_BOOKMARK_ID) {
        customBookmarks.add(new BookmarkWithDatabaseId(maxUserDbTxId, userDbId));
    }
    return customBookmarks;
}
Also used : Bookmark(org.neo4j.bolt.runtime.Bookmark) ArrayList(java.util.ArrayList) NamedDatabaseId(org.neo4j.kernel.database.NamedDatabaseId) BoltIOException(org.neo4j.bolt.messaging.BoltIOException)

Example 13 with NamedDatabaseId

use of org.neo4j.kernel.database.NamedDatabaseId in project neo4j by neo4j.

the class BuiltInDbmsProcedures method killQueries.

@SystemProcedure
@Description("Kill all transactions executing a query with any of the given query ids.")
@Procedure(name = "dbms.killQueries", mode = DBMS)
public Stream<QueryTerminationResult> killQueries(@Name("ids") List<String> idTexts) throws InvalidArgumentsException {
    DatabaseManager<DatabaseContext> databaseManager = getDatabaseManager();
    DatabaseIdRepository databaseIdRepository = databaseManager.databaseIdRepository();
    Map<Long, QueryId> queryIds = new HashMap<>(idTexts.size());
    for (String idText : idTexts) {
        QueryId id = QueryId.parse(idText);
        queryIds.put(id.internalId(), id);
    }
    List<QueryTerminationResult> result = new ArrayList<>(queryIds.size());
    for (FabricTransaction tx : getFabricTransactions()) {
        for (ExecutingQuery query : getActiveFabricQueries(tx)) {
            QueryId givenQueryId = queryIds.remove(query.internalQueryId());
            if (givenQueryId != null) {
                result.add(killFabricQueryTransaction(givenQueryId, tx, query));
            }
        }
    }
    for (Map.Entry<NamedDatabaseId, DatabaseContext> databaseEntry : databaseManager.registeredDatabases().entrySet()) {
        NamedDatabaseId databaseId = databaseEntry.getKey();
        DatabaseContext databaseContext = databaseEntry.getValue();
        if (databaseContext.database().isStarted()) {
            for (KernelTransactionHandle tx : getExecutingTransactions(databaseContext)) {
                if (tx.executingQuery().isPresent()) {
                    QueryId givenQueryId = queryIds.remove(tx.executingQuery().get().internalQueryId());
                    if (givenQueryId != null) {
                        result.add(killQueryTransaction(givenQueryId, tx, databaseId));
                    }
                }
            }
        }
    }
    // Add error about the rest
    for (QueryId queryId : queryIds.values()) {
        result.add(new QueryFailedTerminationResult(queryId, "n/a", "No Query found with this id"));
    }
    return result.stream();
}
Also used : HashMap(java.util.HashMap) DatabaseIdRepository(org.neo4j.kernel.database.DatabaseIdRepository) ArrayList(java.util.ArrayList) FabricTransaction(org.neo4j.fabric.transaction.FabricTransaction) KernelTransactionHandle(org.neo4j.kernel.api.KernelTransactionHandle) DatabaseContext(org.neo4j.dbms.database.DatabaseContext) ExecutingQuery(org.neo4j.kernel.api.query.ExecutingQuery) NamedDatabaseId(org.neo4j.kernel.database.NamedDatabaseId) Map(java.util.Map) HashMap(java.util.HashMap) Description(org.neo4j.procedure.Description) SystemProcedure(org.neo4j.kernel.api.procedure.SystemProcedure) SystemProcedure(org.neo4j.kernel.api.procedure.SystemProcedure) Procedure(org.neo4j.procedure.Procedure)

Aggregations

NamedDatabaseId (org.neo4j.kernel.database.NamedDatabaseId)13 Test (org.junit.jupiter.api.Test)7 HashMap (java.util.HashMap)3 DatabaseManagementException (org.neo4j.dbms.api.DatabaseManagementException)3 ArrayList (java.util.ArrayList)2 Map (java.util.Map)2 CommunityDatabaseState (org.neo4j.dbms.CommunityDatabaseState)2 DatabaseState (org.neo4j.dbms.DatabaseState)2 StubDatabaseStateService (org.neo4j.dbms.StubDatabaseStateService)2 DatabaseContext (org.neo4j.dbms.database.DatabaseContext)2 KernelTransactionHandle (org.neo4j.kernel.api.KernelTransactionHandle)2 ResourceTracker (org.neo4j.kernel.api.ResourceTracker)2 Context (org.neo4j.kernel.api.procedure.Context)2 SystemProcedure (org.neo4j.kernel.api.procedure.SystemProcedure)2 DatabaseIdRepository (org.neo4j.kernel.database.DatabaseIdRepository)2 Description (org.neo4j.procedure.Description)2 Procedure (org.neo4j.procedure.Procedure)2 HashSet (java.util.HashSet)1 Set (java.util.Set)1 BoltIOException (org.neo4j.bolt.messaging.BoltIOException)1