/** * Triggers key loading on SENDER if it hadn't started. Delays triggering if invoked multiple times. */ public void triggerLoadingWithDelay() { if (delayedTrigger == null) { Runnable runnable = new Runnable() { @Override public void run() { Operation op = new TriggerLoadIfNeededOperation(mapName); opService.invokeOnPartition(SERVICE_NAME, op, mapNamePartition); } }; delayedTrigger = new CoalescingDelayedTrigger(execService, LOADING_TRIGGER_DELAY, LOADING_TRIGGER_DELAY, runnable); } delayedTrigger.executeWithDelay(); }
/** * invoke delayed execution. * */ public void executeWithDelay() { long now = Clock.currentTimeMillis(); if (delay + now > hardLimit) { scheduleNewExecution(now); } else if (!tryPostponeExecution()) { scheduleNewExecution(now); } }
private void resumeMigrationEventually() { delayedResumeMigrationTrigger.executeWithDelay(); }
MigrationManager(Node node, InternalPartitionServiceImpl service, Lock partitionServiceLock) { this.node = node; this.nodeEngine = node.getNodeEngine(); this.partitionService = service; this.logger = node.getLogger(getClass()); this.partitionServiceLock = partitionServiceLock; migrationPlanner = new MigrationPlanner(node.getLogger(MigrationPlanner.class)); HazelcastProperties properties = node.getProperties(); partitionMigrationInterval = properties.getPositiveMillisOrDefault(GroupProperty.PARTITION_MIGRATION_INTERVAL, 0); partitionMigrationTimeout = properties.getMillis(GroupProperty.PARTITION_MIGRATION_TIMEOUT); fragmentedMigrationEnabled = properties.getBoolean(GroupProperty.PARTITION_FRAGMENTED_MIGRATION_ENABLED); partitionStateManager = partitionService.getPartitionStateManager(); ILogger migrationThreadLogger = node.getLogger(MigrationThread.class); String hzName = nodeEngine.getHazelcastInstance().getName(); migrationThread = new MigrationThread(this, hzName, migrationThreadLogger, migrationQueue); long migrationPauseDelayMs = TimeUnit.SECONDS.toMillis(MIGRATION_PAUSE_DURATION_SECONDS_ON_MIGRATION_FAILURE); ExecutionService executionService = nodeEngine.getExecutionService(); delayedResumeMigrationTrigger = new CoalescingDelayedTrigger( executionService, migrationPauseDelayMs, 2 * migrationPauseDelayMs, new Runnable() { @Override public void run() { resumeMigration(); } }); this.memberHeartbeatTimeoutMillis = properties.getMillis(GroupProperty.MAX_NO_HEARTBEAT_SECONDS); }
private void resumeMigrationEventually() { delayedResumeMigrationTrigger.executeWithDelay(); }
MigrationManager(Node node, InternalPartitionServiceImpl service, Lock partitionServiceLock) { this.node = node; this.nodeEngine = node.getNodeEngine(); this.partitionService = service; this.logger = node.getLogger(getClass()); this.partitionServiceLock = partitionServiceLock; migrationPlanner = new MigrationPlanner(node.getLogger(MigrationPlanner.class)); HazelcastProperties properties = node.getProperties(); partitionMigrationInterval = properties.getPositiveMillisOrDefault(GroupProperty.PARTITION_MIGRATION_INTERVAL, 0); partitionMigrationTimeout = properties.getMillis(GroupProperty.PARTITION_MIGRATION_TIMEOUT); fragmentedMigrationEnabled = properties.getBoolean(GroupProperty.PARTITION_FRAGMENTED_MIGRATION_ENABLED); partitionStateManager = partitionService.getPartitionStateManager(); ILogger migrationThreadLogger = node.getLogger(MigrationThread.class); String hzName = nodeEngine.getHazelcastInstance().getName(); migrationThread = new MigrationThread(this, hzName, migrationThreadLogger, migrationQueue); long migrationPauseDelayMs = TimeUnit.SECONDS.toMillis(MIGRATION_PAUSE_DURATION_SECONDS_ON_MIGRATION_FAILURE); ExecutionService executionService = nodeEngine.getExecutionService(); delayedResumeMigrationTrigger = new CoalescingDelayedTrigger( executionService, migrationPauseDelayMs, 2 * migrationPauseDelayMs, new Runnable() { @Override public void run() { resumeMigration(); } }); this.memberHeartbeatTimeoutMillis = properties.getMillis(GroupProperty.MAX_NO_HEARTBEAT_SECONDS); nodeEngine.getMetricsRegistry().scanAndRegister(stats, "partitions"); }
/** * invoke delayed execution. * */ public void executeWithDelay() { long now = Clock.currentTimeMillis(); if (delay + now > hardLimit) { scheduleNewExecution(now); } else if (!tryPostponeExecution()) { scheduleNewExecution(now); } }
/** * Triggers key loading on SENDER if it hadn't started. Delays triggering if invoked multiple times. */ public void triggerLoadingWithDelay() { if (delayedTrigger == null) { Runnable runnable = new Runnable() { @Override public void run() { Operation op = new TriggerLoadIfNeededOperation(mapName); opService.invokeOnPartition(SERVICE_NAME, op, mapNamePartition); } }; delayedTrigger = new CoalescingDelayedTrigger(execService, LOADING_TRIGGER_DELAY, LOADING_TRIGGER_DELAY, runnable); } delayedTrigger.executeWithDelay(); }
masterTrigger.executeWithDelay();
public InternalPartitionServiceImpl(Node node) { HazelcastProperties properties = node.getProperties(); this.partitionCount = properties.getInteger(GroupProperty.PARTITION_COUNT); this.node = node; this.nodeEngine = node.nodeEngine; this.logger = node.getLogger(InternalPartitionService.class); partitionListener = new InternalPartitionListener(node, this); partitionStateManager = new PartitionStateManager(node, this, partitionListener); migrationManager = new MigrationManager(node, this, lock); replicaManager = new PartitionReplicaManager(node, this); partitionReplicaStateChecker = new PartitionReplicaStateChecker(node, this); partitionEventManager = new PartitionEventManager(node); masterTrigger = new CoalescingDelayedTrigger(nodeEngine.getExecutionService(), TRIGGER_MASTER_DELAY_MILLIS, 2 * TRIGGER_MASTER_DELAY_MILLIS, new Runnable() { @Override public void run() { resetMasterTriggeredFlag(); } }); partitionStateSyncTimeoutHandler = logAllExceptions(logger, EXCEPTION_MSG_PARTITION_STATE_SYNC_TIMEOUT, Level.FINEST); partitionMigrationTimeout = properties.getMillis(GroupProperty.PARTITION_MIGRATION_TIMEOUT); proxy = new PartitionServiceProxy(nodeEngine, this); MetricsRegistry metricsRegistry = nodeEngine.getMetricsRegistry(); metricsRegistry.scanAndRegister(this, "partitions"); metricsRegistry.scanAndRegister(partitionStateManager, "partitions"); metricsRegistry.scanAndRegister(migrationManager, "partitions"); metricsRegistry.scanAndRegister(replicaManager, "partitions"); }
masterTrigger.executeWithDelay();
public InternalPartitionServiceImpl(Node node) { HazelcastProperties properties = node.getProperties(); this.partitionCount = properties.getInteger(GroupProperty.PARTITION_COUNT); this.node = node; this.nodeEngine = node.nodeEngine; this.logger = node.getLogger(InternalPartitionService.class); partitionListener = new InternalPartitionListener(node, this); partitionStateManager = new PartitionStateManager(node, this, partitionListener); migrationManager = new MigrationManager(node, this, lock); replicaManager = new PartitionReplicaManager(node, this); partitionReplicaStateChecker = new PartitionReplicaStateChecker(node, this); partitionEventManager = new PartitionEventManager(node); masterTrigger = new CoalescingDelayedTrigger(nodeEngine.getExecutionService(), TRIGGER_MASTER_DELAY_MILLIS, 2 * TRIGGER_MASTER_DELAY_MILLIS, new Runnable() { @Override public void run() { resetMasterTriggeredFlag(); } }); partitionStateSyncTimeoutHandler = logAllExceptions(logger, EXCEPTION_MSG_PARTITION_STATE_SYNC_TIMEOUT, Level.FINEST); partitionMigrationTimeout = properties.getMillis(GroupProperty.PARTITION_MIGRATION_TIMEOUT); proxy = new PartitionServiceProxy(nodeEngine, this); MetricsRegistry metricsRegistry = nodeEngine.getMetricsRegistry(); metricsRegistry.scanAndRegister(this, "partitions"); metricsRegistry.scanAndRegister(partitionStateManager, "partitions"); metricsRegistry.scanAndRegister(migrationManager, "partitions"); metricsRegistry.scanAndRegister(replicaManager, "partitions"); }