@Override public void shutdown() { recordAccess.close(); if (isShutdown) { throw new IllegalStateException("Batch inserter already has shutdown"); } isShutdown = true; try { repopulateAllIndexes(); } catch (IOException e) { throw new RuntimeException(e); } neoStore.close(); try { storeLocker.release(); } catch (IOException e) { throw new UnderlyingStorageException("Could not release store lock", e); } msgLog.logMessage( Thread.currentThread() + " Clean shutdown on BatchInserter(" + this + ")", true); msgLog.close(); life.shutdown(); }
BatchInserterImpl( String storeDir, FileSystemAbstraction fileSystem, Map<String, String> stringParams, Iterable<KernelExtensionFactory<?>> kernelExtensions) { rejectAutoUpgrade(stringParams); Map<String, String> params = getDefaultParams(); params.putAll(stringParams); config = StoreFactory.configForStoreDir( new Config(params, GraphDatabaseSettings.class), new File(storeDir)); life = new LifeSupport(); this.fileSystem = fileSystem; this.storeDir = new File(FileUtils.fixSeparatorsInPath(storeDir)); Neo4jJobScheduler jobScheduler = life.add(new Neo4jJobScheduler()); LifecycledPageCache pageCache = life.add(new LifecycledPageCache(fileSystem, jobScheduler, config)); msgLog = StringLogger.loggerDirectory(fileSystem, this.storeDir); logging = new SingleLoggingService(msgLog); storeLocker = new StoreLocker(fileSystem); storeLocker.checkLock(this.storeDir); boolean dump = config.get(GraphDatabaseSettings.dump_configuration); this.idGeneratorFactory = new DefaultIdGeneratorFactory(); Monitors monitors = new Monitors(); StoreFactory sf = new StoreFactory(config, idGeneratorFactory, pageCache, fileSystem, msgLog, monitors); if (dump) { dumpConfiguration(params); } msgLog.logMessage(Thread.currentThread() + " Starting BatchInserter(" + this + ")"); neoStore = sf.newNeoStore(true); if (!neoStore.isStoreOk()) { throw new IllegalStateException(storeDir + " store is not cleanly shutdown."); } neoStore.makeStoreOk(); Token[] indexes = getPropertyKeyTokenStore().getTokens(10000); propertyKeyTokens = new BatchTokenHolder(indexes); labelTokens = new BatchTokenHolder(neoStore.getLabelTokenStore().getTokens(Integer.MAX_VALUE)); Token[] types = getRelationshipTypeStore().getTokens(Integer.MAX_VALUE); relationshipTypeTokens = new BatchTokenHolder(types); indexStore = life.add(new IndexConfigStore(this.storeDir, fileSystem)); schemaCache = new SchemaCache(neoStore.getSchemaStore()); KernelExtensions extensions = life.add( new KernelExtensions( kernelExtensions, config, new DependencyResolverImpl(), UnsatisfiedDependencyStrategies.ignore())); life.start(); SchemaIndexProvider provider = extensions.resolveDependency( SchemaIndexProvider.class, SchemaIndexProvider.HIGHEST_PRIORITIZED_OR_NONE); schemaIndexProviders = new DefaultSchemaIndexProviderMap(provider); labelScanStore = life.add( extensions .resolveDependency( LabelScanStoreProvider.class, LabelScanStoreProvider.HIGHEST_PRIORITIZED) .getLabelScanStore()); actions = new BatchSchemaActions(); // Record access recordAccess = new DirectRecordAccessSet(neoStore); relationshipCreator = new RelationshipCreator( RelationshipLocker.NO_LOCKING, new RelationshipGroupGetter(neoStore.getRelationshipGroupStore()), neoStore.getDenseNodeThreshold()); propertyTraverser = new PropertyTraverser(); propertyCreator = new PropertyCreator(getPropertyStore(), propertyTraverser); propertyDeletor = new PropertyDeleter(getPropertyStore(), propertyTraverser); }
BatchInserterImpl( String storeDir, FileSystemAbstraction fileSystem, Map<String, String> stringParams, Iterable<KernelExtensionFactory<?>> kernelExtensions) { life = new LifeSupport(); this.fileSystem = fileSystem; this.storeDir = new File(FileUtils.fixSeparatorsInPath(storeDir)); rejectAutoUpgrade(stringParams); msgLog = StringLogger.loggerDirectory(fileSystem, this.storeDir); logging = new SingleLoggingService(msgLog); Map<String, String> params = getDefaultParams(); params.put(GraphDatabaseSettings.use_memory_mapped_buffers.name(), Settings.FALSE); params.put(InternalAbstractGraphDatabase.Configuration.store_dir.name(), storeDir); params.putAll(stringParams); storeLocker = new StoreLocker(fileSystem); storeLocker.checkLock(this.storeDir); config = new Config(params, GraphDatabaseSettings.class); boolean dump = config.get(GraphDatabaseSettings.dump_configuration); this.idGeneratorFactory = new DefaultIdGeneratorFactory(); StoreFactory sf = new StoreFactory( config, idGeneratorFactory, new DefaultWindowPoolFactory(), fileSystem, msgLog, null); File store = fixPath(this.storeDir, sf); if (dump) { dumpConfiguration(params); } msgLog.logMessage(Thread.currentThread() + " Starting BatchInserter(" + this + ")"); neoStore = sf.newNeoStore(store); if (!neoStore.isStoreOk()) { throw new IllegalStateException(storeDir + " store is not cleanly shutdown."); } neoStore.makeStoreOk(); Token[] indexes = getPropertyKeyTokenStore().getTokens(10000); propertyKeyTokens = new BatchTokenHolder(indexes); labelTokens = new BatchTokenHolder(neoStore.getLabelTokenStore().getTokens(Integer.MAX_VALUE)); Token[] types = getRelationshipTypeStore().getTokens(Integer.MAX_VALUE); relationshipTypeTokens = new BatchTokenHolder(types); indexStore = life.add(new IndexStore(this.storeDir, fileSystem)); schemaCache = new SchemaCache(neoStore.getSchemaStore()); KernelExtensions extensions = life.add( new KernelExtensions( kernelExtensions, config, new DependencyResolverImpl(), UnsatisfiedDependencyStrategies.ignore())); life.start(); SchemaIndexProvider provider = extensions.resolveDependency( SchemaIndexProvider.class, SchemaIndexProvider.HIGHEST_PRIORITIZED_OR_NONE); schemaIndexProviders = new DefaultSchemaIndexProviderMap(provider); labelScanStore = life.add( extensions .resolveDependency( LabelScanStoreProvider.class, LabelScanStoreProvider.HIGHEST_PRIORITIZED) .getLabelScanStore()); actions = new BatchSchemaActions(); }