Search in sources :

Example 6 with UnderlyingStorageException

use of org.neo4j.kernel.impl.store.UnderlyingStorageException in project neo4j by neo4j.

the class IdGeneratorImpl method initGenerator.

// initialize the id generator and performs a simple validation
private synchronized void initGenerator() {
    try {
        fileChannel = fs.open(file, "rw");
        ByteBuffer buffer = readHeader();
        markAsSticky(fileChannel, buffer);
        fileChannel.position(HEADER_SIZE);
        this.keeper = new FreeIdKeeper(fileChannel, grabSize, aggressiveReuse);
    } catch (IOException e) {
        throw new UnderlyingStorageException("Unable to init id generator " + file, e);
    }
}
Also used : IOException(java.io.IOException) UnderlyingStorageException(org.neo4j.kernel.impl.store.UnderlyingStorageException) ByteBuffer(java.nio.ByteBuffer)

Example 7 with UnderlyingStorageException

use of org.neo4j.kernel.impl.store.UnderlyingStorageException in project neo4j by neo4j.

the class IdGeneratorImpl method createGenerator.

/**
     * Creates a new id generator.
     *
     * @param fileName The name of the id generator
     * @param throwIfFileExists if {@code true} will cause an {@link UnderlyingStorageException} to be thrown if
     * the file already exists. if {@code false} will truncate the file writing the header in it.
     */
public static void createGenerator(FileSystemAbstraction fs, File fileName, long highId, boolean throwIfFileExists) {
    // sanity checks
    if (fs == null) {
        throw new IllegalArgumentException("Null filesystem");
    }
    if (fileName == null) {
        throw new IllegalArgumentException("Null filename");
    }
    if (throwIfFileExists && fs.fileExists(fileName)) {
        throw new IllegalStateException("Can't create IdGeneratorFile[" + fileName + "], file already exists");
    }
    try (StoreChannel channel = fs.create(fileName)) {
        // write the header
        channel.truncate(0);
        ByteBuffer buffer = ByteBuffer.allocate(HEADER_SIZE);
        buffer.put(CLEAN_GENERATOR).putLong(highId).flip();
        channel.write(buffer);
        channel.force(false);
    } catch (IOException e) {
        throw new UnderlyingStorageException("Unable to create id generator" + fileName, e);
    }
}
Also used : StoreChannel(org.neo4j.io.fs.StoreChannel) IOException(java.io.IOException) UnderlyingStorageException(org.neo4j.kernel.impl.store.UnderlyingStorageException) ByteBuffer(java.nio.ByteBuffer)

Example 8 with UnderlyingStorageException

use of org.neo4j.kernel.impl.store.UnderlyingStorageException 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 9 with UnderlyingStorageException

use of org.neo4j.kernel.impl.store.UnderlyingStorageException in project neo4j by neo4j.

the class IndexUpdaterMap method close.

@Override
public void close() throws UnderlyingStorageException {
    Set<Pair<NewIndexDescriptor, UnderlyingStorageException>> exceptions = null;
    for (Map.Entry<LabelSchemaDescriptor, IndexUpdater> updaterEntry : updaterMap.entrySet()) {
        IndexUpdater updater = updaterEntry.getValue();
        try {
            updater.close();
        } catch (IOException | IndexEntryConflictException e) {
            if (null == exceptions) {
                exceptions = new HashSet<>();
            }
            exceptions.add(Pair.of(NewIndexDescriptorFactory.forSchema(updaterEntry.getKey()), new UnderlyingStorageException(e)));
        }
    }
    clear();
    if (null != exceptions) {
        throw new MultipleUnderlyingStorageExceptions(exceptions);
    }
}
Also used : LabelSchemaDescriptor(org.neo4j.kernel.api.schema_new.LabelSchemaDescriptor) IOException(java.io.IOException) UnderlyingStorageException(org.neo4j.kernel.impl.store.UnderlyingStorageException) HashMap(java.util.HashMap) Map(java.util.Map) IndexEntryConflictException(org.neo4j.kernel.api.exceptions.index.IndexEntryConflictException) IndexUpdater(org.neo4j.kernel.api.index.IndexUpdater) Pair(org.neo4j.helpers.collection.Pair) HashSet(java.util.HashSet) MultipleUnderlyingStorageExceptions(org.neo4j.kernel.impl.store.MultipleUnderlyingStorageExceptions)

Example 10 with UnderlyingStorageException

use of org.neo4j.kernel.impl.store.UnderlyingStorageException in project neo4j by neo4j.

the class FreeIdKeeper method readIdBatch.

/*
     * After this method returns, if there were any entries found, they are placed in the readFromDisk list and the
     * readPosition is updated accordingly.
     */
private void readIdBatch() {
    if (!canReadMoreIdBatches()) {
        return;
    }
    try {
        int howMuchToRead = (int) Math.min(threshold * ID_ENTRY_SIZE, maxReadPosition - readPosition);
        assert howMuchToRead % ID_ENTRY_SIZE == 0 : "reads should happen in multiples of ID_ENTRY_SIZE, instead was " + howMuchToRead;
        ByteBuffer readBuffer = ByteBuffer.allocate(howMuchToRead);
        positionChannel(readPosition);
        int bytesRead = channel.read(readBuffer);
        readPosition += bytesRead;
        assert channel.position() <= maxReadPosition;
        readBuffer.flip();
        assert (bytesRead % ID_ENTRY_SIZE) == 0;
        int idsRead = bytesRead / ID_ENTRY_SIZE;
        for (int i = 0; i < idsRead; i++) {
            long id = readBuffer.getLong();
            if (id != NO_RESULT) {
                readFromDisk.add(id);
            }
        }
    } catch (IOException e) {
        throw new UnderlyingStorageException("Failed reading defragged id batch", e);
    }
}
Also used : IOException(java.io.IOException) UnderlyingStorageException(org.neo4j.kernel.impl.store.UnderlyingStorageException) ByteBuffer(java.nio.ByteBuffer)

Aggregations

UnderlyingStorageException (org.neo4j.kernel.impl.store.UnderlyingStorageException)13 IOException (java.io.IOException)10 ByteBuffer (java.nio.ByteBuffer)4 Test (org.junit.Test)3 HashSet (java.util.HashSet)2 Map (java.util.Map)2 IndexEntryConflictException (org.neo4j.kernel.api.exceptions.index.IndexEntryConflictException)2 File (java.io.File)1 UncheckedIOException (java.io.UncheckedIOException)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 Iterator (java.util.Iterator)1 List (java.util.List)1 Set (java.util.Set)1 Function (java.util.function.Function)1 Collectors.toSet (java.util.stream.Collectors.toSet)1 Stream (java.util.stream.Stream)1 Nonnull (javax.annotation.Nonnull)1 Matchers.hasItems (org.hamcrest.Matchers.hasItems)1 Matchers.not (org.hamcrest.Matchers.not)1