Search in sources :

Example 6 with ConsistencyFlags

use of org.neo4j.consistency.checking.full.ConsistencyFlags in project neo4j by neo4j.

the class ConsistencyCheckWithCorruptGBPTreeIT method shouldNotCheckIndexStructureIfConfiguredNotToEvenIfCheckingIndexes.

@Test
void shouldNotCheckIndexStructureIfConfiguredNotToEvenIfCheckingIndexes() throws Exception {
    MutableObject<Long> targetNode = new MutableObject<>();
    Path[] indexFiles = schemaIndexFiles();
    corruptIndexes(readOnly(), (tree, inspection) -> {
        targetNode.setValue(inspection.getRootNode());
        tree.unsafe(GBPTreeCorruption.addFreelistEntry(5), CursorContext.NULL);
    }, indexFiles);
    ConsistencyFlags flags = new ConsistencyFlags(true, true, false);
    ConsistencyCheckService.Result result = runConsistencyCheck(NullLogProvider.getInstance(), flags);
    assertTrue(result.isSuccessful(), "Expected store to be consistent when not checking indexes.");
}
Also used : Path(java.nio.file.Path) ConsistencyFlags(org.neo4j.consistency.checking.full.ConsistencyFlags) MutableObject(org.apache.commons.lang3.mutable.MutableObject) Test(org.junit.jupiter.api.Test)

Example 7 with ConsistencyFlags

use of org.neo4j.consistency.checking.full.ConsistencyFlags in project neo4j by neo4j.

the class ConsistencyCheckWithCorruptGBPTreeIT method corruptionInIdGenerator.

@Test
void corruptionInIdGenerator() throws Exception {
    MutableObject<Long> rootNode = new MutableObject<>();
    Path[] idStoreFiles = idStoreFiles();
    final LayoutBootstrapper countsLayoutBootstrapper = (indexFile, pageCache, meta) -> new CountsLayout();
    corruptIndexes(fs, readOnly(), (tree, inspection) -> {
        rootNode.setValue(inspection.getRootNode());
        tree.unsafe(pageSpecificCorruption(rootNode.getValue(), GBPTreeCorruption.broken(GBPTreePointerType.leftSibling())), CursorContext.NULL);
    }, idStoreFiles);
    ConsistencyFlags flags = new ConsistencyFlags(false, false, true);
    ConsistencyCheckService.Result result = runConsistencyCheck(NullLogProvider.getInstance(), flags);
    assertFalse(result.isSuccessful());
    assertResultContainsMessage(result, "Index inconsistency: Broken pointer found in tree node " + rootNode.getValue() + ", pointerType='left sibling'");
    assertResultContainsMessage(result, "Number of inconsistent ID_STORE records: " + idStoreFiles.length);
}
Also used : Path(java.nio.file.Path) BeforeEach(org.junit.jupiter.api.BeforeEach) DatabaseReadOnlyChecker.readOnly(org.neo4j.configuration.helpers.DatabaseReadOnlyChecker.readOnly) GBPTreeCorruption.pageSpecificCorruption(org.neo4j.index.internal.gbptree.GBPTreeCorruption.pageSpecificCorruption) CursorContext(org.neo4j.io.pagecache.context.CursorContext) Config(org.neo4j.configuration.Config) NullLogProvider(org.neo4j.logging.NullLogProvider) InspectingVisitor(org.neo4j.index.internal.gbptree.InspectingVisitor) DatabaseLayout(org.neo4j.io.layout.DatabaseLayout) DEFAULT_DATABASE_NAME(org.neo4j.configuration.GraphDatabaseSettings.DEFAULT_DATABASE_NAME) TestInstance(org.junit.jupiter.api.TestInstance) Assertions.assertFalse(org.junit.jupiter.api.Assertions.assertFalse) NATIVE30(org.neo4j.configuration.GraphDatabaseSettings.SchemaIndex.NATIVE30) BeforeAll(org.junit.jupiter.api.BeforeAll) MutableObject(org.apache.commons.lang3.mutable.MutableObject) Transaction(org.neo4j.graphdb.Transaction) Path(java.nio.file.Path) UncloseableDelegatingFileSystemAbstraction(org.neo4j.io.fs.UncloseableDelegatingFileSystemAbstraction) DatabaseReadOnlyChecker.writable(org.neo4j.configuration.helpers.DatabaseReadOnlyChecker.writable) TestDirectory(org.neo4j.test.rule.TestDirectory) String.format(java.lang.String.format) GraphDatabaseAPI(org.neo4j.kernel.internal.GraphDatabaseAPI) Test(org.junit.jupiter.api.Test) List(java.util.List) NATIVE_BTREE10(org.neo4j.configuration.GraphDatabaseSettings.SchemaIndex.NATIVE_BTREE10) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) Writer(java.io.Writer) DatabaseReadOnlyChecker(org.neo4j.configuration.helpers.DatabaseReadOnlyChecker) DatabaseManagementService(org.neo4j.dbms.api.DatabaseManagementService) IOUtils.readLines(org.apache.commons.io.IOUtils.readLines) NONE(org.neo4j.internal.helpers.progress.ProgressMonitorFactory.NONE) ImmutableLongList(org.eclipse.collections.api.list.primitive.ImmutableLongList) GBPTreeInspection(org.neo4j.index.internal.gbptree.GBPTreeInspection) Arrays(org.bouncycastle.util.Arrays) Label(org.neo4j.graphdb.Label) GraphDatabaseSettings(org.neo4j.configuration.GraphDatabaseSettings) LogProvider(org.neo4j.logging.LogProvider) NULL(org.neo4j.io.pagecache.tracing.PageCacheTracer.NULL) JobSchedulerFactory.createInitialisedScheduler(org.neo4j.kernel.impl.scheduler.JobSchedulerFactory.createInitialisedScheduler) GBPTreeBootstrapper(org.neo4j.index.internal.gbptree.GBPTreeBootstrapper) Node(org.neo4j.graphdb.Node) ArrayList(java.util.ArrayList) GBPTree(org.neo4j.index.internal.gbptree.GBPTree) TestDatabaseManagementServiceBuilder(org.neo4j.test.TestDatabaseManagementServiceBuilder) GraphDatabaseService(org.neo4j.graphdb.GraphDatabaseService) SchemaLayouts(org.neo4j.kernel.impl.index.schema.SchemaLayouts) CountsLayout(org.neo4j.internal.counts.CountsLayout) GBPTreeCorruption(org.neo4j.index.internal.gbptree.GBPTreeCorruption) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) JobScheduler(org.neo4j.scheduler.JobScheduler) FileHandle(org.neo4j.io.fs.FileHandle) DEFAULT(org.neo4j.consistency.checking.full.ConsistencyFlags.DEFAULT) UTF_8(java.nio.charset.StandardCharsets.UTF_8) StringWriter(java.io.StringWriter) DatabaseManagementServiceBuilder(org.neo4j.dbms.api.DatabaseManagementServiceBuilder) IOException(java.io.IOException) IndexDirectoryStructure(org.neo4j.kernel.api.index.IndexDirectoryStructure) ProgressMonitorFactory(org.neo4j.internal.helpers.progress.ProgressMonitorFactory) GBPTreePointerType(org.neo4j.index.internal.gbptree.GBPTreePointerType) TimeUnit(java.util.concurrent.TimeUnit) Consumer(java.util.function.Consumer) ConsistencyCheckIncompleteException(org.neo4j.consistency.checking.full.ConsistencyCheckIncompleteException) DefaultFileSystemAbstraction(org.neo4j.io.fs.DefaultFileSystemAbstraction) EphemeralFileSystemAbstraction(org.neo4j.io.fs.EphemeralFileSystemAbstraction) NO_FLUSH_ON_CLOSE(org.neo4j.index.internal.gbptree.GBPTreeOpenOptions.NO_FLUSH_ON_CLOSE) GraphDatabaseSettings.neo4j_home(org.neo4j.configuration.GraphDatabaseSettings.neo4j_home) ConsistencyFlags(org.neo4j.consistency.checking.full.ConsistencyFlags) LayoutBootstrapper(org.neo4j.index.internal.gbptree.LayoutBootstrapper) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) LayoutBootstrapper(org.neo4j.index.internal.gbptree.LayoutBootstrapper) ConsistencyFlags(org.neo4j.consistency.checking.full.ConsistencyFlags) CountsLayout(org.neo4j.internal.counts.CountsLayout) MutableObject(org.apache.commons.lang3.mutable.MutableObject) Test(org.junit.jupiter.api.Test)

Example 8 with ConsistencyFlags

use of org.neo4j.consistency.checking.full.ConsistencyFlags in project neo4j by neo4j.

the class ConsistencyCheckWithCorruptGBPTreeIT method shouldCheckIndexStructureEvenIfNotCheckingIndexes.

@Test
void shouldCheckIndexStructureEvenIfNotCheckingIndexes() throws Exception {
    MutableObject<Long> targetNode = new MutableObject<>();
    Path[] indexFiles = schemaIndexFiles();
    corruptIndexes(readOnly(), (tree, inspection) -> {
        targetNode.setValue(inspection.getRootNode());
        tree.unsafe(pageSpecificCorruption(targetNode.getValue(), GBPTreeCorruption.notATreeNode()), CursorContext.NULL);
    }, indexFiles);
    ConsistencyFlags flags = new ConsistencyFlags(true, false, true);
    ConsistencyCheckService.Result result = runConsistencyCheck(NullLogProvider.getInstance(), flags);
    assertFalse(result.isSuccessful(), "Expected store to be inconsistent when checking index structure.");
    assertResultContainsMessage(result, "Page: " + targetNode.getValue() + " is not a tree node page");
}
Also used : Path(java.nio.file.Path) ConsistencyFlags(org.neo4j.consistency.checking.full.ConsistencyFlags) MutableObject(org.apache.commons.lang3.mutable.MutableObject) Test(org.junit.jupiter.api.Test)

Example 9 with ConsistencyFlags

use of org.neo4j.consistency.checking.full.ConsistencyFlags in project neo4j by neo4j.

the class CheckConsistencyCommand method execute.

@Override
public void execute() {
    options.warnOnUsageOfDeprecatedOptions(spec, ctx);
    if (target.backup != null) {
        target.backup = target.backup.toAbsolutePath();
        if (!Files.isDirectory(target.backup)) {
            throw new CommandFailedException("Report directory path doesn't exist or not a directory: " + target.backup);
        }
    }
    Config config = loadNeo4jConfig(ctx.homeDir(), ctx.confDir(), additionalConfig);
    var memoryTracker = EmptyMemoryTracker.INSTANCE;
    try (FileSystemAbstraction fileSystem = new DefaultFileSystemAbstraction()) {
        DatabaseLayout databaseLayout = Optional.ofNullable(target.backup).map(DatabaseLayout::ofFlat).orElseGet(() -> Neo4jLayout.of(config).databaseLayout(target.database.name()));
        checkDatabaseExistence(databaseLayout);
        try (Closeable ignored = LockChecker.checkDatabaseLock(databaseLayout)) {
            checkDbState(databaseLayout, config, memoryTracker);
            // Only output progress indicator if a console receives the output
            ProgressMonitorFactory progressMonitorFactory = ProgressMonitorFactory.NONE;
            if (System.console() != null) {
                progressMonitorFactory = ProgressMonitorFactory.textual(System.out);
            }
            ConsistencyCheckService.Result consistencyCheckResult;
            try (Log4jLogProvider logProvider = Util.configuredLogProvider(config, System.out)) {
                consistencyCheckResult = consistencyCheckService.runFullConsistencyCheck(databaseLayout, config, progressMonitorFactory, logProvider, fileSystem, verbose, options.getReportDir().normalize(), new ConsistencyFlags(options.isCheckGraph(), options.isCheckIndexes(), options.isCheckIndexStructure()));
            }
            if (!consistencyCheckResult.isSuccessful()) {
                throw new CommandFailedException(format("Inconsistencies found. See '%s' for details.", consistencyCheckResult.reportFile()));
            }
        } catch (FileLockException e) {
            throw new CommandFailedException("The database is in use. Stop database '" + databaseLayout.getDatabaseName() + "' and try again.", e);
        } catch (CannotWriteException e) {
            throw new CommandFailedException("You do not have permission to check database consistency.", e);
        }
    } catch (ConsistencyCheckIncompleteException | IOException e) {
        throw new CommandFailedException("Consistency checking failed." + e.getMessage(), e);
    }
}
Also used : CannotWriteException(org.neo4j.commandline.dbms.CannotWriteException) FileLockException(org.neo4j.kernel.internal.locker.FileLockException) DefaultFileSystemAbstraction(org.neo4j.io.fs.DefaultFileSystemAbstraction) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) DefaultFileSystemAbstraction(org.neo4j.io.fs.DefaultFileSystemAbstraction) ProgressMonitorFactory(org.neo4j.internal.helpers.progress.ProgressMonitorFactory) ConsistencyFlags(org.neo4j.consistency.checking.full.ConsistencyFlags) Config(org.neo4j.configuration.Config) Log4jLogProvider(org.neo4j.logging.log4j.Log4jLogProvider) Closeable(java.io.Closeable) ConsistencyCheckIncompleteException(org.neo4j.consistency.checking.full.ConsistencyCheckIncompleteException) IOException(java.io.IOException) CommandFailedException(org.neo4j.cli.CommandFailedException) DatabaseLayout(org.neo4j.io.layout.DatabaseLayout)

Aggregations

ConsistencyFlags (org.neo4j.consistency.checking.full.ConsistencyFlags)9 Test (org.junit.jupiter.api.Test)7 Path (java.nio.file.Path)5 MutableObject (org.apache.commons.lang3.mutable.MutableObject)5 DatabaseLayout (org.neo4j.io.layout.DatabaseLayout)4 IOException (java.io.IOException)3 Config (org.neo4j.configuration.Config)3 ConsistencyCheckIncompleteException (org.neo4j.consistency.checking.full.ConsistencyCheckIncompleteException)3 StringWriter (java.io.StringWriter)2 Writer (java.io.Writer)2 String.format (java.lang.String.format)2 UTF_8 (java.nio.charset.StandardCharsets.UTF_8)2 ArrayList (java.util.ArrayList)2 List (java.util.List)2 TimeUnit (java.util.concurrent.TimeUnit)2 Consumer (java.util.function.Consumer)2 IOUtils.readLines (org.apache.commons.io.IOUtils.readLines)2 Arrays (org.bouncycastle.util.Arrays)2 ImmutableLongList (org.eclipse.collections.api.list.primitive.ImmutableLongList)2 Assertions.assertEquals (org.junit.jupiter.api.Assertions.assertEquals)2