use of org.neo4j.kernel.impl.api.transaction.monitor.TransactionMonitorScheduler in project neo4j by neo4j.
the class Database method buildTransactionMonitor.
private void buildTransactionMonitor(KernelTransactions kernelTransactions, Config config) {
KernelTransactionMonitor kernelTransactionTimeoutMonitor = new KernelTransactionMonitor(kernelTransactions, clock, databaseLogService);
databaseDependencies.satisfyDependency(kernelTransactionTimeoutMonitor);
TransactionMonitorScheduler transactionMonitorScheduler = new TransactionMonitorScheduler(kernelTransactionTimeoutMonitor, scheduler, config.get(GraphDatabaseSettings.transaction_monitor_check_interval).toMillis(), namedDatabaseId.name());
life.add(transactionMonitorScheduler);
}
use of org.neo4j.kernel.impl.api.transaction.monitor.TransactionMonitorScheduler in project neo4j by neo4j.
the class FabricServicesBootstrap method bootstrapServices.
public void bootstrapServices() {
LogProvider internalLogProvider = logService.getInternalLogProvider();
@SuppressWarnings("unchecked") var databaseManager = (DatabaseManager<DatabaseContext>) resolve(DatabaseManager.class);
var fabricDatabaseManager = register(createFabricDatabaseManager(fabricConfig), FabricDatabaseManager.class);
var jobScheduler = resolve(JobScheduler.class);
var monitors = resolve(Monitors.class);
var databaseAccess = createFabricDatabaseAccess();
var remoteExecutor = bootstrapRemoteStack();
var localExecutor = register(new FabricLocalExecutor(fabricConfig, fabricDatabaseManager, databaseAccess), FabricLocalExecutor.class);
var systemNanoClock = resolve(SystemNanoClock.class);
var transactionMonitor = register(new FabricTransactionMonitor(systemNanoClock, logService, fabricConfig), FabricTransactionMonitor.class);
var transactionCheckInterval = config.get(GraphDatabaseSettings.transaction_monitor_check_interval).toMillis();
register(new TransactionMonitorScheduler(transactionMonitor, jobScheduler, transactionCheckInterval, null), TransactionMonitorScheduler.class);
var errorReporter = new ErrorReporter(logService);
register(new TransactionManager(remoteExecutor, localExecutor, errorReporter, fabricConfig, transactionMonitor, securityLog, systemNanoClock, config, availabilityGuard), TransactionManager.class);
var cypherConfig = CypherConfiguration.fromConfig(config);
Supplier<GlobalProcedures> proceduresSupplier = () -> resolve(GlobalProcedures.class);
var catalogManager = register(createCatalogManger(), CatalogManager.class);
var signatureResolver = new SignatureResolver(proceduresSupplier);
var statementLifecycles = new FabricStatementLifecycles(databaseManager, monitors, config, systemNanoClock);
var monitoredExecutor = jobScheduler.monitoredJobExecutor(CYPHER_CACHE);
var cacheFactory = new ExecutorBasedCaffeineCacheFactory(job -> monitoredExecutor.execute(systemJob("Query plan cache maintenance"), job));
var planner = register(new FabricPlanner(fabricConfig, cypherConfig, monitors, cacheFactory, signatureResolver), FabricPlanner.class);
var useEvaluation = register(new UseEvaluation(catalogManager, proceduresSupplier, signatureResolver), UseEvaluation.class);
register(new FabricReactorHooksService(errorReporter), FabricReactorHooksService.class);
Executor fabricWorkerExecutor = jobScheduler.executor(FABRIC_WORKER);
var fabricExecutor = new FabricExecutor(fabricConfig, planner, useEvaluation, catalogManager, internalLogProvider, statementLifecycles, fabricWorkerExecutor);
register(fabricExecutor, FabricExecutor.class);
register(new TransactionBookmarkManagerFactory(fabricDatabaseManager), TransactionBookmarkManagerFactory.class);
}
use of org.neo4j.kernel.impl.api.transaction.monitor.TransactionMonitorScheduler in project neo4j by neo4j.
the class KernelTransactionMonitorSchedulerTest method scheduleRecurringMonitorJobIfConfigured.
@Test
void scheduleRecurringMonitorJobIfConfigured() {
TransactionMonitorScheduler transactionMonitorScheduler = createMonitorScheduler(1);
transactionMonitorScheduler.start();
verify(scheduler).scheduleRecurring(eq(Group.TRANSACTION_TIMEOUT_MONITOR), any(JobMonitoringParams.class), eq(transactionTimeoutMonitor), eq(1L), eq(TimeUnit.MILLISECONDS));
}
use of org.neo4j.kernel.impl.api.transaction.monitor.TransactionMonitorScheduler in project neo4j by neo4j.
the class KernelTransactionMonitorSchedulerTest method doNotScheduleMonitorJobIfDisabled.
@Test
void doNotScheduleMonitorJobIfDisabled() {
TransactionMonitorScheduler transactionMonitorScheduler = createMonitorScheduler(0);
transactionMonitorScheduler.start();
verifyNoInteractions(scheduler);
}
use of org.neo4j.kernel.impl.api.transaction.monitor.TransactionMonitorScheduler in project neo4j by neo4j.
the class KernelTransactionTimeoutMonitorSchedulerTest method startJobTransactionMonitor.
@Test
void startJobTransactionMonitor() {
JobHandle jobHandle = Mockito.mock(JobHandle.class);
when(jobScheduler.scheduleRecurring(eq(Group.TRANSACTION_TIMEOUT_MONITOR), any(JobMonitoringParams.class), eq(transactionMonitor), anyLong(), any(TimeUnit.class))).thenReturn(jobHandle);
TransactionMonitorScheduler monitorScheduler = new TransactionMonitorScheduler(transactionMonitor, jobScheduler, 7, "test database");
monitorScheduler.start();
verify(jobScheduler).scheduleRecurring(eq(Group.TRANSACTION_TIMEOUT_MONITOR), any(JobMonitoringParams.class), eq(transactionMonitor), eq(7L), eq(TimeUnit.MILLISECONDS));
monitorScheduler.stop();
verify(jobHandle).cancel();
}
Aggregations