Liron Aravot has uploaded a new change for review.

Change subject: core: automatic reconstruct shouldn't abort user initiated 
recovery
......................................................................

core: automatic reconstruct shouldn't abort user initiated recovery

Automatic engine timers and different commands might trigger automated
reconstruct, currently the event queue leave only vds connect operations
in the queue after a run of reconstruct whether it was succesfull or
not.
The following patch leave user initiated reconstructs
(RecoveryStoragePool) in the queue so that it will be executed.

Change-Id: I9423d880a7d10a5bfa917e415fe41651f9d7e7f1
Bug-Url: https://bugzilla.redhat.com/888259
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/RecoveryStoragePoolCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/eventqueue/EventType.java
3 files changed, 8 insertions(+), 6 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/49/10549/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 329471a..d57dea1 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
@@ -71,7 +71,7 @@
             if (currentEvent != null) {
                 switch (currentEvent.getEventType()) {
                 case RECONSTRUCT:
-                    if (event.getEventType() == EventType.VDSCONNECTTOPOOL) {
+                    if (event.getEventType() == EventType.VDSCONNECTTOPOOL || 
event.getEventType() == EventType.RECOVERY) {
                         task = addTaskToQueue(event, callable, storagePoolId);
                     } else {
                         log.debugFormat("Current event was skiped because of 
reconstruct is running now for pool {0}, event {1}",
@@ -156,18 +156,19 @@
                     if (futureResult.get() == null) {
                         EventResult result = pair.getSecond().get();
                         if (result != null && result.getEventType() == 
EventType.RECONSTRUCT) {
-                            log.infoFormat("Finished reconstruct for pool {0}. 
Clearing all event queue", storagePoolId);
+                            log.infoFormat("Finished reconstruct for pool {0}. 
Clearing event queue", storagePoolId);
                             lock.lock();
                             try {
                                 Queue<Pair<Event, FutureTask<EventResult>>> 
queue =
                                         new LinkedList<Pair<Event, 
FutureTask<EventResult>>>();
                                 for (Pair<Event, FutureTask<EventResult>> task 
: poolsEventsMap.get(storagePoolId)) {
-                                    if (task.getFirst().getEventType() != 
EventType.VDSCONNECTTOPOOL) {
+                                    EventType eventType = 
task.getFirst().getEventType();
+                                    if (eventType == 
EventType.VDSCONNECTTOPOOL || eventType == EventType.RECOVERY) {
+                                        queue.add(task);
+                                    } else {
                                         log.infoFormat("The following 
operation {0} was cancelled, because of recosntruct was run before",
                                                 task.getFirst());
                                         task.getSecond().cancel(true);
-                                    } else {
-                                        queue.add(task);
                                     }
                                 }
                                 if (queue.isEmpty()) {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RecoveryStoragePoolCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RecoveryStoragePoolCommand.java
index 855a97a..850563e 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RecoveryStoragePoolCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RecoveryStoragePoolCommand.java
@@ -113,7 +113,7 @@
                 
getRecoveryStoragePoolParametersData().setStorageDomainId(getStorageDomainId().getValue());
                 EventResult result =
                         ((EventQueue) 
EjbUtils.findBean(BeanType.EVENTQUEUE_MANAGER, 
BeanProxyType.LOCAL)).submitEventSync(new 
Event(getRecoveryStoragePoolParametersData().getStoragePoolId(),
-                                _newMasterStorageDomainId, null, 
EventType.RECONSTRUCT),
+                                _newMasterStorageDomainId, null, 
EventType.RECOVERY),
                                 new Callable<EventResult>() {
                                     @Override
                                     public EventResult call() {
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/eventqueue/EventType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/eventqueue/EventType.java
index 107a376..38b6fa3 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/eventqueue/EventType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/eventqueue/EventType.java
@@ -2,6 +2,7 @@
 
 public enum EventType {
     RECONSTRUCT,
+    RECOVERY,
     DOMAINFAILOVER,
     DOMAINNOTOPERATIONAL,
     VDSSTOARGEPROBLEMS,


--
To view, visit http://gerrit.ovirt.org/10549
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I9423d880a7d10a5bfa917e415fe41651f9d7e7f1
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