Michael Kublin has uploaded a new change for review. Change subject: core: [WIP] Remove global lock on SPM calls from engine side ......................................................................
core: [WIP] Remove global lock on SPM calls from engine side The following patch is removing a global lock from spm operation at engine side, after applying a patch we can send call sto SPM simenteniously. The reason for WIP is: 1. Need to be perfromed additional tests 2. Need to be added additional exception in order to improve user expirience 3. Should to be fixed syncronization issue at IsoDirectoryVDSCommand and DestroyPoolVDSCommand Change-Id: Ie9779fa4b5a4da2ef3ca1d62fe5203a3949ce278 Signed-off-by: Michael Kublin <[email protected]> --- M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/DestroyStoragePoolVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetIsoListVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IsoDirectoryVDSCommand.java M 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/SPMClearTaskVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksInfoVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksStatusesVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetTaskStatusVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMRevertTaskVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMStopTaskVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SpmStopOnIrsVDSCommand.java 14 files changed, 178 insertions(+), 167 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/98/9298/1 diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/DestroyStoragePoolVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/DestroyStoragePoolVDSCommand.java index 16b6a9b..986d03a 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/DestroyStoragePoolVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/DestroyStoragePoolVDSCommand.java @@ -11,7 +11,7 @@ @Override protected void ExecuteIrsBrokerCommand() { - VDS vds = DbFacade.getInstance().getVdsDao().get(this.getCurrentIrsProxyData().getCurrentVdsId()); + VDS vds = DbFacade.getInstance().getVdsDao().get(getIrsProxy().getId()); status = getIrsProxy().destroyStoragePool(getParameters().getStoragePoolId().toString(), vds.getvds_spm_id(), getParameters().getStoragePoolId().toString()); ProceedProxyReturnValue(); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetIsoListVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetIsoListVDSCommand.java index 1fdd62f..3765e9b 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetIsoListVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetIsoListVDSCommand.java @@ -14,7 +14,7 @@ .getInstance() .runVdsCommand( VDSCommandType.HsmGetIsoList, - new HSMGetIsoListParameters(getCurrentIrsProxyData().getCurrentVdsId(), + new HSMGetIsoListParameters(getIrsProxy().getId(), getParameters().getStoragePoolId())) .getReturnValue()); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java index 8e16620..02caff3 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java @@ -2,12 +2,15 @@ import java.util.Map; +import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.vdsbroker.vdsbroker.StatusOnlyReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.vdsbroker.StorageDomainListReturnForXmlRpc; public interface IIrsServer { + Guid getId(); + OneUuidReturnForXmlRpc createVolume(String sdUUID, String spUUID, String imgGUID, String size, int volFormat, int volType, int diskType, String volUUID, String descr, String srcImgGUID, String srcVolUUID); 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 a42b4b9..68f5b01 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 @@ -76,6 +76,10 @@ @Logged(errorLevel = LogLevel.ERROR) public abstract class IrsBrokerCommand<P extends IrsBaseVDSCommandParameters> extends BrokerCommandBase<P> { + + private Guid currentCommandSpmId; + protected final Set<Guid> mTriedVdssList = new HashSet<Guid>(); + public static final long BYTES_TO_GB = 1024 * 1024 * 1024; public static final int DAY_IN_MILLIS = 24 * 60 * 60 * 1000; private static Map<Guid, IrsProxyData> _irsProxyData = new ConcurrentHashMap<Guid, IrsProxyData>(); @@ -140,12 +144,7 @@ public Object syncObj = new Object(); private final String storagePoolRefreshJobId; - private final java.util.HashSet<Guid> mTriedVdssList = new java.util.HashSet<Guid>(); private Guid mCurrentVdsId; - - public Guid getCurrentVdsId() { - return getIrsProxy() != null ? mCurrentVdsId : Guid.Empty; - } public void setCurrentVdsId(Guid value) { mCurrentVdsId = (Guid.Empty.equals(value)) ? null : value; @@ -476,55 +475,63 @@ } } - public java.util.HashSet<Guid> getTriedVdssList() { - return mTriedVdssList; - } - public void Init(VDS vds) { mCurrentVdsId = vds.getId(); setmIrsPort(vds.getport()); setmCurrentIrsHost(vds.gethost_name()); } - public boolean failover() { - Guid vdsId = mCurrentVdsId; - nullifyInternalProxies(); - boolean performFailover = false; - if (vdsId != null) { - try { - VDSReturnValue statusResult = ResourceManager.getInstance().runVdsCommand(VDSCommandType.SpmStatus, - new SpmStatusVDSCommandParameters(vdsId, _storagePoolId)); - if (statusResult != null - && statusResult.getSucceeded() - && (((SpmStatusResult) statusResult.getReturnValue()).getSpmStatus() == SpmStatus.SPM || ((SpmStatusResult) statusResult - .getReturnValue()).getSpmStatus() == SpmStatus.Contend)) { - performFailover = ResourceManager - .getInstance() - .runVdsCommand(VDSCommandType.SpmStop, - new SpmStopVDSCommandParameters(vdsId, _storagePoolId)).getSucceeded(); - } else { - performFailover = true; + public boolean failover(Guid currentCommandSpmId, Set<Guid> mTriedVdssList) { + synchronized (syncObj) { + mTriedVdssList.add(currentCommandSpmId); + if (currentCommandSpmId.equals(mCurrentVdsId)) { + if (getHasVdssForSpmSelection(mCurrentVdsId, mTriedVdssList)) { + Guid vdsId = mCurrentVdsId; + nullifyInternalProxies(); + boolean performFailover = false; + if (vdsId != null) { + try { + VDSReturnValue statusResult = + ResourceManager.getInstance().runVdsCommand(VDSCommandType.SpmStatus, + new SpmStatusVDSCommandParameters(vdsId, _storagePoolId)); + if (statusResult != null + && statusResult.getSucceeded() + && (((SpmStatusResult) statusResult.getReturnValue()).getSpmStatus() == SpmStatus.SPM || ((SpmStatusResult) statusResult + .getReturnValue()).getSpmStatus() == SpmStatus.Contend)) { + performFailover = + ResourceManager + .getInstance() + .runVdsCommand(VDSCommandType.SpmStop, + new SpmStopVDSCommandParameters(vdsId, _storagePoolId)) + .getSucceeded(); + } else { + performFailover = true; + } + } catch (Exception ex) { + // try to failover to another host if failed to get spm + // status or stop spm + // (in case mCurrentVdsId has wrong id for some reason) + log.errorFormat("Could not get spm status on host {0} for spmStop.", vdsId); + performFailover = true; + } + } + + if (performFailover) { + log.infoFormat("Irs placed on server {0} failed. Proceed Failover", vdsId); + mTriedVdssList.add(vdsId); + return true; + } else { + log.errorFormat("IRS failover failed - cant allocate vds server"); + return false; + } } - } catch (Exception ex) { - // try to failover to another host if failed to get spm - // status or stop spm - // (in case mCurrentVdsId has wrong id for some reason) - log.errorFormat("Could not get spm status on host {0} for spmStop.", vdsId); - performFailover = true; + return false; } } - - if (performFailover) { - log.infoFormat("Irs placed on server {0} failed. Proceed Failover", vdsId); - mTriedVdssList.add(vdsId); - return true; - } else { - log.errorFormat("IRS failover failed - cant allocate vds server"); - return false; - } + return true; } - public IIrsServer getIrsProxy() { + public IIrsServer getIrsProxy(final Set<Guid> mTriedVdssList) { if (getmIrsProxy() == null) { storage_pool storagePool = DbFacade.getInstance().getStoragePoolDao().get(_storagePoolId); // don't try to start spm on uninitialized pool @@ -532,7 +539,7 @@ String host = TransactionSupport.executeInScope(TransactionScopeOption.Suppress, new TransactionMethod<String>() { @Override public String runInTransaction() { - return gethostFromVds(); + return gethostFromVds(mTriedVdssList); } }); @@ -544,7 +551,7 @@ clientTimeOut, IrsServerConnector.class, Config.<Boolean> GetValue(ConfigValues.UseSecureConnectionWithServers)); - privatemIrsProxy = new IrsServerWrapper(returnValue.getFirst(), returnValue.getSecond()); + privatemIrsProxy = new IrsServerWrapper(returnValue.getFirst(), returnValue.getSecond(), mCurrentVdsId); Class[] inputTypes = new Class[] { storage_pool.class, boolean.class }; Object[] inputParams = new Object[] { storagePool, _isSpmStartCalled }; // TODO use thread pool @@ -581,11 +588,11 @@ /** * Returns True if there are other vdss in pool */ - public boolean getHasVdssForSpmSelection() { - return (GetPrioritizedVdsInPool().size() > 0); + public boolean getHasVdssForSpmSelection(Guid currentCommandSpmId, Set<Guid> mTriedVdssList) { + return (getPrioritizedVdsInPool(currentCommandSpmId, mTriedVdssList).size() > 0); } - private String gethostFromVds() { + private String gethostFromVds(Set<Guid> mTriedVdssList) { _isSpmStartCalled = false; String returnValue = null; Guid curVdsId = (mCurrentVdsId != null) ? mCurrentVdsId : Guid.Empty; @@ -597,7 +604,7 @@ return null; } - List<VDS> prioritizedVdsInPool = GetPrioritizedVdsInPool(); + List<VDS> prioritizedVdsInPool = getPrioritizedVdsInPool(curVdsId, mTriedVdssList); // If VDS is in initialize status, wait for it to be up (or until // configurable timeout is reached) @@ -621,7 +628,7 @@ if (prioritizedVdsInPool != null && prioritizedVdsInPool.size() > 0) { selectedVds = prioritizedVdsInPool.get(0); - } else if (!Guid.Empty.equals(curVdsId) && !getTriedVdssList().contains(curVdsId)) { + } else if (!Guid.Empty.equals(curVdsId) && !mTriedVdssList.contains(curVdsId)) { selectedVds = DbFacade.getInstance().getVdsDao().get(curVdsId); if (selectedVds.getstatus() != VDSStatus.Up || selectedVds.getVdsSpmPriority() == BusinessEntitiesDefinitions.HOST_MIN_SPM_PRIORITY) { @@ -706,8 +713,8 @@ return returnValue; } - private List<VDS> GetPrioritizedVdsInPool() { - Guid curVdsId = (mCurrentVdsId != null) ? mCurrentVdsId : Guid.Empty; + private List<VDS> getPrioritizedVdsInPool(Guid currentCommandSpmId, Set<Guid> mTriedVdssList) { + Guid curVdsId = (currentCommandSpmId != null) ? currentCommandSpmId : Guid.Empty; // Gets a list of the hosts in the storagePool, that are "UP", ordered // by vds_spm_priority (not including -1) and secondly ordered by RANDOM(), to // deal with the case that there are several hosts with the same priority. @@ -973,11 +980,11 @@ return spmStatus; } - public String getIsoPrefix() { + public String getIsoPrefix(Set<Guid> mTriedVdssList) { synchronized (syncObj) { if (mIsoPrefix == null || mIsoPrefix.length() == 0) { try { - StoragePoolInfoReturnForXmlRpc returnValue = getIrsProxy().getStoragePoolInfo( + StoragePoolInfoReturnForXmlRpc returnValue = getIrsProxy(mTriedVdssList).getStoragePoolInfo( _storagePoolId.toString()); if (returnValue.mStoragePoolInfo.contains(IrsProperties.isoPrefix)) { mIsoPrefix = returnValue.mStoragePoolInfo.getItem(IrsProperties.isoPrefix).toString(); @@ -994,17 +1001,19 @@ mIsoPrefix = value; } - public String getIsoDirectory() { + public String getIsoDirectory(Set<Guid> mTriedVdssList) { String tempVar = getmCurrentIrsHost(); - return String.format("\\\\%1$s\\CD", ((tempVar != null) ? tempVar : gethostFromVds())); + return String.format("\\\\%1$s\\CD", ((tempVar != null) ? tempVar : gethostFromVds(mTriedVdssList))); } public void ResetIrs() { - nullifyInternalProxies(); - storage_pool storagePool = DbFacade.getInstance().getStoragePoolDao().get(_storagePoolId); - if (storagePool != null) { - storagePool.setspm_vds_id(null); - DbFacade.getInstance().getStoragePoolDao().update(storagePool); + synchronized (syncObj) { + nullifyInternalProxies(); + storage_pool storagePool = DbFacade.getInstance().getStoragePoolDao().get(_storagePoolId); + if (storagePool != null) { + storagePool.setspm_vds_id(null); + DbFacade.getInstance().getStoragePoolDao().update(storagePool); + } } } @@ -1527,10 +1536,10 @@ private int _failoverCounter; - private void failover() { + private void failover(Guid currentCommandSpmId) { if ((getParameters().getIgnoreFailoverLimit() || _failoverCounter < Config .<Integer> GetValue(ConfigValues.SpmCommandFailOverRetries) - 1) - && getCurrentIrsProxyData().getHasVdssForSpmSelection() && getCurrentIrsProxyData().failover()) { + && getCurrentIrsProxyData().failover(currentCommandSpmId, mTriedVdssList)) { _failoverCounter++; ExecuteCommand(); } else { @@ -1544,104 +1553,95 @@ } protected IIrsServer getIrsProxy() { - return getCurrentIrsProxyData().getIrsProxy(); + IIrsServer irsProxy; + synchronized (getCurrentIrsProxyData().syncObj) { + irsProxy = getCurrentIrsProxyData().getIrsProxy(mTriedVdssList); + if (irsProxy != null) { + currentCommandSpmId = irsProxy.getId(); + } else { + throw new IrsOperationFailedNoFailoverException("No SPM found"); + } + } + return irsProxy; } @Override protected void ExecuteVDSCommand() { boolean isStartReconstruct = false; - synchronized (getCurrentIrsProxyData().syncObj) { - try { - if (getIrsProxy() != null) { - ExecuteIrsBrokerCommand(); - } else { - if (getVDSReturnValue().getVdsError() == null) { - getVDSReturnValue().setExceptionString("Cannot allocate IRS server"); - VDSError tempVar = new VDSError(); - tempVar.setCode(VdcBllErrors.IRS_REPOSITORY_NOT_FOUND); - tempVar.setMessage("Cannot allocate IRS server"); - getVDSReturnValue().setVdsError(tempVar); - } - getVDSReturnValue().setSucceeded(false); - } + try { + ExecuteIrsBrokerCommand(); + } catch (UndeclaredThrowableException ex) { + getVDSReturnValue().setExceptionString(ex.toString()); + getVDSReturnValue().setExceptionObject(ex); + getVDSReturnValue().setVdsError(new VDSError(VdcBllErrors.VDS_NETWORK_ERROR, ex.getMessage())); + if (ExceptionUtils.getRootCause(ex) != null) { + logException(ExceptionUtils.getRootCause(ex)); + } else { + LoggedUtils.logError(log, LoggedUtils.getObjectId(this), this, ex); } - catch (UndeclaredThrowableException ex) { - getVDSReturnValue().setExceptionString(ex.toString()); - getVDSReturnValue().setExceptionObject(ex); - getVDSReturnValue().setVdsError(new VDSError(VdcBllErrors.VDS_NETWORK_ERROR, ex.getMessage())); - if (ExceptionUtils.getRootCause(ex) != null) { - logException(ExceptionUtils.getRootCause(ex)); - } else { - LoggedUtils.logError(log, LoggedUtils.getObjectId(this), this, ex); - } - failover(); - } - catch (XmlRpcRunTimeException ex) { - getVDSReturnValue().setExceptionString(ex.toString()); - getVDSReturnValue().setExceptionObject(ex); - if (ex.isNetworkError()) { - log.errorFormat("IrsBroker::Failed::{0} - network exception.", getCommandName()); - getVDSReturnValue().setSucceeded(false); - } else { - log.errorFormat("IrsBroker::Failed::{0}", getCommandName()); - LoggedUtils.logError(log, LoggedUtils.getObjectId(this), this, ex); - throw new IRSProtocolException(ex); - } - } - catch (IRSNoMasterDomainException ex) { - getVDSReturnValue().setExceptionString(ex.toString()); - getVDSReturnValue().setExceptionObject(ex); - getVDSReturnValue().setVdsError(ex.getVdsError()); + failover(currentCommandSpmId); + } catch (XmlRpcRunTimeException ex) { + getVDSReturnValue().setExceptionString(ex.toString()); + getVDSReturnValue().setExceptionObject(ex); + if (ex.isNetworkError()) { + log.errorFormat("IrsBroker::Failed::{0} - network exception.", getCommandName()); + getVDSReturnValue().setSucceeded(false); + } else { log.errorFormat("IrsBroker::Failed::{0}", getCommandName()); - log.errorFormat("Exception: {0}", ex.getMessage()); - - if (getCurrentIrsProxyData().getHasVdssForSpmSelection()) { - failover(); - } else { - isStartReconstruct = true; - } - } catch (IRSUnicodeArgumentException ex) { - throw new IRSGenericException("UNICODE characters are not supported.", ex); - } catch (IRSStoragePoolStatusException ex) { - throw ex; - } catch (IrsOperationFailedNoFailoverException ex) { - throw ex; - } catch (IRSNonOperationalException ex) { - getVDSReturnValue().setExceptionString(ex.toString()); - getVDSReturnValue().setExceptionObject(ex); - getVDSReturnValue().setVdsError(ex.getVdsError()); - logException(ex); - if (ex.getVdsError() != null && VdcBllErrors.SpmStatusError == ex.getVdsError().getCode()) { - getCurrentIrsProxyData().setCurrentVdsId(Guid.Empty); - } - failover(); - } catch (IRSErrorException ex) { - getVDSReturnValue().setExceptionString(ex.toString()); - getVDSReturnValue().setExceptionObject(ex); - getVDSReturnValue().setVdsError(ex.getVdsError()); - logException(ex); - if (log.isDebugEnabled()) { - LoggedUtils.logError(log, LoggedUtils.getObjectId(this), this, ex); - } - failover(); - } catch (RuntimeException ex) { - getVDSReturnValue().setExceptionString(ex.toString()); - getVDSReturnValue().setExceptionObject(ex); - if (ex instanceof VDSExceptionBase) { - getVDSReturnValue().setVdsError(((VDSExceptionBase) ex).getVdsError()); - } - if (ExceptionUtils.getRootCause(ex) != null && - ExceptionUtils.getRootCause(ex) instanceof SocketException) { - logException(ExceptionUtils.getRootCause(ex)); - } else { - LoggedUtils.logError(log, LoggedUtils.getObjectId(this), this, ex); - } - // always failover because of changes in vdsm error, until we - // realize what to do in each case: - failover(); - } finally { - getCurrentIrsProxyData().getTriedVdssList().clear(); + LoggedUtils.logError(log, LoggedUtils.getObjectId(this), this, ex); + throw new IRSProtocolException(ex); } + } catch (IRSNoMasterDomainException ex) { + getVDSReturnValue().setExceptionString(ex.toString()); + getVDSReturnValue().setExceptionObject(ex); + getVDSReturnValue().setVdsError(ex.getVdsError()); + log.errorFormat("IrsBroker::Failed::{0}", getCommandName()); + log.errorFormat("Exception: {0}", ex.getMessage()); + + if (getCurrentIrsProxyData().getHasVdssForSpmSelection(currentCommandSpmId, mTriedVdssList)) { + failover(currentCommandSpmId); + } else { + isStartReconstruct = true; + } + } catch (IRSUnicodeArgumentException ex) { + throw new IRSGenericException("UNICODE characters are not supported.", ex); + } catch (IRSStoragePoolStatusException ex) { + throw ex; + } catch (IrsOperationFailedNoFailoverException ex) { + throw ex; + } catch (IRSNonOperationalException ex) { + getVDSReturnValue().setExceptionString(ex.toString()); + getVDSReturnValue().setExceptionObject(ex); + getVDSReturnValue().setVdsError(ex.getVdsError()); + logException(ex); + if (ex.getVdsError() != null && VdcBllErrors.SpmStatusError == ex.getVdsError().getCode()) { + getCurrentIrsProxyData().setCurrentVdsId(Guid.Empty); + } + failover(currentCommandSpmId); + } catch (IRSErrorException ex) { + getVDSReturnValue().setExceptionString(ex.toString()); + getVDSReturnValue().setExceptionObject(ex); + getVDSReturnValue().setVdsError(ex.getVdsError()); + logException(ex); + if (log.isDebugEnabled()) { + LoggedUtils.logError(log, LoggedUtils.getObjectId(this), this, ex); + } + failover(currentCommandSpmId); + } catch (RuntimeException ex) { + getVDSReturnValue().setExceptionString(ex.toString()); + getVDSReturnValue().setExceptionObject(ex); + if (ex instanceof VDSExceptionBase) { + getVDSReturnValue().setVdsError(((VDSExceptionBase) ex).getVdsError()); + } + if (ExceptionUtils.getRootCause(ex) != null && + ExceptionUtils.getRootCause(ex) instanceof SocketException) { + logException(ExceptionUtils.getRootCause(ex)); + } else { + LoggedUtils.logError(log, LoggedUtils.getObjectId(this), this, ex); + } + // always failover because of changes in vdsm error, until we + // realize what to do in each case: + failover(currentCommandSpmId); } if (isStartReconstruct) { startReconstruct(); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java index ac10b1d..6c0a6b8 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java @@ -3,6 +3,7 @@ import java.util.Map; import org.apache.commons.httpclient.HttpClient; +import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.vdsbroker.vdsbroker.StatusOnlyReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.vdsbroker.StorageDomainListReturnForXmlRpc; @@ -10,16 +11,23 @@ private IrsServerConnector irsServer; private HttpClient httpClient; + private Guid id; - public IrsServerWrapper(IrsServerConnector innerImplementor, HttpClient httpClient) { + public IrsServerWrapper(IrsServerConnector innerImplementor, HttpClient httpClient, Guid id) { this.irsServer = innerImplementor; this.httpClient = httpClient; + this.id = id; } public HttpClient getHttpClient() { return httpClient; } + @Override + public Guid getId() { + return id; + } + public OneUuidReturnForXmlRpc createVolume(String sdUUID, String spUUID, String imgGUID, String size, int volFormat, int volType, int diskType, String volUUID, String descr, String srcImgGUID, String srcVolUUID) { Map<String, Object> xmlRpcReturnValue = irsServer.createVolume(sdUUID, spUUID, imgGUID, size, volFormat, diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IsoDirectoryVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IsoDirectoryVDSCommand.java index c2999b7..5649b93 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IsoDirectoryVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IsoDirectoryVDSCommand.java @@ -1,6 +1,6 @@ package org.ovirt.engine.core.vdsbroker.irsbroker; -import org.ovirt.engine.core.common.vdscommands.*; +import org.ovirt.engine.core.common.vdscommands.IrsBaseVDSCommandParameters; public class IsoDirectoryVDSCommand<P extends IrsBaseVDSCommandParameters> extends IrsBrokerCommand<P> { public IsoDirectoryVDSCommand(P parameters) { @@ -9,6 +9,6 @@ @Override protected void ExecuteIrsBrokerCommand() { - getVDSReturnValue().setReturnValue(getCurrentIrsProxyData().getIsoDirectory()); + getVDSReturnValue().setReturnValue(getCurrentIrsProxyData().getIsoDirectory(mTriedVdssList)); } } 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 index bba4d36..f915b36 100644 --- 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 @@ -1,6 +1,6 @@ package org.ovirt.engine.core.vdsbroker.irsbroker; -import org.ovirt.engine.core.common.vdscommands.*; +import org.ovirt.engine.core.common.vdscommands.IrsBaseVDSCommandParameters; public class IsoPrefixVDSCommand<P extends IrsBaseVDSCommandParameters> extends IrsBrokerCommand<P> { public IsoPrefixVDSCommand(P parameters) { @@ -10,6 +10,6 @@ @Override protected void ExecuteIrsBrokerCommand() { - getVDSReturnValue().setReturnValue(getCurrentIrsProxyData().getIsoPrefix()); + getVDSReturnValue().setReturnValue(getCurrentIrsProxyData().getIsoPrefix(mTriedVdssList)); } } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMClearTaskVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMClearTaskVDSCommand.java index 54ba63c..d3a3774 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMClearTaskVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMClearTaskVDSCommand.java @@ -13,7 +13,7 @@ protected void ExecuteIrsBrokerCommand() { VDSReturnValue returnValue = ResourceManager.getInstance().runVdsCommand( VDSCommandType.HSMClearTask, - new HSMTaskGuidBaseVDSCommandParameters(getCurrentIrsProxyData().getCurrentVdsId(), + new HSMTaskGuidBaseVDSCommandParameters(getIrsProxy().getId(), getParameters().getTaskId())); if (returnValue != null && !returnValue.getSucceeded()) { getVDSReturnValue().setVdsError(returnValue.getVdsError()); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksInfoVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksInfoVDSCommand.java index 6acd53b..3876d9c 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksInfoVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksInfoVDSCommand.java @@ -21,7 +21,7 @@ setReturnValue(ResourceManager .getInstance() .runVdsCommand(VDSCommandType.HSMGetAllTasksInfo, - new VdsIdVDSCommandParametersBase(getCurrentIrsProxyData().getCurrentVdsId())) + new VdsIdVDSCommandParametersBase(getIrsProxy().getId())) .getReturnValue()); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksStatusesVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksStatusesVDSCommand.java index 8430395..360eb4f 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksStatusesVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetAllTasksStatusesVDSCommand.java @@ -16,6 +16,6 @@ @Override protected void ExecuteIrsBrokerCommand() { setVDSReturnValue(ResourceManager.getInstance().runVdsCommand(VDSCommandType.HSMGetAllTasksStatuses, - new VdsIdVDSCommandParametersBase(getCurrentIrsProxyData().getCurrentVdsId()))); + new VdsIdVDSCommandParametersBase(getIrsProxy().getId()))); } } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetTaskStatusVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetTaskStatusVDSCommand.java index 8d457b2..3f58e06 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetTaskStatusVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMGetTaskStatusVDSCommand.java @@ -15,7 +15,7 @@ .getInstance() .runVdsCommand( VDSCommandType.HSMGetTaskStatus, - new HSMTaskGuidBaseVDSCommandParameters(getCurrentIrsProxyData().getCurrentVdsId(), + new HSMTaskGuidBaseVDSCommandParameters(getIrsProxy().getId(), getParameters().getTaskId())).getReturnValue()); } } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMRevertTaskVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMRevertTaskVDSCommand.java index 33f962a..5dad52e 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMRevertTaskVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMRevertTaskVDSCommand.java @@ -13,7 +13,7 @@ VDSReturnValue returnValue = ResourceManager.getInstance().runVdsCommand( VDSCommandType.HSMRevertTask, - new HSMTaskGuidBaseVDSCommandParameters(getCurrentIrsProxyData().getCurrentVdsId(), + new HSMTaskGuidBaseVDSCommandParameters(getIrsProxy().getId(), getParameters().getTaskId())); if (returnValue != null && !returnValue.getSucceeded()) { getVDSReturnValue().setVdsError(returnValue.getVdsError()); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMStopTaskVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMStopTaskVDSCommand.java index c573806..7d28d56 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMStopTaskVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SPMStopTaskVDSCommand.java @@ -12,7 +12,7 @@ protected void ExecuteIrsBrokerCommand() { ResourceManager.getInstance().runVdsCommand( VDSCommandType.HSMStopTask, - new HSMTaskGuidBaseVDSCommandParameters(getCurrentIrsProxyData().getCurrentVdsId(), + new HSMTaskGuidBaseVDSCommandParameters(getIrsProxy().getId(), getParameters().getTaskId())); } } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SpmStopOnIrsVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SpmStopOnIrsVDSCommand.java index 3801990..7bede0c 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SpmStopOnIrsVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SpmStopOnIrsVDSCommand.java @@ -13,6 +13,6 @@ ResourceManager.getInstance().runVdsCommand( VDSCommandType.ResetIrs, new ResetIrsVDSCommandParameters(getParameters().getStoragePoolId(), - getCurrentIrsProxyData().getCurrentVdsId())); + getIrsProxy().getId())); } } -- To view, visit http://gerrit.ovirt.org/9298 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie9779fa4b5a4da2ef3ca1d62fe5203a3949ce278 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Michael Kublin <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
