Daniel Erez has uploaded a new change for review.

Change subject: core: sync LUNs on SD status changes to active
......................................................................

core: sync LUNs on SD status changes to active

Ensure invocation of SyncLunsInfoForBlockStorageDomain command
when a storage domain status changes to Active.

* VdsEventListener: added syncLunsInfoForBlockStorageDomain method
* IrsProxyData: perform synchronization when SD status is active:
- Upon getStoragePoolInfo callback and status change detection.
- Upon getVdsStats callback and active domain detection.

Change-Id: I31ccdaaa8f7f982cb38dd8f1c4488d76cba21463
Bug-Url: https://bugzilla.redhat.com/1115845
Signed-off-by: Daniel Erez <de...@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/storage/SyncLunsInfoForBlockStorageDomainCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/locks/LockingGroup.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsProxyData.java
5 files changed, 50 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/92/29692/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 107ac94..a96b463 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
@@ -32,6 +32,7 @@
 import org.ovirt.engine.core.common.action.ReconstructMasterParameters;
 import org.ovirt.engine.core.common.action.SetNonOperationalVdsParameters;
 import org.ovirt.engine.core.common.action.SetStoragePoolStatusParameters;
+import org.ovirt.engine.core.common.action.StorageDomainParametersBase;
 import org.ovirt.engine.core.common.action.StorageDomainPoolParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
@@ -189,6 +190,24 @@
         });
     }
 
+    /**
+     * Synchronize LUN details comprising the storage domain with the DB
+     * 
+     * @param storageDomainId
+     * @param vdsId
+     */
+    @Override
+    public void syncLunsInfoForBlockStorageDomain(final Guid storageDomainId, 
final Guid vdsId) {
+        ThreadPoolUtil.execute(new Runnable() {
+            @Override
+            public void run() {
+                StorageDomainParametersBase parameters = new 
StorageDomainParametersBase(storageDomainId);
+                parameters.setVdsId(vdsId);
+                
Backend.getInstance().runInternalAction(VdcActionType.SyncLunsInfoForBlockStorageDomain,
 parameters);
+            }
+        });
+    }
+
     @Override
     public void vdsNonOperational(Guid vdsId, NonOperationalReason reason, 
boolean logCommand, Guid domainId) {
         vdsNonOperational(vdsId, reason, logCommand, domainId, null);
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/SyncLunsInfoForBlockStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/SyncLunsInfoForBlockStorageDomainCommand.java
index 5a38a0d..8b30659 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/SyncLunsInfoForBlockStorageDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/SyncLunsInfoForBlockStorageDomainCommand.java
@@ -1,8 +1,11 @@
 package org.ovirt.engine.core.bll.storage;
 
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 import org.ovirt.engine.core.bll.InternalCommandAttribute;
+import org.ovirt.engine.core.bll.LockMessagesMatchUtil;
 import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute;
 import org.ovirt.engine.core.bll.context.CommandContext;
 import org.ovirt.engine.core.common.action.StorageDomainParametersBase;
@@ -10,6 +13,9 @@
 import 
org.ovirt.engine.core.common.businessentities.LUN_storage_server_connection_map;
 import org.ovirt.engine.core.common.businessentities.LUNs;
 import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
+import org.ovirt.engine.core.common.errors.VdcBllMessages;
+import org.ovirt.engine.core.common.locks.LockingGroup;
+import org.ovirt.engine.core.common.utils.Pair;
 import org.ovirt.engine.core.common.vdscommands.GetVGInfoVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.dao.StorageServerConnectionLunMapDAO;
@@ -132,4 +138,11 @@
     protected StorageServerConnectionLunMapDAO 
getStorageServerConnectionLunMapDao() {
         return getDbFacade().getStorageServerConnectionLunMapDao();
     }
+
+    @Override
+    protected Map<String, Pair<String, String>> getExclusiveLocks() {
+        return 
Collections.singletonMap(getParameters().getStorageDomainId().toString(),
+                LockMessagesMatchUtil.makeLockingPair(LockingGroup.SYNC_LUNS,
+                        VdcBllMessages.ACTION_TYPE_FAILED_OBJECT_LOCKED));
+    }
 }
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 3c33ec8..f7941ec 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
@@ -67,4 +67,6 @@
      * @param vds
      */
     void updateSchedulingStats(VDS vds); // BLL
+
+    void syncLunsInfoForBlockStorageDomain(final Guid storageDomainId, final 
Guid vdsId);
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/locks/LockingGroup.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/locks/LockingGroup.java
index f9bedf0..83801a6 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/locks/LockingGroup.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/locks/LockingGroup.java
@@ -23,6 +23,7 @@
     /** This group is used to lock VM which is in export domain */
     REMOTE_VM,
     OVF_UPDATE,
+    SYNC_LUNS,
     /** This group is used for indication that an operation is executed using 
the specified host */
     VDS_EXECUTION,
     VDS_POOL_AND_STORAGE_CONNECTIONS;
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsProxyData.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsProxyData.java
index 996b10b..a279b03 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsProxyData.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsProxyData.java
@@ -354,6 +354,7 @@
             if (domainFromDb.getStorageDomainType() == 
StorageDomainType.Master && domainPoolMap != null
                     && domainPoolMap.getStatus() != 
StorageDomainStatus.Locked) {
                 // and the domain is not master in the VDSM
+
                 if (!((data.getStorageDomainType() == 
StorageDomainType.Master) || (data.getStorageDomainType() == 
StorageDomainType.Unknown))) {
                     reconstructMasterDomainNotInSync(data.getStoragePoolId(),
                             domainFromDb.getId(),
@@ -398,6 +399,13 @@
                     }
                 }
             }
+
+            // For block domains, synchronize LUN details comprising the 
storage domain with the DB
+            if (statusChanged && data.getStatus() == 
StorageDomainStatus.Active && storage_domain.getStorageType().isBlockDomain()) {
+                
ResourceManager.getInstance().getEventListener().syncLunsInfoForBlockStorageDomain(
+                        data.getId(), getCurrentVdsId());
+            }
+
             // if status didn't change and still not active no need to
             // update dynamic data
             if (statusChanged
@@ -1092,6 +1100,13 @@
                                         .get(new 
StoragePoolIsoMapId(tempData.getDomainId(), _storagePoolId));
                         map.setStatus(StorageDomainStatus.Active);
                         
DbFacade.getInstance().getStoragePoolIsoMapDao().update(map);
+
+                        // For block domains, synchronize LUN details 
comprising the storage domain with the DB
+                        StorageDomain storageDomain = 
DbFacade.getInstance().getStorageDomainDao().get(tempData.getDomainId());
+                        if (storageDomain.getStorageType().isBlockDomain()) {
+                            
ResourceManager.getInstance().getEventListener().syncLunsInfoForBlockStorageDomain(
+                                    storageDomain.getId(), vdsId);
+                        }
                     }
                 }
 


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I31ccdaaa8f7f982cb38dd8f1c4488d76cba21463
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Daniel Erez <de...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to