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

Reply via email to