This is an automated email from the ASF dual-hosted git repository. dahn pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/master by this push: new cc2c6e9 Improve logs on HAManagerImpl (#4707) cc2c6e9 is described below commit cc2c6e91cbe0113a78b9dfa0d894eb37e9276b06 Author: Daniel Augusto Veronezi Salvador <38945620+gutoveron...@users.noreply.github.com> AuthorDate: Mon May 10 05:22:47 2021 -0300 Improve logs on HAManagerImpl (#4707) Co-authored-by: Daniel Augusto Veronezi Salvador <dan...@scclouds.com.br> --- .../org/apache/cloudstack/ha/HAManagerImpl.java | 80 ++++++++++++---------- 1 file changed, 44 insertions(+), 36 deletions(-) diff --git a/server/src/main/java/org/apache/cloudstack/ha/HAManagerImpl.java b/server/src/main/java/org/apache/cloudstack/ha/HAManagerImpl.java index ab269b1..947e452 100644 --- a/server/src/main/java/org/apache/cloudstack/ha/HAManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/ha/HAManagerImpl.java @@ -156,9 +156,8 @@ public final class HAManagerImpl extends ManagerBase implements HAManager, Clust if (result) { final String message = String.format("Transitioned host HA state from:%s to:%s due to event:%s for the host id:%d", currentHAState, nextState, event, haConfig.getResourceId()); - if (LOG.isTraceEnabled()) { - LOG.trace(message); - } + LOG.debug(message); + if (nextState == HAConfig.HAState.Recovering || nextState == HAConfig.HAState.Fencing || nextState == HAConfig.HAState.Fenced) { ActionEventUtils.onActionEvent(CallContext.current().getCallingUserId(), CallContext.current().getCallingAccountId(), Domain.ROOT_DOMAIN, EventTypes.EVENT_HA_STATE_TRANSITION, message); @@ -166,9 +165,7 @@ public final class HAManagerImpl extends ManagerBase implements HAManager, Clust } return result; } catch (NoTransitionException e) { - if (LOG.isTraceEnabled()) { - LOG.trace("Unable to find next HA state for current HA state: " + currentHAState + " for event: " + event + " for host" + haConfig.getResourceId()); - } + LOG.warn(String.format("Unable to find next HA state for current HA state=[%s] for event=[%s] for host=[%s].", currentHAState, event, haConfig.getResourceId()), e); } return false; } @@ -284,8 +281,21 @@ public final class HAManagerImpl extends ManagerBase implements HAManager, Clust public void validateHAProviderConfigForResource(final Long resourceId, final HAResource.ResourceType resourceType, final HAProvider<HAResource> haProvider) { if (HAResource.ResourceType.Host.equals(resourceType)) { final Host host = hostDao.findById(resourceId); - if (host.getHypervisorType() == null || haProvider.resourceSubType() == null || !host.getHypervisorType().toString().equals(haProvider.resourceSubType().toString())) { - throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Incompatible haprovider provided for the resource of hypervisor type:" + host.getHypervisorType()); + + if (host == null) { + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, String.format("Resource [%s] not found.", resourceId)); + } + + if (host.getHypervisorType() == null) { + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, String.format("No hypervisor type provided on resource [%s].", resourceId)); + } + + if (haProvider.resourceSubType() == null) { + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "No hypervisor type provided on haprovider."); + } + + if (!host.getHypervisorType().toString().equals(haProvider.resourceSubType().toString())) { + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, String.format("Incompatible haprovider provided [%s] for the resource [%s] of hypervisor type: [%s].", haProvider.resourceSubType().toString(), host.getId(),host.getHypervisorType())); } } } @@ -298,14 +308,10 @@ public final class HAManagerImpl extends ManagerBase implements HAManager, Clust final HAConfig haConfig = haConfigDao.findHAResource(host.getId(), HAResource.ResourceType.Host); if (haConfig != null) { if (haConfig.getState() == HAConfig.HAState.Fenced) { - if (LOG.isDebugEnabled()){ - LOG.debug("HA: Host is fenced " + host.getId()); - } + LOG.debug(String.format("HA: Host [%s] is fenced.", host.getId())); return false; } - if (LOG.isDebugEnabled()){ - LOG.debug("HA: HOST is alive " + host.getId()); - } + LOG.debug(String.format("HA: Host [%s] is alive.", host.getId())); return true; } throw new Investigator.UnknownVM(); @@ -315,14 +321,10 @@ public final class HAManagerImpl extends ManagerBase implements HAManager, Clust final HAConfig haConfig = haConfigDao.findHAResource(host.getId(), HAResource.ResourceType.Host); if (haConfig != null) { if (haConfig.getState() == HAConfig.HAState.Fenced) { - if (LOG.isDebugEnabled()){ - LOG.debug("HA: Agent is available/suspect/checking Up " + host.getId()); - } + LOG.debug(String.format("HA: Agent [%s] is available/suspect/checking Up.", host.getId())); return Status.Down; } else if (haConfig.getState() == HAConfig.HAState.Degraded || haConfig.getState() == HAConfig.HAState.Recovering || haConfig.getState() == HAConfig.HAState.Fencing) { - if (LOG.isDebugEnabled()){ - LOG.debug("HA: Agent is disconnected " + host.getId()); - } + LOG.debug(String.format("HA: Agent [%s] is disconnected. State: %s, %s.", host.getId(), haConfig.getState(), haConfig.getState().getDescription())); return Status.Disconnected; } return Status.Up; @@ -351,7 +353,7 @@ public final class HAManagerImpl extends ManagerBase implements HAManager, Clust haConfig.setResourceId(resourceId); haConfig.setResourceType(resourceType); if (Strings.isNullOrEmpty(haConfig.getHaProvider())) { - throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "HAProvider is not provided for the resource, failing configuration."); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, String.format("HAProvider is not provided for the resource [%s], failing configuration.", resourceId)); } if (haConfigDao.persist(haConfig) != null) { return true; @@ -364,7 +366,7 @@ public final class HAManagerImpl extends ManagerBase implements HAManager, Clust haConfig.setHaProvider(haProvider); } if (Strings.isNullOrEmpty(haConfig.getHaProvider())) { - throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "HAProvider is not provided for the resource, failing configuration."); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, String.format("HAProvider is not provided for the resource [%s], failing configuration.", resourceId)); } return haConfigDao.update(haConfig.getId(), haConfig); } @@ -381,7 +383,7 @@ public final class HAManagerImpl extends ManagerBase implements HAManager, Clust Preconditions.checkArgument(!Strings.isNullOrEmpty(haProvider)); if (!haProviderMap.containsKey(haProvider.toLowerCase())) { - throw new CloudRuntimeException("Given HA provider does not exist."); + throw new CloudRuntimeException(String.format("Given HA provider [%s] does not exist.", haProvider)); } validateHAProviderConfigForResource(resourceId, resourceType, haProviderMap.get(haProvider.toLowerCase())); return configureHA(resourceId, resourceType, null, haProvider.toLowerCase()); @@ -533,22 +535,21 @@ public final class HAManagerImpl extends ManagerBase implements HAManager, Clust if (oldState != newState || newState == HAConfig.HAState.Suspect || newState == HAConfig.HAState.Checking) { return false; } - if (LOG.isTraceEnabled()) { - LOG.trace("HA state pre-transition:: new state=" + newState + ", old state=" + oldState + ", for resource id=" + haConfig.getResourceId() + ", status=" + status + ", ha config state=" + haConfig.getState()); - } + + LOG.debug(String.format("HA state pre-transition:: new state=[%s], old state=[%s], for resource id=[%s], status=[%s], ha config state=[%s]." , newState, oldState, haConfig.getResourceId(), status, haConfig.getState())); + if (status && haConfig.getState() != newState) { - LOG.warn("HA state pre-transition:: HA state is not equal to transition state, HA state=" + haConfig.getState() + ", new state=" + newState); + LOG.warn(String.format("HA state pre-transition:: HA state is not equal to transition state, HA state=[%s], new state=[%s].", haConfig.getState(), newState)); } return processHAStateChange(haConfig, newState, status); } @Override public boolean postStateTransitionEvent(final StateMachine2.Transition<HAConfig.HAState, HAConfig.Event> transition, final HAConfig haConfig, final boolean status, final Object opaque) { - if (LOG.isTraceEnabled()) { - LOG.trace("HA state post-transition:: new state=" + transition.getToState() + ", old state=" + transition.getCurrentState() + ", for resource id=" + haConfig.getResourceId() + ", status=" + status + ", ha config state=" + haConfig.getState()); - } + LOG.debug(String.format("HA state post-transition:: new state=[%s], old state=[%s], for resource id=[%s], status=[%s], ha config state=[%s].", transition.getToState(), transition.getCurrentState(), haConfig.getResourceId(), status, haConfig.getState())); + if (status && haConfig.getState() != transition.getToState()) { - LOG.warn("HA state post-transition:: HA state is not equal to transition state, HA state=" + haConfig.getState() + ", new state=" + transition.getToState()); + LOG.warn(String.format("HA state post-transition:: HA state is not equal to transition state, HA state=[%s], new state=[%s].", haConfig.getState(), transition.getToState())); } return processHAStateChange(haConfig, transition.getToState(), status); } @@ -605,7 +606,7 @@ public final class HAManagerImpl extends ManagerBase implements HAManager, Clust pollManager.submitTask(new HAManagerBgPollTask()); HAConfig.HAState.getStateMachine().registerListener(this); - LOG.debug("HA manager has been configured"); + LOG.debug("HA manager has been configured."); return true; } @@ -639,12 +640,15 @@ public final class HAManagerImpl extends ManagerBase implements HAManager, Clust private final class HAManagerBgPollTask extends ManagedContextRunnable implements BackgroundPollTask { @Override protected void runInContext() { + HAConfig currentHaConfig = null; + try { - if (LOG.isTraceEnabled()) { - LOG.trace("HA health check task is running..."); - } + LOG.debug("HA health check task is running..."); + final List<HAConfig> haConfigList = new ArrayList<HAConfig>(haConfigDao.listAll()); for (final HAConfig haConfig : haConfigList) { + currentHaConfig = haConfig; + if (haConfig == null) { continue; } @@ -712,7 +716,11 @@ public final class HAManagerImpl extends ManagerBase implements HAManager, Clust } } } catch (Throwable t) { - LOG.error("Error trying to perform health checks in HA manager", t); + if (currentHaConfig != null) { + LOG.error(String.format("Error trying to perform health checks in HA manager [%s].", currentHaConfig.getHaProvider()), t); + } else { + LOG.error("Error trying to perform health checks in HA manager.", t); + } } }