Search in sources :

Example 6 with DatabaseStateService

use of org.neo4j.dbms.DatabaseStateService in project neo4j by neo4j.

the class RecoveryIT method failToStartDatabaseWithTransactionLogsInLegacyLocation.

@Test
void failToStartDatabaseWithTransactionLogsInLegacyLocation() throws Exception {
    GraphDatabaseAPI database = createDatabase();
    generateSomeData(database);
    managementService.shutdown();
    LogFiles logFiles = buildLogFiles();
    Path[] txLogFiles = fileSystem.listFiles(logFiles.logFilesDirectory(), path -> path.getFileName().toString().startsWith(DEFAULT_NAME));
    txLogFiles = ArrayUtil.concat(txLogFiles, logFiles.getCheckpointFile().getDetachedCheckpointFiles());
    Path databasesDirectory = databaseLayout.getNeo4jLayout().databasesDirectory();
    DatabaseLayout legacyLayout = Neo4jLayout.ofFlat(databasesDirectory).databaseLayout(databaseLayout.getDatabaseName());
    LegacyTransactionLogsLocator logsLocator = new LegacyTransactionLogsLocator(Config.defaults(), legacyLayout);
    Path transactionLogsDirectory = logsLocator.getTransactionLogsDirectory();
    assertNotNull(txLogFiles);
    assertTrue(txLogFiles.length > 0);
    for (Path logFile : txLogFiles) {
        fileSystem.moveToDirectory(logFile, transactionLogsDirectory);
    }
    AssertableLogProvider logProvider = new AssertableLogProvider();
    builder.setInternalLogProvider(logProvider);
    GraphDatabaseAPI restartedDb = createDatabase();
    try {
        DatabaseStateService dbStateService = restartedDb.getDependencyResolver().resolveDependency(DatabaseStateService.class);
        var failure = dbStateService.causeOfFailure(restartedDb.databaseId());
        assertTrue(failure.isPresent());
        assertThat(failure.get()).hasRootCauseMessage("Transaction logs are missing and recovery is not possible.");
        assertThat(logProvider.serialize()).contains(txLogFiles[0].getFileName().toString());
    } finally {
        managementService.shutdown();
    }
}
Also used : Path(java.nio.file.Path) LegacyTransactionLogsLocator(org.neo4j.kernel.impl.storemigration.LegacyTransactionLogsLocator) GraphDatabaseAPI(org.neo4j.kernel.internal.GraphDatabaseAPI) LogFiles(org.neo4j.kernel.impl.transaction.log.files.LogFiles) DatabaseLayout(org.neo4j.io.layout.DatabaseLayout) DatabaseStateService(org.neo4j.dbms.DatabaseStateService) AssertableLogProvider(org.neo4j.logging.AssertableLogProvider) Test(org.junit.jupiter.api.Test)

Example 7 with DatabaseStateService

use of org.neo4j.dbms.DatabaseStateService in project neo4j by neo4j.

the class StoreUpgradeOnStartupTest method shouldAbortOnNonCleanlyShutdown.

@Test
public void shouldAbortOnNonCleanlyShutdown() throws Throwable {
    // given
    removeCheckPointFromTxLog(fileSystem, workingDatabaseLayout.databaseDirectory());
    GraphDatabaseAPI database = createGraphDatabaseService();
    try {
        DatabaseStateService databaseStateService = database.getDependencyResolver().resolveDependency(DatabaseStateService.class);
        assertTrue(databaseStateService.causeOfFailure(database.databaseId()).isPresent());
        assertThat(getRootCause(databaseStateService.causeOfFailure(database.databaseId()).get())).isInstanceOf(StoreUpgrader.UnableToUpgradeException.class);
    } finally {
        managementService.shutdown();
    }
}
Also used : GraphDatabaseAPI(org.neo4j.kernel.internal.GraphDatabaseAPI) StoreUpgrader(org.neo4j.kernel.impl.storemigration.StoreUpgrader) DatabaseStateService(org.neo4j.dbms.DatabaseStateService) Test(org.junit.Test)

Example 8 with DatabaseStateService

use of org.neo4j.dbms.DatabaseStateService in project neo4j by neo4j.

the class DatabaseFailureIT method startWhenDefaultDatabaseFailedToStart.

@Test
void startWhenDefaultDatabaseFailedToStart() throws IOException {
    managementService.shutdown();
    FileUtils.deleteDirectory(databaseLayout.getTransactionLogsDirectory());
    database = startDatabase();
    DatabaseStateService databaseStateService = database.getDependencyResolver().resolveDependency(DatabaseStateService.class);
    assertTrue(databaseStateService.causeOfFailure(database.databaseId()).isPresent());
    assertFalse(databaseStateService.causeOfFailure(NAMED_SYSTEM_DATABASE_ID).isPresent());
}
Also used : DatabaseStateService(org.neo4j.dbms.DatabaseStateService) Test(org.junit.jupiter.api.Test)

Example 9 with DatabaseStateService

use of org.neo4j.dbms.DatabaseStateService in project neo4j by neo4j.

the class RecoveryCorruptedTransactionLogIT method doNotTruncateNewerTransactionLogFileWhenFailOnError.

@Test
void doNotTruncateNewerTransactionLogFileWhenFailOnError() throws IOException {
    DatabaseManagementService managementService1 = databaseFactory.build();
    GraphDatabaseAPI database = (GraphDatabaseAPI) managementService1.database(DEFAULT_DATABASE_NAME);
    logFiles = buildDefaultLogFiles(getStoreId(database));
    for (int i = 0; i < 10; i++) {
        generateTransaction(database);
    }
    managementService1.shutdown();
    removeLastCheckpointRecordFromLastLogFile();
    addRandomBytesToLastLogFile(this::randomInvalidVersionsBytes);
    DatabaseManagementService managementService = databaseFactory.build();
    GraphDatabaseAPI db = (GraphDatabaseAPI) managementService.database(DEFAULT_DATABASE_NAME);
    try {
        DatabaseStateService dbStateService = db.getDependencyResolver().resolveDependency(DatabaseStateService.class);
        assertTrue(dbStateService.causeOfFailure(db.databaseId()).isPresent());
        assertThat(dbStateService.causeOfFailure(db.databaseId()).get()).hasRootCauseInstanceOf(UnsupportedLogVersionException.class);
    } finally {
        managementService.shutdown();
    }
}
Also used : GraphDatabaseAPI(org.neo4j.kernel.internal.GraphDatabaseAPI) DatabaseStateService(org.neo4j.dbms.DatabaseStateService) DatabaseManagementService(org.neo4j.dbms.api.DatabaseManagementService) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 10 with DatabaseStateService

use of org.neo4j.dbms.DatabaseStateService in project neo4j by neo4j.

the class RecoveryCorruptedTransactionLogIT method failToRecoverFirstCorruptedTransactionSingleFileNoCheckpointIfFailOnCorruption.

@Test
void failToRecoverFirstCorruptedTransactionSingleFileNoCheckpointIfFailOnCorruption() throws IOException {
    addCorruptedCommandsToLastLogFile(new CorruptedLogEntryWrapper());
    DatabaseManagementService managementService = databaseFactory.build();
    GraphDatabaseAPI db = (GraphDatabaseAPI) managementService.database(DEFAULT_DATABASE_NAME);
    try {
        DatabaseStateService dbStateService = db.getDependencyResolver().resolveDependency(DatabaseStateService.class);
        assertTrue(dbStateService.causeOfFailure(db.databaseId()).isPresent());
        assertThat(dbStateService.causeOfFailure(db.databaseId()).get()).hasRootCauseInstanceOf(NegativeArraySizeException.class);
    } finally {
        managementService.shutdown();
    }
}
Also used : GraphDatabaseAPI(org.neo4j.kernel.internal.GraphDatabaseAPI) DatabaseStateService(org.neo4j.dbms.DatabaseStateService) DatabaseManagementService(org.neo4j.dbms.api.DatabaseManagementService) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Aggregations

DatabaseStateService (org.neo4j.dbms.DatabaseStateService)16 Test (org.junit.jupiter.api.Test)13 GraphDatabaseAPI (org.neo4j.kernel.internal.GraphDatabaseAPI)13 DatabaseManagementService (org.neo4j.dbms.api.DatabaseManagementService)8 DatabaseLayout (org.neo4j.io.layout.DatabaseLayout)6 Transaction (org.neo4j.graphdb.Transaction)4 TestDatabaseManagementServiceBuilder (org.neo4j.test.TestDatabaseManagementServiceBuilder)4 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)3 DefaultFileSystemAbstraction (org.neo4j.io.fs.DefaultFileSystemAbstraction)3 EphemeralFileSystemAbstraction (org.neo4j.io.fs.EphemeralFileSystemAbstraction)3 FileSystemAbstraction (org.neo4j.io.fs.FileSystemAbstraction)3 PageCache (org.neo4j.io.pagecache.PageCache)3 StandalonePageCacheFactory.createPageCache (org.neo4j.io.pagecache.impl.muninn.StandalonePageCacheFactory.createPageCache)3 StoreUpgrader (org.neo4j.kernel.impl.storemigration.StoreUpgrader)3 ThreadPoolJobScheduler (org.neo4j.test.scheduler.ThreadPoolJobScheduler)3 Path (java.nio.file.Path)2 GraphDatabaseService (org.neo4j.graphdb.GraphDatabaseService)2 AssertableLogProvider (org.neo4j.logging.AssertableLogProvider)2 IOException (java.io.IOException)1 Optional (java.util.Optional)1