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

Reply via email to