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