use of org.neo4j.kernel.impl.store.id.configuration.CommunityIdTypeConfigurationProvider in project neo4j by neo4j.
the class NeoStoreDataSourceRule method getDataSource.
public NeoStoreDataSource getDataSource(File storeDir, FileSystemAbstraction fs, PageCache pageCache, Map<String, String> additionalConfig, DatabaseHealth databaseHealth) {
CommunityIdTypeConfigurationProvider idTypeConfigurationProvider = new CommunityIdTypeConfigurationProvider();
DefaultIdGeneratorFactory idGeneratorFactory = new DefaultIdGeneratorFactory(fs);
NullLogService logService = NullLogService.getInstance();
return getDataSource(storeDir, fs, idGeneratorFactory, idTypeConfigurationProvider, pageCache, additionalConfig, databaseHealth, logService);
}
use of org.neo4j.kernel.impl.store.id.configuration.CommunityIdTypeConfigurationProvider in project neo4j by neo4j.
the class BufferingIdGeneratorFactoryTest method shouldDelayFreeingOfAggressivelyReusedIds.
@Test
public void shouldDelayFreeingOfAggressivelyReusedIds() throws Exception {
// GIVEN
MockedIdGeneratorFactory actual = new MockedIdGeneratorFactory();
ControllableSnapshotSupplier boundaries = new ControllableSnapshotSupplier();
BufferingIdGeneratorFactory bufferingIdGeneratorFactory = new BufferingIdGeneratorFactory(actual, boundaries, IdReuseEligibility.ALWAYS, new CommunityIdTypeConfigurationProvider());
IdGenerator idGenerator = bufferingIdGeneratorFactory.open(new File("doesnt-matter"), 10, IdType.STRING_BLOCK, 0, Integer.MAX_VALUE);
// WHEN
idGenerator.freeId(7);
verifyNoMoreInteractions(actual.get(IdType.STRING_BLOCK));
// after some maintenance and transaction still not closed
bufferingIdGeneratorFactory.maintenance();
verifyNoMoreInteractions(actual.get(IdType.STRING_BLOCK));
// although after transactions have all closed
boundaries.setMostRecentlyReturnedSnapshotToAllClosed();
bufferingIdGeneratorFactory.maintenance();
// THEN
verify(actual.get(IdType.STRING_BLOCK)).freeId(7);
}
use of org.neo4j.kernel.impl.store.id.configuration.CommunityIdTypeConfigurationProvider 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();
}
use of org.neo4j.kernel.impl.store.id.configuration.CommunityIdTypeConfigurationProvider in project neo4j by neo4j.
the class NeoStoreDataSourceTest method logModuleSetUpError.
@Test
public void logModuleSetUpError() throws Exception {
Config config = Config.embeddedDefaults(stringMap());
IdGeneratorFactory idGeneratorFactory = mock(IdGeneratorFactory.class);
Throwable openStoresError = new RuntimeException("Can't set up modules");
doThrow(openStoresError).when(idGeneratorFactory).create(any(File.class), anyLong(), anyBoolean());
CommunityIdTypeConfigurationProvider idTypeConfigurationProvider = new CommunityIdTypeConfigurationProvider();
AssertableLogProvider logProvider = new AssertableLogProvider();
SimpleLogService logService = new SimpleLogService(logProvider, logProvider);
PageCache pageCache = pageCacheRule.getPageCache(fs.get());
NeoStoreDataSource dataSource = dsRule.getDataSource(dir.graphDbDir(), fs.get(), idGeneratorFactory, idTypeConfigurationProvider, pageCache, config, mock(DatabaseHealth.class), logService);
try {
dataSource.start();
fail("Exception expected");
} catch (Exception e) {
assertEquals(openStoresError, e);
}
logProvider.assertAtLeastOnce(inLog(NeoStoreDataSource.class).warn(equalTo("Exception occurred while setting up store modules. Attempting to close things down."), equalTo(openStoresError)));
}
use of org.neo4j.kernel.impl.store.id.configuration.CommunityIdTypeConfigurationProvider in project neo4j by neo4j.
the class BufferingIdGeneratorFactoryTest method shouldDelayFreeingOfAggressivelyReusedIdsConsideringTimeAsWell.
@Test
public void shouldDelayFreeingOfAggressivelyReusedIdsConsideringTimeAsWell() throws Exception {
// GIVEN
MockedIdGeneratorFactory actual = new MockedIdGeneratorFactory();
final FakeClock clock = Clocks.fakeClock();
final long safeZone = MINUTES.toMillis(1);
ControllableSnapshotSupplier boundaries = new ControllableSnapshotSupplier();
BufferingIdGeneratorFactory bufferingIdGeneratorFactory = new BufferingIdGeneratorFactory(actual, boundaries, t -> clock.millis() - t.snapshotTime() >= safeZone, new CommunityIdTypeConfigurationProvider());
IdGenerator idGenerator = bufferingIdGeneratorFactory.open(new File("doesnt-matter"), 10, IdType.STRING_BLOCK, 0, Integer.MAX_VALUE);
// WHEN
idGenerator.freeId(7);
verifyNoMoreInteractions(actual.get(IdType.STRING_BLOCK));
// after some maintenance and transaction still not closed
bufferingIdGeneratorFactory.maintenance();
verifyNoMoreInteractions(actual.get(IdType.STRING_BLOCK));
// although after transactions have all closed
boundaries.setMostRecentlyReturnedSnapshotToAllClosed();
bufferingIdGeneratorFactory.maintenance();
// ... the clock would still say "nope" so no interaction
verifyNoMoreInteractions(actual.get(IdType.STRING_BLOCK));
// then finally after time has passed as well
clock.forward(70, SECONDS);
bufferingIdGeneratorFactory.maintenance();
// THEN
verify(actual.get(IdType.STRING_BLOCK)).freeId(7);
}
Aggregations