public synchronized HAResourceCounter getHACounter(final Long resourceId, final HAResource.ResourceType resourceType) { final String key = resourceCounterKey(resourceId, resourceType); if (!haCounterMap.containsKey(key)) { haCounterMap.put(key, new HAResourceCounter()); } return haCounterMap.get(key); }
public synchronized void processResult(boolean result, Throwable t) { final HAConfig haConfig = getHaConfig(); final HAResourceCounter counter = haManager.getHACounter(haConfig.getResourceId(), haConfig.getResourceType()); if (t != null && t instanceof HACheckerException) { haManager.transitionHAState(HAConfig.Event.Ineligible, getHaConfig()); counter.resetActivityCounter(); return; } counter.incrActivityCounter(!result); if (counter.getActivityCheckCounter() < maxActivityChecks) { haManager.transitionHAState(HAConfig.Event.TooFewActivityCheckSamples, haConfig); return; } if (counter.hasActivityThresholdExceeded(activityCheckFailureRatio)) { haManager.transitionHAState(HAConfig.Event.ActivityCheckFailureOverThresholdRatio, haConfig); } else { if (haManager.transitionHAState(HAConfig.Event.ActivityCheckFailureUnderThresholdRatio, haConfig)) { counter.markResourceDegraded(); } } counter.resetActivityCounter(); } }
if (counter.canPerformActivityCheck((Long)(haProvider.getConfigValue(HAProviderConfig.MaxActivityCheckInterval, resource)))) { transitionHAState(HAConfig.Event.PerformActivityCheck, haConfig); if (counter.canRecheckActivity((Long)(haProvider.getConfigValue(HAProviderConfig.MaxDegradedWaitTimeout, resource)))) { transitionHAState(HAConfig.Event.PeriodicRecheckResourceActivity, haConfig); if (counter.getRecoveryCounter() >= (Long) (haProvider.getConfigValue(HAProviderConfig.MaxRecoveryAttempts, resource))) { transitionHAState(HAConfig.Event.RecoveryOperationThresholdExceeded, haConfig); } else { counter.markRecoveryStarted(); if (counter.canExitRecovery((Long)(haProvider.getConfigValue(HAProviderConfig.RecoveryWaitTimeout, resource)))) { if (transitionHAState(HAConfig.Event.RecoveryWaitPeriodTimeout, haConfig)) { counter.markRecoveryCompleted(); if (haConfig.getState() == HAConfig.HAState.Fencing && counter.canAttemptFencing()) { transitionHAState(HAConfig.Event.RetryFencing, haConfig);
HAProviderConfig.ActivityCheckTimeout, activityCheckExecutor, counter.getSuspectTimeStamp())); activityCheckExecutor.submit(job); if (counter.getRecoveryCounter() >= (Long) (haProvider.getConfigValue(HAProviderConfig.MaxRecoveryAttempts, resource))) { return false; HAProviderConfig.RecoveryTimeout, recoveryExecutor)); final Future<Boolean> recoveryFuture = recoveryExecutor.submit(task); counter.setRecoveryFuture(recoveryFuture); HAProviderConfig.FenceTimeout, fenceExecutor)); final Future<Boolean> fenceFuture = fenceExecutor.submit(task); counter.setFenceFuture(fenceFuture);