Search in sources :

Example 16 with FileSystemAbstraction

use of org.neo4j.io.fs.FileSystemAbstraction in project neo4j by neo4j.

the class LabelsAcceptanceTest method beansAPIWithNoMoreLabelIds.

@SuppressWarnings("deprecation")
private GraphDatabaseService beansAPIWithNoMoreLabelIds() {
    final EphemeralIdGenerator.Factory idFactory = new EphemeralIdGenerator.Factory() {

        private IdTypeConfigurationProvider idTypeConfigurationProvider = new CommunityIdTypeConfigurationProvider();

        @Override
        public IdGenerator open(File fileName, int grabSize, IdType idType, long highId, long maxId) {
            if (idType == IdType.LABEL_TOKEN) {
                IdGenerator generator = generators.get(idType);
                if (generator == null) {
                    IdTypeConfiguration idTypeConfiguration = idTypeConfigurationProvider.getIdTypeConfiguration(idType);
                    generator = new EphemeralIdGenerator(idType, idTypeConfiguration) {

                        @Override
                        public long nextId() {
                            // Same exception as the one thrown by IdGeneratorImpl
                            throw new UnderlyingStorageException("Id capacity exceeded");
                        }
                    };
                    generators.put(idType, generator);
                }
                return generator;
            }
            return super.open(fileName, grabSize, idType, Long.MAX_VALUE, Long.MAX_VALUE);
        }
    };
    TestGraphDatabaseFactory dbFactory = new TestGraphDatabaseFactory() {

        @Override
        protected GraphDatabaseBuilder.DatabaseCreator createImpermanentDatabaseCreator(final File storeDir, final TestGraphDatabaseFactoryState state) {
            return new GraphDatabaseBuilder.DatabaseCreator() {

                @Override
                public GraphDatabaseService newDatabase(Map<String, String> config) {
                    return newDatabase(Config.embeddedDefaults(config));
                }

                @Override
                public GraphDatabaseService newDatabase(@Nonnull Config config) {
                    return new ImpermanentGraphDatabase(storeDir, config, GraphDatabaseDependencies.newDependencies(state.databaseDependencies())) {

                        @Override
                        protected void create(File storeDir, Config config, GraphDatabaseFacadeFactory.Dependencies dependencies) {
                            Function<PlatformModule, EditionModule> factory = (platformModule) -> new CommunityEditionModule(platformModule) {

                                @Override
                                protected IdGeneratorFactory createIdGeneratorFactory(FileSystemAbstraction fs, IdTypeConfigurationProvider idTypeConfigurationProvider) {
                                    return idFactory;
                                }
                            };
                            new GraphDatabaseFacadeFactory(DatabaseInfo.COMMUNITY, factory) {

                                @Override
                                protected PlatformModule createPlatform(File storeDir, Config config, Dependencies dependencies, GraphDatabaseFacade graphDatabaseFacade) {
                                    return new ImpermanentPlatformModule(storeDir, config, databaseInfo, dependencies, graphDatabaseFacade);
                                }
                            }.initFacade(storeDir, config, dependencies, this);
                        }
                    };
                }
            };
        }
    };
    return dbFactory.newImpermanentDatabase();
}
Also used : EphemeralIdGenerator(org.neo4j.test.impl.EphemeralIdGenerator) IdGeneratorFactory(org.neo4j.kernel.impl.store.id.IdGeneratorFactory) GraphDatabaseFacadeFactory(org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory) Matchers.not(org.hamcrest.Matchers.not) Statement(org.neo4j.kernel.api.Statement) IdTypeConfigurationProvider(org.neo4j.kernel.impl.store.id.configuration.IdTypeConfigurationProvider) Matchers.hasItems(org.hamcrest.Matchers.hasItems) TestGraphDatabaseFactory(org.neo4j.test.TestGraphDatabaseFactory) Cursor(org.neo4j.cursor.Cursor) GraphDatabaseDependencies(org.neo4j.kernel.GraphDatabaseDependencies) Assert.assertThat(org.junit.Assert.assertThat) GraphDatabaseBuilder(org.neo4j.graphdb.factory.GraphDatabaseBuilder) Iterables.map(org.neo4j.helpers.collection.Iterables.map) EditionModule(org.neo4j.kernel.impl.factory.EditionModule) Map(java.util.Map) CommunityIdTypeConfigurationProvider(org.neo4j.kernel.impl.store.id.configuration.CommunityIdTypeConfigurationProvider) Assert.fail(org.junit.Assert.fail) Neo4jMatchers.inTx(org.neo4j.test.mockito.matcher.Neo4jMatchers.inTx) Collectors.toSet(java.util.stream.Collectors.toSet) UnderlyingStorageException(org.neo4j.kernel.impl.store.UnderlyingStorageException) PrimitiveIntCollections.consume(org.neo4j.collection.primitive.PrimitiveIntCollections.consume) ThreadToStatementContextBridge(org.neo4j.kernel.impl.core.ThreadToStatementContextBridge) Set(java.util.Set) GraphDatabaseAPI(org.neo4j.kernel.internal.GraphDatabaseAPI) IdType(org.neo4j.kernel.impl.store.id.IdType) List(java.util.List) Stream(java.util.stream.Stream) Assert.assertFalse(org.junit.Assert.assertFalse) TestGraphDatabaseFactoryState(org.neo4j.test.TestGraphDatabaseFactoryState) PropertyItem(org.neo4j.storageengine.api.PropertyItem) ImpermanentGraphDatabase(org.neo4j.test.ImpermanentGraphDatabase) IdTypeConfiguration(org.neo4j.kernel.impl.store.id.configuration.IdTypeConfiguration) Iterators.asSet(org.neo4j.helpers.collection.Iterators.asSet) Neo4jMatchers.hasNoLabels(org.neo4j.test.mockito.matcher.Neo4jMatchers.hasNoLabels) CommunityEditionModule(org.neo4j.kernel.impl.factory.CommunityEditionModule) Function(java.util.function.Function) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Neo4jMatchers.hasLabel(org.neo4j.test.mockito.matcher.Neo4jMatchers.hasLabel) Neo4jMatchers.hasNoNodes(org.neo4j.test.mockito.matcher.Neo4jMatchers.hasNoNodes) Neo4jMatchers.hasLabels(org.neo4j.test.mockito.matcher.Neo4jMatchers.hasLabels) Nonnull(javax.annotation.Nonnull) ImpermanentDatabaseRule(org.neo4j.test.rule.ImpermanentDatabaseRule) Config(org.neo4j.kernel.configuration.Config) Iterator(java.util.Iterator) DatabaseInfo(org.neo4j.kernel.impl.factory.DatabaseInfo) IdGenerator(org.neo4j.kernel.impl.store.id.IdGenerator) Assert.assertTrue(org.junit.Assert.assertTrue) Test(org.junit.Test) Label.label(org.neo4j.graphdb.Label.label) Iterables.asList(org.neo4j.helpers.collection.Iterables.asList) File(java.io.File) Rule(org.junit.Rule) Iterables(org.neo4j.helpers.collection.Iterables) Neo4jMatchers.hasNodes(org.neo4j.test.mockito.matcher.Neo4jMatchers.hasNodes) NodeItem(org.neo4j.storageengine.api.NodeItem) GraphDatabaseFacade(org.neo4j.kernel.impl.factory.GraphDatabaseFacade) PlatformModule(org.neo4j.kernel.impl.factory.PlatformModule) Assert.assertEquals(org.junit.Assert.assertEquals) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) Config(org.neo4j.kernel.configuration.Config) IdGeneratorFactory(org.neo4j.kernel.impl.store.id.IdGeneratorFactory) GraphDatabaseFacadeFactory(org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory) TestGraphDatabaseFactory(org.neo4j.test.TestGraphDatabaseFactory) EphemeralIdGenerator(org.neo4j.test.impl.EphemeralIdGenerator) GraphDatabaseFacadeFactory(org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory) TestGraphDatabaseFactory(org.neo4j.test.TestGraphDatabaseFactory) GraphDatabaseDependencies(org.neo4j.kernel.GraphDatabaseDependencies) IdTypeConfigurationProvider(org.neo4j.kernel.impl.store.id.configuration.IdTypeConfigurationProvider) CommunityIdTypeConfigurationProvider(org.neo4j.kernel.impl.store.id.configuration.CommunityIdTypeConfigurationProvider) GraphDatabaseBuilder(org.neo4j.graphdb.factory.GraphDatabaseBuilder) CommunityEditionModule(org.neo4j.kernel.impl.factory.CommunityEditionModule) TestGraphDatabaseFactoryState(org.neo4j.test.TestGraphDatabaseFactoryState) Nonnull(javax.annotation.Nonnull) EphemeralIdGenerator(org.neo4j.test.impl.EphemeralIdGenerator) IdGenerator(org.neo4j.kernel.impl.store.id.IdGenerator) UnderlyingStorageException(org.neo4j.kernel.impl.store.UnderlyingStorageException) PlatformModule(org.neo4j.kernel.impl.factory.PlatformModule) IdType(org.neo4j.kernel.impl.store.id.IdType) EditionModule(org.neo4j.kernel.impl.factory.EditionModule) CommunityEditionModule(org.neo4j.kernel.impl.factory.CommunityEditionModule) IdTypeConfiguration(org.neo4j.kernel.impl.store.id.configuration.IdTypeConfiguration) CommunityIdTypeConfigurationProvider(org.neo4j.kernel.impl.store.id.configuration.CommunityIdTypeConfigurationProvider) ImpermanentGraphDatabase(org.neo4j.test.ImpermanentGraphDatabase) GraphDatabaseFacade(org.neo4j.kernel.impl.factory.GraphDatabaseFacade) File(java.io.File) Map(java.util.Map)

Example 17 with FileSystemAbstraction

use of org.neo4j.io.fs.FileSystemAbstraction in project neo4j by neo4j.

the class NeoStoreDataSourceTest method shouldAlwaysShutdownLifeEvenWhenCheckPointingFails.

@Test
public void shouldAlwaysShutdownLifeEvenWhenCheckPointingFails() throws Exception {
    // Given
    File storeDir = dir.graphDbDir();
    FileSystemAbstraction fs = this.fs.get();
    PageCache pageCache = pageCacheRule.getPageCache(fs);
    DatabaseHealth databaseHealth = mock(DatabaseHealth.class);
    when(databaseHealth.isHealthy()).thenReturn(true);
    IOException ex = new IOException("boom!");
    doThrow(ex).when(databaseHealth).assertHealthy(// <- this is a trick to simulate a failure during checkpointing
    IOException.class);
    NeoStoreDataSource dataSource = dsRule.getDataSource(storeDir, fs, pageCache, emptyMap(), databaseHealth);
    dataSource.start();
    try {
        // When
        dataSource.stop();
        fail("it should have thrown");
    } catch (LifecycleException e) {
        // Then
        assertEquals(ex, e.getCause());
    }
}
Also used : DatabaseHealth(org.neo4j.kernel.internal.DatabaseHealth) LifecycleException(org.neo4j.kernel.lifecycle.LifecycleException) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) IOException(java.io.IOException) File(java.io.File) PageCache(org.neo4j.io.pagecache.PageCache) Test(org.junit.Test)

Example 18 with FileSystemAbstraction

use of org.neo4j.io.fs.FileSystemAbstraction in project neo4j by neo4j.

the class TestIndexProviderStore method shouldThrowWhenTryingToCreateFileThatAlreadyExists.

@Test(expected = IllegalArgumentException.class)
public void shouldThrowWhenTryingToCreateFileThatAlreadyExists() {
    // Given
    FileSystemAbstraction fs = mock(FileSystemAbstraction.class);
    when(fs.fileExists(file)).thenReturn(false).thenReturn(true);
    when(fs.getFileSize(file)).thenReturn(42L);
    // When
    new IndexProviderStore(file, fs, MetaDataStore.versionStringToLong("3.5"), false);
// Then
// exception is thrown
}
Also used : DefaultFileSystemAbstraction(org.neo4j.io.fs.DefaultFileSystemAbstraction) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) Test(org.junit.Test)

Example 19 with FileSystemAbstraction

use of org.neo4j.io.fs.FileSystemAbstraction in project neo4j by neo4j.

the class LegacyLogsTest method transactionInformationRetrievedFromCommitEntries.

@Test
@SuppressWarnings("unchecked")
public void transactionInformationRetrievedFromCommitEntries() throws IOException {
    FileSystemAbstraction fs = mock(FileSystemAbstraction.class);
    File logFile = new File(LegacyLogFilenames.getLegacyLogFilename(1));
    when(fs.listFiles(any(File.class), any(FilenameFilter.class))).thenReturn(new File[] { logFile });
    LegacyLogEntryReader reader = mock(LegacyLogEntryReader.class);
    LogEntry[] entries = new LogEntry[] { start(1), createNode(1), createNode(2), commit(1), start(2), createNode(3), createNode(4), commit(2), start(3), createNode(5), commit(3) };
    when(reader.openReadableChannel(any(File.class))).thenReturn(readableChannel(entries), readableChannel(entries), readableChannel(entries));
    LegacyLogEntryWriter writer = new LegacyLogEntryWriter(fs);
    LegacyLogs legacyLogs = new LegacyLogs(fs, reader, writer);
    assertEquals(newTransactionId(1), getTransactionInformation(legacyLogs, 1));
    assertEquals(newTransactionId(2), getTransactionInformation(legacyLogs, 2));
    assertEquals(newTransactionId(3), getTransactionInformation(legacyLogs, 3));
}
Also used : FilenameFilter(java.io.FilenameFilter) EphemeralFileSystemAbstraction(org.neo4j.graphdb.mockfs.EphemeralFileSystemAbstraction) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) File(java.io.File) LogEntry(org.neo4j.kernel.impl.transaction.log.entry.LogEntry) Test(org.junit.Test)

Example 20 with FileSystemAbstraction

use of org.neo4j.io.fs.FileSystemAbstraction in project neo4j by neo4j.

the class PartialTransactionFailureIT method concurrentlyCommittingTransactionsMustNotRotateOutLoggedCommandsOfFailingTransaction.

@Test
public void concurrentlyCommittingTransactionsMustNotRotateOutLoggedCommandsOfFailingTransaction() throws Exception {
    final ClassGuardedAdversary adversary = new ClassGuardedAdversary(new CountingAdversary(1, false), Command.RelationshipCommand.class);
    adversary.disable();
    File storeDir = dir.graphDbDir();
    final Map<String, String> params = stringMap(GraphDatabaseSettings.pagecache_memory.name(), "8m");
    final EmbeddedGraphDatabase db = new TestEmbeddedGraphDatabase(storeDir, params) {

        @Override
        protected void create(File storeDir, Map<String, String> params, GraphDatabaseFacadeFactory.Dependencies dependencies) {
            new GraphDatabaseFacadeFactory(DatabaseInfo.COMMUNITY, CommunityEditionModule::new) {

                @Override
                protected PlatformModule createPlatform(File storeDir, Config config, Dependencies dependencies, GraphDatabaseFacade graphDatabaseFacade) {
                    return new PlatformModule(storeDir, config, databaseInfo, dependencies, graphDatabaseFacade) {

                        @Override
                        protected FileSystemAbstraction createFileSystemAbstraction() {
                            return new AdversarialFileSystemAbstraction(adversary);
                        }
                    };
                }
            }.initFacade(storeDir, params, dependencies, this);
        }
    };
    Node a, b, c, d;
    try (Transaction tx = db.beginTx()) {
        a = db.createNode();
        b = db.createNode();
        c = db.createNode();
        d = db.createNode();
        tx.success();
    }
    adversary.enable();
    CountDownLatch latch = new CountDownLatch(1);
    Thread t1 = new Thread(createRelationship(db, a, b, latch), "T1");
    Thread t2 = new Thread(createRelationship(db, c, d, latch), "T2");
    t1.start();
    t2.start();
    // Wait for both threads to get going
    t1.join(10);
    t2.join(10);
    latch.countDown();
    // Wait for the transactions to finish
    t1.join(25000);
    t2.join(25000);
    db.shutdown();
    // We should observe the store in a consistent state
    EmbeddedGraphDatabase db2 = new TestEmbeddedGraphDatabase(storeDir, params);
    try (Transaction tx = db2.beginTx()) {
        Node x = db2.getNodeById(a.getId());
        Node y = db2.getNodeById(b.getId());
        Node z = db2.getNodeById(c.getId());
        Node w = db2.getNodeById(d.getId());
        Iterator<Relationship> itrRelX = x.getRelationships().iterator();
        Iterator<Relationship> itrRelY = y.getRelationships().iterator();
        Iterator<Relationship> itrRelZ = z.getRelationships().iterator();
        Iterator<Relationship> itrRelW = w.getRelationships().iterator();
        if (itrRelX.hasNext() != itrRelY.hasNext()) {
            fail("Node x and y have inconsistent relationship counts");
        } else if (itrRelX.hasNext()) {
            Relationship rel = itrRelX.next();
            assertEquals(rel, itrRelY.next());
            assertFalse(itrRelX.hasNext());
            assertFalse(itrRelY.hasNext());
        }
        if (itrRelZ.hasNext() != itrRelW.hasNext()) {
            fail("Node z and w have inconsistent relationship counts");
        } else if (itrRelZ.hasNext()) {
            Relationship rel = itrRelZ.next();
            assertEquals(rel, itrRelW.next());
            assertFalse(itrRelZ.hasNext());
            assertFalse(itrRelW.hasNext());
        }
    } finally {
        db2.shutdown();
    }
}
Also used : EmbeddedGraphDatabase(org.neo4j.kernel.internal.EmbeddedGraphDatabase) CountingAdversary(org.neo4j.adversaries.CountingAdversary) AdversarialFileSystemAbstraction(org.neo4j.adversaries.fs.AdversarialFileSystemAbstraction) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) ClassGuardedAdversary(org.neo4j.adversaries.ClassGuardedAdversary) Config(org.neo4j.kernel.configuration.Config) Node(org.neo4j.graphdb.Node) PlatformModule(org.neo4j.kernel.impl.factory.PlatformModule) CountDownLatch(java.util.concurrent.CountDownLatch) Transaction(org.neo4j.graphdb.Transaction) Command(org.neo4j.kernel.impl.transaction.command.Command) GraphDatabaseFacadeFactory(org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory) Relationship(org.neo4j.graphdb.Relationship) GraphDatabaseFacade(org.neo4j.kernel.impl.factory.GraphDatabaseFacade) File(java.io.File) Map(java.util.Map) MapUtil.stringMap(org.neo4j.helpers.collection.MapUtil.stringMap) AdversarialFileSystemAbstraction(org.neo4j.adversaries.fs.AdversarialFileSystemAbstraction) Test(org.junit.Test)

Aggregations

FileSystemAbstraction (org.neo4j.io.fs.FileSystemAbstraction)125 File (java.io.File)88 Test (org.junit.Test)82 DefaultFileSystemAbstraction (org.neo4j.io.fs.DefaultFileSystemAbstraction)34 IOException (java.io.IOException)28 Config (org.neo4j.kernel.configuration.Config)23 EphemeralFileSystemAbstraction (org.neo4j.graphdb.mockfs.EphemeralFileSystemAbstraction)22 PageCache (org.neo4j.io.pagecache.PageCache)22 DelegatingFileSystemAbstraction (org.neo4j.graphdb.mockfs.DelegatingFileSystemAbstraction)20 ByteBuffer (java.nio.ByteBuffer)13 StoreChannel (org.neo4j.io.fs.StoreChannel)11 LifeSupport (org.neo4j.kernel.lifecycle.LifeSupport)10 UncloseableDelegatingFileSystemAbstraction (org.neo4j.graphdb.mockfs.UncloseableDelegatingFileSystemAbstraction)9 DefaultIdGeneratorFactory (org.neo4j.kernel.impl.store.id.DefaultIdGeneratorFactory)9 OutputStream (java.io.OutputStream)8 AdversarialFileSystemAbstraction (org.neo4j.adversaries.fs.AdversarialFileSystemAbstraction)8 DelegatingStoreChannel (org.neo4j.graphdb.mockfs.DelegatingStoreChannel)8 Map (java.util.Map)7 Matchers.containsString (org.hamcrest.Matchers.containsString)7 AdversarialPagedFile (org.neo4j.adversaries.pagecache.AdversarialPagedFile)7