Arik Hadas has uploaded a new change for review. Change subject: core: change iso prefix command to be vds broker command ......................................................................
core: change iso prefix command to be vds broker command Change-Id: I272ce7b0407bf83bd47646941630362ecf0b18cc Signed-off-by: Arik Hadas <aha...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeDiskCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeFloppyCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VdsAndPoolIDVDSParametersBase.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java D backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IsoPrefixVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ResetISOPathVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IsoPrefixVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java 13 files changed, 110 insertions(+), 48 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/15/17815/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeDiskCommand.java index f28443e..1c9b858 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeDiskCommand.java @@ -14,7 +14,7 @@ public ChangeDiskCommand(T parameters) { super(parameters); - mCdImagePath = ImagesHandler.cdPathWindowsToLinux(parameters.getCdImagePath(), getVm().getStoragePoolId()); + mCdImagePath = ImagesHandler.cdPathWindowsToLinux(parameters.getCdImagePath(), getVm().getStoragePoolId(), getVm().getRunOnVds()); } public String getDiskName() { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeFloppyCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeFloppyCommand.java index 3fb2cc9..6b85d41 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeFloppyCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeFloppyCommand.java @@ -12,7 +12,7 @@ public ChangeFloppyCommand(T parameters) { super(parameters); - mCdImagePath = ImagesHandler.cdPathWindowsToLinux(parameters.getCdImagePath(), getVm().getStoragePoolId()); + mCdImagePath = ImagesHandler.cdPathWindowsToLinux(parameters.getCdImagePath(), getVm().getStoragePoolId(), getVm().getRunOnVds()); } public String getDiskName() { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java index e473507..c928f5f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java @@ -39,8 +39,8 @@ import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.common.utils.VmDeviceType; import org.ovirt.engine.core.common.vdscommands.GetImageInfoVDSCommandParameters; -import org.ovirt.engine.core.common.vdscommands.IrsBaseVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; +import org.ovirt.engine.core.common.vdscommands.VdsAndPoolIDVDSParametersBase; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.utils.collections.MultiValueMapUtils; @@ -367,10 +367,10 @@ return snapshots; } - public static String cdPathWindowsToLinux(String windowsPath, Guid storagePoolId) { + public static String cdPathWindowsToLinux(String windowsPath, Guid storagePoolId, Guid vdsId) { return cdPathWindowsToLinux(windowsPath, (String) Backend.getInstance() .getResourceManager() - .RunVdsCommand(VDSCommandType.IsoPrefix, new IrsBaseVDSCommandParameters(storagePoolId)) + .RunVdsCommand(VDSCommandType.IsoPrefix, new VdsAndPoolIDVDSParametersBase(vdsId, storagePoolId)) .getReturnValue()); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java index 3aa1a08..aba65be 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java @@ -186,7 +186,7 @@ } protected String cdPathWindowsToLinux(String url) { - return ImagesHandler.cdPathWindowsToLinux(url, getVm().getStoragePoolId()); + return ImagesHandler.cdPathWindowsToLinux(url, getVm().getStoragePoolId(), getVdsId()); } private void resumeVm() { @@ -777,7 +777,7 @@ } if (!vm.isAutoStartup() && !StringUtils.isEmpty(getVm().getIsoPath()) - && getIsoDomainListSyncronizer().findActiveISODomain(getVm().getStoragePoolId()) != null) { + && getIsoDomainListSyncronizer().findActiveISODomain(getVm().getStoragePoolId()) == null) { return failCanDoAction(VdcBllMessages.VM_CANNOT_RUN_FROM_CD_WITHOUT_ACTIVE_STORAGE_DOMAIN_ISO); } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java index c70959d..2577a2d 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java @@ -65,7 +65,7 @@ UploadImage("org.ovirt.engine.core.vdsbroker.irsbroker"), CreateSnapshot("org.ovirt.engine.core.vdsbroker.irsbroker"), MergeSnapshots("org.ovirt.engine.core.vdsbroker.irsbroker"), - IsoPrefix("org.ovirt.engine.core.vdsbroker.irsbroker"), + IsoPrefix("org.ovirt.engine.core.vdsbroker.vdsbroker"), IsoDirectory("org.ovirt.engine.core.vdsbroker.irsbroker"), ResetIrs("org.ovirt.engine.core.vdsbroker.irsbroker"), GetIsoList("org.ovirt.engine.core.vdsbroker.irsbroker"), diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VdsAndPoolIDVDSParametersBase.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VdsAndPoolIDVDSParametersBase.java new file mode 100644 index 0000000..233458f --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VdsAndPoolIDVDSParametersBase.java @@ -0,0 +1,24 @@ +package org.ovirt.engine.core.common.vdscommands; + +import org.ovirt.engine.core.compat.Guid; + +public class VdsAndPoolIDVDSParametersBase extends VdsIdVDSCommandParametersBase { + private Guid storagePoolId = Guid.Empty; + + public VdsAndPoolIDVDSParametersBase(Guid vdsId, Guid storagePoolId) { + super(vdsId); + this.storagePoolId = storagePoolId; + } + + public VdsAndPoolIDVDSParametersBase() { + } + + public Guid getStoragePoolId() { + return storagePoolId; + } + + @Override + public String toString() { + return String.format("%s, storagePoolId=%s", super.toString(), getStoragePoolId()); + } +} 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 cea8b75..e5f8bf8 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 @@ -16,7 +16,6 @@ import java.util.concurrent.TimeUnit; import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.exception.ExceptionUtils; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.businessentities.AsyncTaskStatus; @@ -974,27 +973,6 @@ } } return spmStatus; - } - - public String getIsoPrefix() { - synchronized (syncObj) { - if (StringUtils.isEmpty(mIsoPrefix)) { - try { - StoragePoolInfoReturnForXmlRpc returnValue = getIrsProxy().getStoragePoolInfo( - _storagePoolId.toString()); - if (returnValue.mStoragePoolInfo.containsKey(IrsProperties.isoPrefix)) { - mIsoPrefix = returnValue.mStoragePoolInfo.get(IrsProperties.isoPrefix).toString(); - } - } catch (Exception ex) { - log.errorFormat("IrsBroker::IsoPrefix Failed to get IRS statistics."); - } - } - return mIsoPrefix; - } - } - - public void setIsoPrefix(String value) { - mIsoPrefix = value; } public String getIsoDirectory() { diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IsoPrefixVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IsoPrefixVDSCommand.java deleted file mode 100644 index 96bdda3..0000000 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IsoPrefixVDSCommand.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.ovirt.engine.core.vdsbroker.irsbroker; - -import org.ovirt.engine.core.common.vdscommands.IrsBaseVDSCommandParameters; - -public class IsoPrefixVDSCommand<P extends IrsBaseVDSCommandParameters> extends IrsBrokerCommand<P> { - public IsoPrefixVDSCommand(P parameters) { - super(parameters); - } - - @Override - protected void ExecuteIrsBrokerCommand() { - - getVDSReturnValue().setReturnValue(getCurrentIrsProxyData().getIsoPrefix()); - } -} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ResetISOPathVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ResetISOPathVDSCommand.java index 977c082..8594ef8 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ResetISOPathVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ResetISOPathVDSCommand.java @@ -1,9 +1,10 @@ package org.ovirt.engine.core.vdsbroker.irsbroker; import org.ovirt.engine.core.common.vdscommands.IrsBaseVDSCommandParameters; +import org.ovirt.engine.core.vdsbroker.vdsbroker.IsoPrefixVDSCommand; -public class ResetISOPathVDSCommand<P extends IrsBaseVDSCommandParameters> extends IrsBrokerCommand<P> { - public ResetISOPathVDSCommand(P parameters) { +public class ResetISOPathVDSCommand<T extends IrsBaseVDSCommandParameters> extends IrsBrokerCommand<T> { + public ResetISOPathVDSCommand(T parameters) { super(parameters); } @@ -11,6 +12,6 @@ // spm for this action @Override protected void executeVDSCommand() { - getCurrentIrsProxyData().setIsoPrefix(""); + IsoPrefixVDSCommand.clearCachedIsoPrefix(getParameters().getStoragePoolId()); } } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java index 873e82b..4e1d310 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java @@ -15,6 +15,7 @@ import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumesListReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.IsoListReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.OneUuidReturnForXmlRpc; +import org.ovirt.engine.core.vdsbroker.irsbroker.StoragePoolInfoReturnForXmlRpc; public interface IVdsServer { @@ -257,4 +258,6 @@ StatusOnlyReturnForXmlRpc glusterHookRemove(String glusterCommand, String stage, String hookName); GlusterServicesReturnForXmlRpc glusterServicesAction(Guid serverId, String [] serviceList, String actionType); + + StoragePoolInfoReturnForXmlRpc getStoragePoolInfo(String spUUID); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IsoPrefixVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IsoPrefixVDSCommand.java new file mode 100644 index 0000000..7e8d9fb --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IsoPrefixVDSCommand.java @@ -0,0 +1,61 @@ +package org.ovirt.engine.core.vdsbroker.vdsbroker; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.ovirt.engine.core.common.vdscommands.VdsAndPoolIDVDSParametersBase; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.vdsbroker.irsbroker.IrsProperties; +import org.ovirt.engine.core.vdsbroker.irsbroker.StoragePoolInfoReturnForXmlRpc; + +public class IsoPrefixVDSCommand<T extends VdsAndPoolIDVDSParametersBase> extends VdsBrokerCommand<T> { + + private static Map<Guid, String> storagePoolId2IsoPrefix = new ConcurrentHashMap<Guid, String>(); + private static Map<Guid, Object> storagePoolId2LockObj = new ConcurrentHashMap<Guid, Object>(); + + public IsoPrefixVDSCommand(T parameters) { + super(parameters); + } + + @Override + protected void ExecuteVdsBrokerCommand() { + getVDSReturnValue().setReturnValue(getIsoPrefix()); + } + + private String getIsoPrefix() { + Guid storagePoolId = getParameters().getStoragePoolId(); + synchronized(getLockObjForStoragePool(storagePoolId)) { + if (storagePoolId2IsoPrefix.get(storagePoolId) == null) { + try { + StoragePoolInfoReturnForXmlRpc returnValue = + getBroker().getStoragePoolInfo(storagePoolId.toString()); + + if (returnValue.mStoragePoolInfo.containsKey(IrsProperties.isoPrefix)) { + storagePoolId2IsoPrefix.put(storagePoolId, + returnValue.mStoragePoolInfo.get(IrsProperties.isoPrefix).toString()); + } + else { + return ""; + } + } catch (Exception ex) { + log.errorFormat("IrsBroker::IsoPrefix Failed to get IRS statistics."); + return ""; + } + } + return storagePoolId2IsoPrefix.get(storagePoolId); + } + } + + public static void clearCachedIsoPrefix(Guid storagePoolId) { + synchronized(getLockObjForStoragePool(storagePoolId)) { + storagePoolId2IsoPrefix.put(storagePoolId, null); + } + } + + private static Object getLockObjForStoragePool(Guid storagePoolId) { + if (!storagePoolId2LockObj.containsKey(storagePoolId)) { + storagePoolId2LockObj.put(storagePoolId, new Object()); + } + return storagePoolId2LockObj.get(storagePoolId); + } +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java index 9c18928..6a04cb7 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java @@ -244,4 +244,6 @@ public Map<String,Object> glusterHookRemove(String glusterCommand, String stage, String hookName); public Map<String, Object> glusterServicesAction(String[] serviceNames, String action); + + public Map<String, Object> getStoragePoolInfo(String spUUID); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java index 024005d..1b1dca9 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java @@ -17,6 +17,7 @@ import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumesListReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.IsoListReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.OneUuidReturnForXmlRpc; +import org.ovirt.engine.core.vdsbroker.irsbroker.StoragePoolInfoReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.xmlrpc.XmlRpcRunTimeException; @SuppressWarnings({"rawtypes", "unchecked"}) @@ -1253,4 +1254,11 @@ throw new XmlRpcRunTimeException(ute); } } + + @Override + public StoragePoolInfoReturnForXmlRpc getStoragePoolInfo(String spUUID) { + Map<String, Object> xmlRpcReturnValue = vdsServer.getStoragePoolInfo(spUUID); + StoragePoolInfoReturnForXmlRpc wrapper = new StoragePoolInfoReturnForXmlRpc(xmlRpcReturnValue); + return wrapper; + } } -- To view, visit http://gerrit.ovirt.org/17815 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I272ce7b0407bf83bd47646941630362ecf0b18cc Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Arik Hadas <aha...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches