Liron Aravot has uploaded a new change for review. Change subject: [wip] core: storage domain failover process never runs ......................................................................
[wip] core: storage domain failover process never runs When blocking connections to all storage domains of pool at once, reconstruct will never success as we don't have a working connection to any domain, each running reconstruct will clear the domain timers, meaning that the domains will never move to be inactive. Basically the behaviour after this patch will be- Successful reconstruct : clear jobs, problematic data and all events from the queue. Failed reconstruct: leave jobs, 'problematic' domains and vds data, leave failover events in the queue. This patch adds the following changes: *Event with the type of DOMAINFAILOVER should be added to the queue when reconstruct runs and also stay in the queue after unsuccessful reconstruct. *MarkPoolInReconstructMode which clears the timers and delete the 'problematic' data should be executed only if the reconstruct command succeeded so that the domains will be able to move to inactive state, I've removed also the no longer parameters and enum classes. Bug-Url: https://bugzilla.redhat.com/912054 Change-Id: Ib1a45098dc4eb2607dd12dabf3c0d526e8bebca7 Signed-off-by: Liron Aravot <lara...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/eventqueue/EventQueueMonitor.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java D backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MarkPoolInReconstructModeVDSCommandParameters.java D backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ReconstructMarkAction.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/MarkPoolInReconstructModeVDSCommand.java 5 files changed, 21 insertions(+), 66 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/37/12237/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/eventqueue/EventQueueMonitor.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/eventqueue/EventQueueMonitor.java index 718d891..32fd2b9 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/eventqueue/EventQueueMonitor.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/eventqueue/EventQueueMonitor.java @@ -69,7 +69,7 @@ if (currentEvent != null) { switch (currentEvent.getEventType()) { case RECOVERY: - if (event.getEventType() == EventType.VDSCONNECTTOPOOL) { + if (event.getEventType() == EventType.VDSCONNECTTOPOOL || event.getEventType() == EventType.DOMAINFAILOVER) { task = addTaskToQueue(event, callable, storagePoolId, isEventShouldBeFirst(event)); } else { log.debugFormat("Current event was skiped because of recovery is running now for pool {0}, event {1}", @@ -77,7 +77,9 @@ } break; case RECONSTRUCT: - if (event.getEventType() == EventType.VDSCONNECTTOPOOL || event.getEventType() == EventType.RECOVERY) { + if (event.getEventType() == EventType.VDSCONNECTTOPOOL + || event.getEventType() == EventType.RECOVERY + || event.getEventType() == EventType.DOMAINFAILOVER) { task = addTaskToQueue(event, callable, storagePoolId, isEventShouldBeFirst(event)); } else { log.debugFormat("Current event was skiped because of reconstruct is running now for pool {0}, event {1}", @@ -185,7 +187,8 @@ new LinkedList<Pair<Event, FutureTask<EventResult>>>(); for (Pair<Event, FutureTask<EventResult>> task : poolsEventsMap.get(storagePoolId)) { EventType eventType = task.getFirst().getEventType(); - if (eventType == EventType.VDSCONNECTTOPOOL || (eventType == EventType.RECOVERY && !result.isSuccess())) { + if (eventType == EventType.VDSCONNECTTOPOOL || + ((eventType == EventType.RECOVERY || eventType == EventType.DOMAINFAILOVER) && !result.isSuccess())) { queue.add(task); } else { log.infoFormat("The following operation {0} was cancelled, because of recosntruct was run before", diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java index 6b78a28..383f81e 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java @@ -8,19 +8,18 @@ import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.action.ReconstructMasterParameters; +import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; +import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; -import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap; -import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.errors.VdcBLLException; import org.ovirt.engine.core.common.errors.VdcBllErrors; import org.ovirt.engine.core.common.vdscommands.ConnectStoragePoolVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.DisconnectStoragePoolVDSCommandParameters; -import org.ovirt.engine.core.common.vdscommands.MarkPoolInReconstructModeVDSCommandParameters; -import org.ovirt.engine.core.common.vdscommands.ReconstructMarkAction; +import org.ovirt.engine.core.common.vdscommands.IrsBaseVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.ReconstructMasterVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.RefreshStoragePoolVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.ResetIrsVDSCommandParameters; @@ -96,10 +95,6 @@ return stopSpm(); } - // Pause the timers for the domain error handling - runVdsCommand(VDSCommandType.MarkPoolInReconstructMode, - new MarkPoolInReconstructModeVDSCommandParameters( - getStoragePoolId().getValue(), ReconstructMarkAction.ClearJobs)); boolean commandSucceeded = stopSpm(); final List<String> disconnectPoolFormats = Config.<List<String>> GetValue( @@ -149,13 +144,14 @@ } setSucceeded(!_isLastMaster && reconstructOpSucceeded); } finally { - // reset cache and mark reconstruct for pool as finished - Backend.getInstance() - .getResourceManager() - .RunVdsCommand( - VDSCommandType.MarkPoolInReconstructMode, - new MarkPoolInReconstructModeVDSCommandParameters(getStoragePoolId() - .getValue(), ReconstructMarkAction.ClearCache)); + if (getSucceeded()) { + Backend.getInstance() + .getResourceManager() + .RunVdsCommand( + VDSCommandType.MarkPoolInReconstructMode, + new IrsBaseVDSCommandParameters(getStoragePoolId() + .getValue())); + } } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MarkPoolInReconstructModeVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MarkPoolInReconstructModeVDSCommandParameters.java deleted file mode 100644 index af91fe4..0000000 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MarkPoolInReconstructModeVDSCommandParameters.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.ovirt.engine.core.common.vdscommands; - -import org.ovirt.engine.core.compat.Guid; - -public class MarkPoolInReconstructModeVDSCommandParameters extends IrsBaseVDSCommandParameters { - - private ReconstructMarkAction reconstructMarkAction; - - public MarkPoolInReconstructModeVDSCommandParameters(Guid storagePoolId, ReconstructMarkAction reconstructMarkAction) { - super(storagePoolId); - this.reconstructMarkAction = reconstructMarkAction; - } - - // Setters and Getters - - public ReconstructMarkAction getReconstructMarkAction() { - return reconstructMarkAction; - } - - public void setReconstructMarkAction(ReconstructMarkAction reconstructMarkAction) { - this.reconstructMarkAction = reconstructMarkAction; - } - - @Override - public String toString() { - return String.format("%s, reconstructMarkAction = %s", super.toString(), getReconstructMarkAction()); - } -} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ReconstructMarkAction.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ReconstructMarkAction.java deleted file mode 100644 index a750602..0000000 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ReconstructMarkAction.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.ovirt.engine.core.common.vdscommands; - -public enum ReconstructMarkAction { - - ClearJobs, - ClearCache; - -} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/MarkPoolInReconstructModeVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/MarkPoolInReconstructModeVDSCommand.java index bbd12da..a81d90b 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/MarkPoolInReconstructModeVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/MarkPoolInReconstructModeVDSCommand.java @@ -1,10 +1,10 @@ package org.ovirt.engine.core.vdsbroker.irsbroker; -import org.ovirt.engine.core.common.vdscommands.MarkPoolInReconstructModeVDSCommandParameters; +import org.ovirt.engine.core.common.vdscommands.IrsBaseVDSCommandParameters; import org.ovirt.engine.core.utils.log.Log; import org.ovirt.engine.core.utils.log.LogFactory; -public class MarkPoolInReconstructModeVDSCommand<P extends MarkPoolInReconstructModeVDSCommandParameters> +public class MarkPoolInReconstructModeVDSCommand<P extends IrsBaseVDSCommandParameters> extends IrsBrokerCommand<P> { public MarkPoolInReconstructModeVDSCommand(P parameters) { @@ -15,16 +15,8 @@ protected void executeVDSCommand() { try { IrsProxyData proxyData = getCurrentIrsProxyData(); - switch (getParameters().getReconstructMarkAction()) { - case ClearJobs: - proxyData.clearPoolTimers(); - break; - case ClearCache: - proxyData.clearCache(); - break; - default: - break; - } + proxyData.clearPoolTimers(); + proxyData.clearCache(); } catch (Exception e) { log.error("Could not change timers for pool " + getParameters().getStoragePoolId(), e); } -- To view, visit http://gerrit.ovirt.org/12237 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib1a45098dc4eb2607dd12dabf3c0d526e8bebca7 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Liron Aravot <lara...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches