Martin Peřina has uploaded a new change for review. Change subject: core: Make VdsManager.lastUpdate publically accessible ......................................................................
core: Make VdsManager.lastUpdate publically accessible Add public VdsManager.getLastUpdate() method to prevent passing lastUpdate value through VdsEventListener to VdsNotRespondingTreatment. Change-Id: Ie40f0aea7e5d968cfe919c1921684a2eb26176d1 Bug-Url: https://bugzilla.redhat.com/1182510 Signed-off-by: Martin Perina <mper...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsNotRespondingTreatmentCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/FenceVdsActionParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java 5 files changed, 34 insertions(+), 32 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/67/36967/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java index c7289bd..302fbd0 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java @@ -234,7 +234,7 @@ } @Override - public void vdsNotResponding(final VDS vds, final long lastUpdate) { + public void vdsNotResponding(final VDS vds) { ExecutionHandler.updateSpecificActionJobCompleted(vds.getId(), VdcActionType.MaintenanceVds, false); ThreadPoolUtil.execute(new Runnable() { @Override @@ -246,7 +246,6 @@ FenceVdsActionParameters params = new FenceVdsActionParameters( vds.getId(), FenceActionType.Restart); - params.setLastUpdate(lastUpdate); Backend.getInstance().runInternalAction(VdcActionType.VdsNotRespondingTreatment, params, ExecutionHandler.createInternalJobContext()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsNotRespondingTreatmentCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsNotRespondingTreatmentCommand.java index 6227c87..0c66451 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsNotRespondingTreatmentCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsNotRespondingTreatmentCommand.java @@ -32,6 +32,7 @@ import org.ovirt.engine.core.utils.linq.LinqUtils; import org.ovirt.engine.core.utils.linq.Predicate; import org.ovirt.engine.core.vdsbroker.MonitoringStrategyFactory; +import org.ovirt.engine.core.vdsbroker.ResourceManager; /** * @see RestartVdsCommand on why this command is requiring a lock @@ -147,18 +148,7 @@ ).getFencingPolicy(); getParameters().setFencingPolicy(fencingPolicy); - if (fencingPolicy.isSkipFencingIfSDActive()) { - // host storage lease should be renewed each ConfigValues.HostStorageLeaseAliveInterval - // so we need to be sure not to execute fencing before host is non responsive for longer time - long interval = TimeUnit.SECONDS.toMillis( - Config.<Integer>getValue(ConfigValues.HostStorageLeaseAliveCheckingInterval)); - long difference = System.currentTimeMillis() - getParameters().getLastUpdate(); - if (difference < interval) { - int sleepMs = (int)(interval - difference); - log.info("Sleeping {} ms before proceeding with fence execution", sleepMs); - ThreadUtils.sleep(sleepMs); - } - } + waitUntilSkipFencingIfSDActiveAllowed(fencingPolicy.isSkipFencingIfSDActive()); // Make sure that the StopVdsCommand that runs by the RestartVds // don't write over our job, and disrupt marking the job status correctly @@ -252,4 +242,25 @@ auditLogable.setRepeatable(true); AuditLogDirector.log(auditLogable, AuditLogType.VDS_ALERT_FENCE_OPERATION_SKIPPED_BROKEN_CONNECTIVITY); } + + public ResourceManager getResourceManager() { + // TODO: fix when ResourceManager could be injected + return ResourceManager.getInstance(); + } + + private void waitUntilSkipFencingIfSDActiveAllowed(boolean skipFencingIfSDActive) { + if (skipFencingIfSDActive) { + // host storage lease should be renewed each ConfigValues.HostStorageLeaseAliveInterval + // so we need to be sure not to execute fencing before host is non responsive for longer time + long interval = TimeUnit.SECONDS.toMillis( + Config.<Integer>getValue(ConfigValues.HostStorageLeaseAliveCheckingInterval)); + long lastUpdate = getResourceManager().GetVdsManager(getVdsId()).getLastUpdate(); + long difference = System.currentTimeMillis() - lastUpdate; + if (difference < interval) { + int sleepMs = (int)(interval - difference); + log.info("Sleeping {} ms before proceeding with fence execution", sleepMs); + ThreadUtils.sleep(sleepMs); + } + } + } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/FenceVdsActionParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/FenceVdsActionParameters.java index 9aa24fb..e0a5e2e 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/FenceVdsActionParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/FenceVdsActionParameters.java @@ -20,11 +20,6 @@ private FencingPolicy fencingPolicy; - /** - * Number milliseconds since last successful connection to host in monitoring - */ - private long lastUpdate; - public FenceVdsActionParameters() { this(null, FenceActionType.Restart); } @@ -66,13 +61,4 @@ public void setFencingPolicy(FencingPolicy fencingPolicy) { this.fencingPolicy = fencingPolicy; } - - public long getLastUpdate() { - return lastUpdate; - } - - public void setLastUpdate(long lastUpdate) { - this.lastUpdate = lastUpdate; - } - } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java index 81ed161..a41944e 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java @@ -11,7 +11,7 @@ import org.ovirt.engine.core.compat.TransactionScopeOption; public interface IVdsEventListener { - void vdsNotResponding(VDS vds, long lastUpdate); // BLL + void vdsNotResponding(VDS vds); // BLL void vdsNonOperational(Guid vdsId, NonOperationalReason type, boolean logCommand, Guid domainId); // BLL diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java index 47da440..9f5126d 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java @@ -701,9 +701,7 @@ setStatus(VDSStatus.NonResponsive, cachedVds); moveVMsToUnknown(); logHostFailToResponde(ex, timeoutToFence); - ResourceManager.getInstance().getEventListener().vdsNotResponding( - cachedVds, - lastUpdate); + ResourceManager.getInstance().getEventListener().vdsNotResponding(cachedVds); } else { setStatus(VDSStatus.NonResponsive, cachedVds); } @@ -807,6 +805,14 @@ private void setStartTime() { updateStartTime = System.currentTimeMillis(); } + + /** + * Return time of last successful host monitoring communication + */ + public long getLastUpdate() { + return lastUpdate; + } + private void setLastUpdate() { lastUpdate = System.currentTimeMillis(); } -- To view, visit http://gerrit.ovirt.org/36967 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie40f0aea7e5d968cfe919c1921684a2eb26176d1 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Martin Peřina <mper...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches