Federico Simoncelli has uploaded a new change for review.

Change subject: core: prevent maintenance when domain is sill in use
......................................................................

core: prevent maintenance when domain is sill in use

Change-Id: I55cd5aa6a6dc32f374a4bb21b159d3cb30da65f5
Signed-off-by: Federico Simoncelli <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommandTest.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommandTest.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommandTest.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommandTest.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomainStatus.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/StorageDomainStatusColumn.java
13 files changed, 192 insertions(+), 26 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/45/22045/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommand.java
index 693c40e..3787421 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommand.java
@@ -142,10 +142,11 @@
         boolean returnValue;
         if (isInternalExecution()) {
             returnValue = 
checkStorageDomainStatus(StorageDomainStatus.InActive, 
StorageDomainStatus.Unknown,
-                    StorageDomainStatus.Locked, 
StorageDomainStatus.Maintenance);
+                    StorageDomainStatus.Locked, 
StorageDomainStatus.Maintenance,
+                    StorageDomainStatus.MovingToMaintenance);
         } else {
             returnValue = 
checkStorageDomainStatus(StorageDomainStatus.InActive, 
StorageDomainStatus.Unknown,
-                    StorageDomainStatus.Maintenance);
+                    StorageDomainStatus.Maintenance, 
StorageDomainStatus.MovingToMaintenance);
         }
         return returnValue;
     }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
index b529f05..af0de96 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
@@ -107,7 +107,8 @@
                 return false;
             }
 
-            if (!filterDomainsByStatus(domains, 
StorageDomainStatus.Locked).isEmpty()) {
+            if (!filterDomainsByStatus(domains, 
StorageDomainStatus.Locked).isEmpty()
+                    || !filterDomainsByStatus(domains, 
StorageDomainStatus.MovingToMaintenance).isEmpty()) {
                 
addCanDoActionMessage(VdcBllMessages.ERROR_CANNOT_DEACTIVATE_MASTER_WITH_LOCKED_DOMAINS);
                 return false;
             }
@@ -167,7 +168,8 @@
                         (new 
StoragePoolIsoMapId(getParameters().getStorageDomainId(),
                                 getParameters().getStoragePoolId()));
         map.setStatus(StorageDomainStatus.Unknown);
-        changeStorageDomainStatusInTransaction(map, 
StorageDomainStatus.Locked);
+        changeStorageDomainStatusInTransaction(map,
+                getParameters().isInactive() ? StorageDomainStatus.Locked : 
StorageDomainStatus.MovingToMaintenance);
         proceedStorageDomainTreatmentByDomainType(false);
 
         if (_isLastMaster) {
@@ -227,8 +229,6 @@
             public Object runInTransaction() {
                 if (getParameters().isInactive()) {
                     map.setStatus(StorageDomainStatus.InActive);
-                } else {
-                    map.setStatus(StorageDomainStatus.Maintenance);
                 }
                 getStoragePoolIsoMapDAO().updateStatus(map.getId(), 
map.getStatus());
                 if (!Guid.Empty.equals(_newMasterStorageDomainId)) {
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 67d6f8c..b2fecf3 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
@@ -51,8 +51,8 @@
     }
 
     private boolean checkIsDomainLocked(StoragePoolIsoMap domainMap) {
-        if (StorageDomainStatus.Locked == domainMap.getStatus()) {
-            addInvalidSDStatusMessage(StorageDomainStatus.Locked);
+        if (domainMap.getStatus().isLocked()) {
+            addInvalidSDStatusMessage(domainMap.getStatus());
             return true;
         }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
index 2327d76..8583a0f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
@@ -366,7 +366,7 @@
         domainsList = LinqUtils.filter(domainsList, new 
Predicate<StorageDomain>() {
             @Override
             public boolean eval(StorageDomain dom) {
-                return (dom.getStatus() == StorageDomainStatus.Active || 
dom.getStatus() == StorageDomainStatus.Locked);
+                return (dom.getStatus() == StorageDomainStatus.Active || 
dom.getStatus().isLocked());
             }
         });
         return domainsList;
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
index 19a7d37..8590f4a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
@@ -164,7 +164,7 @@
             valid = Arrays.asList(statuses).contains(status);
         }
         if (!valid) {
-            if (status == StorageDomainStatus.Locked) {
+            if (status.isLocked()) {
                 return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_OBJECT_LOCKED);
             }
             addStorageDomainStatusIllegalMessage();
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommandTest.java
index 2e9cd27..c4ac393 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommandTest.java
@@ -95,6 +95,16 @@
     }
 
     @Test
+    public void internalMovingToMaintenanceAllowed() {
+        internalActionAllowed(StorageDomainStatus.MovingToMaintenance);
+    }
+
+    @Test
+    public void nonInternalMovingToMaintenanceAllowed() {
+        nonInternalActionAllowed(StorageDomainStatus.MovingToMaintenance);
+    }
+
+    @Test
     public void nonActiveVdsDisallowed() {
         testNonActiveVdsExecution(StorageDomainStatus.Maintenance);
         canDoActionFails();
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommandTest.java
index 2160dca..2fcc0a0 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommandTest.java
@@ -71,7 +71,6 @@
 
         
doReturn(mock(IStorageHelper.class)).when(cmd).getStorageHelper(any(StorageDomain.class));
         doReturn(dbFacade).when(cmd).getDbFacade();
-
         when(dbFacade.getStoragePoolIsoMapDao()).thenReturn(isoMapDAO);
         when(dbFacade.getStoragePoolDao()).thenReturn(storagePoolDAO);
         when(dbFacade.getVdsDao()).thenReturn(vdsDAO);
@@ -80,7 +79,6 @@
         when(storagePoolDAO.get(any(Guid.class))).thenReturn(new 
StoragePool());
         when(isoMapDAO.get(any(StoragePoolIsoMapId.class))).thenReturn(map);
         when(storageDomainDAO.getForStoragePool(any(Guid.class), 
any(Guid.class))).thenReturn(new StorageDomain());
-
         doReturn(backendInternal).when(cmd).getBackend();
         when(vdsDAO.getAllForStoragePoolAndStatus(any(Guid.class), 
any(VDSStatus.class))).thenReturn(new ArrayList<VDS>());
         
when(backendInternal.getResourceManager()).thenReturn(vdsBrokerFrontend);
@@ -93,6 +91,6 @@
 
         cmd.setCompensationContext(mock(CompensationContext.class));
         cmd.executeCommand();
-        assertTrue(map.getStatus() == StorageDomainStatus.Maintenance);
+        assertTrue(map.getStatus() == StorageDomainStatus.MovingToMaintenance);
     }
 }
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommandTest.java
index 1b54c40..d55ad09 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommandTest.java
@@ -14,12 +14,20 @@
     public ReconstructMasterDomainCommand<ReconstructMasterParameters> cmd =
             new ReconstructMasterDomainCommand(new 
ReconstructMasterParameters());
 
-    @Test
-    public void testAddInvalidSDStatusMessage() {
-        StorageDomainStatus status = StorageDomainStatus.Locked;
+    private void testAddInvalidSDStatusMessage(StorageDomainStatus status) {
         cmd.addInvalidSDStatusMessage(status);
         List<String> messages = cmd.getReturnValue().getCanDoActionMessages();
         assertEquals(messages.get(0), 
VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_STATUS_ILLEGAL2.toString());
         assertEquals(messages.get(1), String.format("$status %1$s", status));
     }
+
+    @Test
+    public void testAddInvalidSDStatusMessageLocked() {
+        testAddInvalidSDStatusMessage(StorageDomainStatus.Locked);
+    }
+
+    @Test
+    public void testAddInvalidSDStatusMessageMovingToMaintenance() {
+        testAddInvalidSDStatusMessage(StorageDomainStatus.MovingToMaintenance);
+    }
 }
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommandTest.java
index 5940bed..26e6c08 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommandTest.java
@@ -40,33 +40,41 @@
         assertTrue(!listReturned.isEmpty());
     }
 
-    /**
-     * Test when there is locked domain is in the Data Center.
-     */
-    @Test
-    public void testLockedDomainInList() {
+    private void testBusyDomainInList(StorageDomainStatus status) {
         StoragePoolParametersBase param = new StoragePoolParametersBase();
         RemoveStoragePoolCommand<StoragePoolParametersBase> cmd = 
createCommand(param);
         List<StorageDomain> domainsList = new ArrayList<StorageDomain>();
         StorageDomain tempStorageDomains = new StorageDomain();
-        tempStorageDomains.setStatus(StorageDomainStatus.Locked);
+        tempStorageDomains.setStatus(status);
         domainsList.add(tempStorageDomains);
         List<StorageDomain> listReturned = 
cmd.getActiveOrLockedDomainList(domainsList);
         assertTrue(!listReturned.isEmpty());
     }
 
     /**
-     * Test when there is locked domain and active is in the Data Center.
+     * Test removal with locked domain in the Data Center.
      */
     @Test
-    public void testLockedAndActiveDomainInList() {
+    public void testLockedDomainInList() {
+        testBusyDomainInList(StorageDomainStatus.Locked);
+    }
+
+    /**
+     * Test removal with moving to maintenance domain in the Data Center.
+     */
+    @Test
+    public void testMovingToMaintenanceDomainInList() {
+        testBusyDomainInList(StorageDomainStatus.MovingToMaintenance);
+    }
+
+    private void testBusyAndActiveDomainInList(StorageDomainStatus status) {
         StoragePoolParametersBase param = new StoragePoolParametersBase();
         RemoveStoragePoolCommand<StoragePoolParametersBase> cmd = 
createCommand(param);
         List<StorageDomain> domainsList = new ArrayList<StorageDomain>();
 
         // Add first locked storage
         StorageDomain tempStorageDomains = new StorageDomain();
-        tempStorageDomains.setStatus(StorageDomainStatus.Locked);
+        tempStorageDomains.setStatus(status);
         domainsList.add(tempStorageDomains);
 
         // Add second active storage
@@ -78,6 +86,22 @@
     }
 
     /**
+     * Test removal with locked and active domains in the Data Center.
+     */
+    @Test
+    public void testLockedAndActiveDomainInList() {
+        testBusyAndActiveDomainInList(StorageDomainStatus.Locked);
+    }
+
+    /**
+     * Test removal with moving to maintenance and active domains in the Data 
Center.
+     */
+    @Test
+    public void testMovingToMaintenanceAndActiveDomainInList() {
+        testBusyAndActiveDomainInList(StorageDomainStatus.MovingToMaintenance);
+    }
+
+    /**
      * Test when there is in active domain.
      */
     @Test
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomainStatus.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomainStatus.java
index d7def9c..3ae56c4 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomainStatus.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomainStatus.java
@@ -7,7 +7,8 @@
     Active,
     InActive,
     Locked,
-    Maintenance;
+    Maintenance,
+    MovingToMaintenance;
 
     public int getValue() {
         return this.ordinal();
@@ -17,4 +18,7 @@
         return values()[value];
     }
 
+    public boolean isLocked() {
+        return this == Locked || this == MovingToMaintenance;
+    }
 }
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 234b731..2d85cb6 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
@@ -279,6 +279,8 @@
 
                 }
 
+                IrsBrokerCommand.updateVdsDomainsVisibility(tmpVds, 
domainsList);
+
                 // Now update the status of domains, this code should not be in
                 // synchronized part of code
                 if (domainsList != null) {
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java
index c446afc..25beaf1 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java
@@ -103,6 +103,13 @@
         }
     }
 
+    public static void updateVdsDomainsVisibility(VDS vds, 
ArrayList<VDSDomainsData> vdsDomainData) {
+        IrsProxyData proxy = _irsProxyData.get(vds.getStoragePoolId());
+        if (proxy != null) {
+            proxy.updateDomainsVisibility(vds, vdsDomainData);
+        }
+    }
+
     public static List<Guid> fetchDomainsReportedAsProblematic(Guid 
storagePoolId, List<VDSDomainsData> vdsDomainsData) {
         IrsProxyData proxy = _irsProxyData.get(storagePoolId);
         if (proxy != null) {
@@ -1001,6 +1008,117 @@
             mCurrentVdsId = null;
         }
 
+        // key: domain id, value: set of vds ids
+        private final Map<Guid, HashSet<Guid>> _domainsVisibility = new 
ConcurrentHashMap<>();
+
+        public void updateDomainsVisibility(VDS vds, ArrayList<VDSDomainsData> 
domainsDataList) {
+            // Step 1: if the host is not Up remove it from all the entries in 
the _domainsVisibility
+            if (vds.getStatus() == VDSStatus.Maintenance) {
+                for (HashSet<Guid> domainHostsSet : 
_domainsVisibility.values()) {
+                    if (domainHostsSet.contains(vds.getId())) {
+                        log.infoFormat("Removing domain in maintenance {0} 
from the domain visibility map",
+                                vds.getName());
+                        domainHostsSet.remove(vds.getId());
+                    }
+                }
+                return; // do not process the domainsDataList
+            } else if (domainsDataList == null) {
+                return; // skipping, no data to process
+            }
+
+            Map<Guid, VDSDomainsData> dataDomainMap = new HashMap<>();
+            for (VDSDomainsData domainsData : domainsDataList) {
+                dataDomainMap.put(domainsData.getDomainId(), domainsData);
+            }
+
+            Map<Guid, StorageDomain> poolDomainMap = new HashMap<>();
+            for (StorageDomain poolDomain :
+                    
DbFacade.getInstance().getStorageDomainDao().getAllForStoragePool(_storagePoolId))
 {
+                poolDomainMap.put(poolDomain.getId(), poolDomain);
+            }
+
+            // Step 2: remove vds from each domain it didn't report (and that 
is not problematic)
+            for (VDSDomainsData domainData : dataDomainMap.values()) {
+                HashSet<Guid> domainHostsSet;
+
+                domainHostsSet = 
_domainsVisibility.get(domainData.getDomainId());
+                if (domainHostsSet == null) {
+                    log.infoFormat("Adding the domain {0} to the domain 
visibility map",
+                            domainData.getDomainId());
+                    domainHostsSet = new HashSet<>();
+                    _domainsVisibility.put(domainData.getDomainId(), 
domainHostsSet);
+                }
+
+                if (!domainHostsSet.contains(vds.getId()) && 
!isDomainReportedAsProblematic(domainData, false)) {
+                    log.infoFormat("Adding a new VDS {0} to the visibility map 
for domain {1}",
+                            vds.getName(), domainData.getDomainId());
+                    domainHostsSet.add(vds.getId());
+                }
+            }
+
+            // Step 3: remove vds from each domain it didn't report (or that 
is problematic)
+            for (StorageDomain poolDomain : poolDomainMap.values()) {
+                VDSDomainsData domainData = 
dataDomainMap.get(poolDomain.getId());
+
+                if (domainData == null || 
isDomainReportedAsProblematic(domainData, false)) {
+                    HashSet<Guid> domainHostsSet = 
_domainsVisibility.get(poolDomain.getId());
+                    if (domainHostsSet != null && 
domainHostsSet.contains(vds.getId())) {
+                        log.infoFormat("Removing VDS {0} from the visibility 
map of domain {1}",
+                                vds.getName(), poolDomain.getId());
+                        domainHostsSet.remove(vds.getId());
+                    }
+                }
+            }
+
+            // Step 4: check if any domain can be removed from the map 
(detached and not reported by any vds)
+            for (Guid storageDomainId : _domainsVisibility.keySet()) {
+                if (!poolDomainMap.containsKey(storageDomainId)) {
+                    // TODO: check that there are not vds in the HashSet
+                    log.infoFormat("Removing domain {0} from the visibility 
map");
+                    _domainsVisibility.remove(storageDomainId);
+                }
+            }
+
+            // Step 5: try to synchronize the vds domain visibility when needed
+            syncVdsDomainVisibility(vds, dataDomainMap);
+
+            // Step 6: move the relevant domains to maintenance when needed
+            moveDomainsToMaintenance();
+        }
+
+        private void syncVdsDomainVisibility(VDS vds, Map<Guid, 
VDSDomainsData> dataDomainMap) {
+            boolean refreshNeeded = false;
+
+            for (StorageDomain poolDomain :
+                    
DbFacade.getInstance().getStorageDomainDao().getAllForStoragePool(_storagePoolId))
 {
+                VDSDomainsData domainData = 
dataDomainMap.get(poolDomain.getId());
+                if ((domainData == null && poolDomain.getStatus() == 
StorageDomainStatus.Active)
+                        || (domainData != null && poolDomain.getStatus() == 
StorageDomainStatus.Maintenance)) {
+                    refreshNeeded = true;
+                    break;
+                }
+            }
+
+            if (refreshNeeded) {
+                // ResourceManager.getInstance().runVdsCommand(
+                //        VDSCommandType.RefreshStoragePool, new 
RefreshStoragePoolVDSCommandParameters(
+                //            vds.getId(), _storagePoolId, ...
+            }
+        }
+
+        private void moveDomainsToMaintenance() {
+            for (StorageDomain poolDomain :
+                    
DbFacade.getInstance().getStorageDomainDao().getAllForStoragePool(_storagePoolId))
 {
+                if (poolDomain.getStatus() != 
StorageDomainStatus.MovingToMaintenance ||
+                        !_domainsVisibility.get(poolDomain.getId()).isEmpty()) 
{
+                    continue;
+                }
+                log.infoFormat("Moving domain {0} to maintenance", 
poolDomain.getId());
+                DbFacade.getInstance().getStoragePoolIsoMapDao().updateStatus(
+                        poolDomain.getStoragePoolIsoMapData().getId(), 
StorageDomainStatus.Maintenance);
+            }
+        }
+
         private final Map<Guid, HashSet<Guid>> _domainsInProblem = new 
ConcurrentHashMap<Guid, HashSet<Guid>>();
         private final Map<Guid, String> _timers = new HashMap<Guid, String>();
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/StorageDomainStatusColumn.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/StorageDomainStatusColumn.java
index d4392c3..ca35614 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/StorageDomainStatusColumn.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/StorageDomainStatusColumn.java
@@ -24,6 +24,7 @@
         case Uninitialized:
             return getApplicationResources().unconfiguredImage();
         case Locked:
+        case MovingToMaintenance:
             return getApplicationResources().lockImage();
         default:
             return getApplicationResources().downImage();


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I55cd5aa6a6dc32f374a4bb21b159d3cb30da65f5
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Federico Simoncelli <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to