use of org.neo4j.dbms.DatabaseStateService in project neo4j by neo4j.
the class RecoveryCorruptedTransactionLogIT method failToRecoverFirstCorruptedTransactionSingleFileNoCheckpointIfFailOnCorruptionVersion.
@Test
void failToRecoverFirstCorruptedTransactionSingleFileNoCheckpointIfFailOnCorruptionVersion() throws IOException {
addCorruptedCommandsToLastLogFile(new CorruptedLogEntryVersionWrapper());
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();
}
}
use of org.neo4j.dbms.DatabaseStateService in project neo4j by neo4j.
the class RecoveryIT method failRecoveryWithMissingStoreFileAndIdFile.
@Test
void failRecoveryWithMissingStoreFileAndIdFile() throws Exception {
GraphDatabaseAPI database = createDatabase();
generateSomeData(database);
DatabaseLayout layout = database.databaseLayout();
managementService.shutdown();
// Recovery should not be attempted on any store with missing store files, even if other recoverable files are missing as well.
fileSystem.deleteFileOrThrow(layout.nodeStore());
fileSystem.deleteFileOrThrow(layout.idLabelTokenStore());
GraphDatabaseAPI restartedDb = createDatabase();
try {
DatabaseStateService dbStateService = restartedDb.getDependencyResolver().resolveDependency(DatabaseStateService.class);
var failure = dbStateService.causeOfFailure(restartedDb.databaseId());
assertTrue(failure.isPresent());
assertThat(failure.get().getCause()).hasMessageContainingAll("neostore.nodestore.db", "is(are) missing and recovery is not possible");
} finally {
managementService.shutdown();
}
}
use of org.neo4j.dbms.DatabaseStateService in project neo4j by neo4j.
the class RecoveryIT method failRecoveryWithMissingStoreFile.
@Test
void failRecoveryWithMissingStoreFile() throws Exception {
GraphDatabaseAPI database = createDatabase();
generateSomeData(database);
DatabaseLayout layout = database.databaseLayout();
managementService.shutdown();
fileSystem.deleteFileOrThrow(layout.nodeStore());
GraphDatabaseAPI restartedDb = createDatabase();
try {
DatabaseStateService dbStateService = restartedDb.getDependencyResolver().resolveDependency(DatabaseStateService.class);
var failure = dbStateService.causeOfFailure(restartedDb.databaseId());
assertTrue(failure.isPresent());
assertThat(failure.get().getCause()).hasMessageContainingAll("neostore.nodestore.db", "is(are) missing and recovery is not possible");
} finally {
managementService.shutdown();
}
}
use of org.neo4j.dbms.DatabaseStateService in project neo4j by neo4j.
the class DatabaseStartupTest method startTheDatabaseWithWrongVersionShouldFailAlsoWhenUpgradeIsAllowed.
@Test
void startTheDatabaseWithWrongVersionShouldFailAlsoWhenUpgradeIsAllowed() throws Throwable {
// given
// create a store
DatabaseManagementService managementService = new TestDatabaseManagementServiceBuilder(databaseLayout).build();
GraphDatabaseService db = managementService.database(DEFAULT_DATABASE_NAME);
try (Transaction tx = db.beginTx()) {
tx.createNode();
tx.commit();
}
managementService.shutdown();
// mess up the version in the metadatastore
String badStoreVersion = "bad";
try (FileSystemAbstraction fileSystem = new DefaultFileSystemAbstraction();
ThreadPoolJobScheduler scheduler = new ThreadPoolJobScheduler();
PageCache pageCache = createPageCache(fileSystem, scheduler, PageCacheTracer.NULL)) {
MetaDataStore.setRecord(pageCache, databaseLayout.metadataStore(), MetaDataStore.Position.STORE_VERSION, MetaDataStore.versionStringToLong(badStoreVersion), databaseLayout.getDatabaseName(), NULL);
}
managementService = new TestDatabaseManagementServiceBuilder(databaseLayout).setConfig(GraphDatabaseSettings.allow_upgrade, true).build();
GraphDatabaseAPI databaseService = (GraphDatabaseAPI) managementService.database(DEFAULT_DATABASE_NAME);
try {
assertThrows(DatabaseShutdownException.class, databaseService::beginTx);
DatabaseStateService dbStateService = databaseService.getDependencyResolver().resolveDependency(DatabaseStateService.class);
assertTrue(dbStateService.causeOfFailure(databaseService.databaseId()).isPresent());
Optional<Throwable> upgradeException = findCauseOrSuppressed(dbStateService.causeOfFailure(databaseService.databaseId()).get(), e -> e instanceof StoreUpgrader.UnexpectedUpgradingStoreVersionException);
assertTrue(upgradeException.isPresent());
} finally {
managementService.shutdown();
}
}
use of org.neo4j.dbms.DatabaseStateService in project neo4j by neo4j.
the class DatabaseStartupTest method startDatabaseWithWrongTransactionFilesShouldFail.
@Test
void startDatabaseWithWrongTransactionFilesShouldFail() throws IOException {
// Create a store
DatabaseManagementService managementService = new TestDatabaseManagementServiceBuilder(databaseLayout).build();
GraphDatabaseAPI db = (GraphDatabaseAPI) managementService.database(DEFAULT_DATABASE_NAME);
DatabaseLayout databaseLayout = db.databaseLayout();
try (Transaction tx = db.beginTx()) {
tx.createNode();
tx.commit();
}
managementService.shutdown();
// Change store id component
try (FileSystemAbstraction fileSystem = new DefaultFileSystemAbstraction();
ThreadPoolJobScheduler scheduler = new ThreadPoolJobScheduler();
PageCache pageCache = createPageCache(fileSystem, scheduler, PageCacheTracer.NULL)) {
long newTime = System.currentTimeMillis() + 1;
MetaDataStore.setRecord(pageCache, databaseLayout.metadataStore(), MetaDataStore.Position.TIME, newTime, databaseLayout.getDatabaseName(), NULL);
}
// Try to start
managementService = new TestDatabaseManagementServiceBuilder(databaseLayout).build();
try {
db = (GraphDatabaseAPI) managementService.database(DEFAULT_DATABASE_NAME);
assertFalse(db.isAvailable(10));
DatabaseStateService dbStateService = db.getDependencyResolver().resolveDependency(DatabaseStateService.class);
Optional<Throwable> cause = dbStateService.causeOfFailure(db.databaseId());
assertTrue(cause.isPresent());
assertTrue(cause.get().getCause().getMessage().contains("Mismatching store id"));
} finally {
managementService.shutdown();
}
}
Aggregations