private HAProvider<HAResource> validateAndFindHAProvider(final HAConfig haConfig, final HAResource resource) { if (haConfig == null) { return null; } final HAProvider<HAResource> haProvider = haProviderMap.get(haConfig.getHaProvider()); if (haProvider != null && !haProvider.isEligible(resource)) { if (haConfig.getState() != HAConfig.HAState.Ineligible) { transitionHAState(HAConfig.Event.Ineligible, haConfig); } return null; } else if (haConfig.getState() == HAConfig.HAState.Ineligible) { transitionHAState(HAConfig.Event.Eligible, haConfig); } return haProvider; }
@Override @ActionEvent(eventType = EventTypes.EVENT_HA_RESOURCE_DISABLE, eventDescription = "disabling HA for resource") public boolean disableHA(final Long resourceId, final HAResource.ResourceType resourceType) { Preconditions.checkArgument(resourceId != null && resourceId > 0L); Preconditions.checkArgument(resourceType != null); boolean result = configureHA(resourceId, resourceType, false, null); if (result) { transitionHAState(HAConfig.Event.Disabled, haConfigDao.findHAResource(resourceId, resourceType)); purgeHACounter(resourceId, resourceType); } return result; }
transitionHAState(HAConfig.Event.PerformActivityCheck, haConfig); transitionHAState(HAConfig.Event.PeriodicRecheckResourceActivity, haConfig); transitionHAState(HAConfig.Event.RecoveryOperationThresholdExceeded, haConfig); } else { transitionHAState(HAConfig.Event.RetryRecovery, haConfig); counter.markRecoveryStarted(); if (counter.canExitRecovery((Long)(haProvider.getConfigValue(HAProviderConfig.RecoveryWaitTimeout, resource)))) { if (transitionHAState(HAConfig.Event.RecoveryWaitPeriodTimeout, haConfig)) { counter.markRecoveryCompleted(); transitionHAState(HAConfig.Event.RetryFencing, haConfig);
private boolean transitionResourceStateToDisabled(final Partition partition) { List<? extends HAResource> resources; if (partition.partitionType() == Partition.PartitionType.Cluster) { resources = hostDao.findByClusterId(partition.getId()); } else if (partition.partitionType() == Partition.PartitionType.Zone) { resources = hostDao.findByDataCenterId(partition.getId()); } else { return true; } boolean result = true; for (final HAResource resource: resources) { result = result && transitionHAState(HAConfig.Event.Disabled, haConfigDao.findHAResource(resource.getId(), resource.resourceType())); } return result; }
private HAResource validateAndFindHAResource(final HAConfig haConfig) { HAResource resource = null; if (haConfig == null) { return null; } if (haConfig.getResourceType() == HAResource.ResourceType.Host) { final Host host = hostDao.findById(haConfig.getResourceId()); if (host != null && host.getRemoved() != null) { return null; } resource = host; if (haConfig.getState() == null || (resource == null && haConfig.getState() != HAConfig.HAState.Disabled)) { disableHA(haConfig.getResourceId(), haConfig.getResourceType()); return null; } } if (!haConfig.isEnabled() || !isHAEnabledForZone(resource) || !isHAEnabledForCluster(resource)) { if (haConfig.getState() != HAConfig.HAState.Disabled) { if (transitionHAState(HAConfig.Event.Disabled, haConfig) ) { purgeHACounter(haConfig.getResourceId(), haConfig.getResourceType()); } } return null; } else if (haConfig.getState() == HAConfig.HAState.Disabled) { transitionHAState(HAConfig.Event.Enabled, haConfig); } return resource; }