Tal Nisan has uploaded a new change for review.

Change subject: Reinit (WIP)
......................................................................

Reinit (WIP)

Change-Id: Ife292b85270e6aa8f5bf723ad7d3fa84e325d3d8
Signed-off-by: Tal Nisan <[email protected]>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ReinitializeSPMCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ReinitializeSPMParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ResetIrsVDSCommandParameters.java
M 
backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
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/ResetIrsVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SpmStopOnIrsVDSCommand.java
A 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SpmStopOnIrsVDSCommandParameters.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabHostView.java
14 files changed, 245 insertions(+), 31 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/89/12489/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ReinitializeSPMCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ReinitializeSPMCommand.java
new file mode 100644
index 0000000..a95a974
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ReinitializeSPMCommand.java
@@ -0,0 +1,58 @@
+package org.ovirt.engine.core.bll;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.ovirt.engine.core.bll.utils.PermissionSubject;
+import org.ovirt.engine.core.common.VdcObjectType;
+import org.ovirt.engine.core.common.action.ReinitializeSPMParameters;
+import org.ovirt.engine.core.common.businessentities.ActionGroup;
+import 
org.ovirt.engine.core.common.businessentities.BusinessEntitiesDefinitions;
+import org.ovirt.engine.core.common.businessentities.VDSStatus;
+import org.ovirt.engine.core.common.businessentities.VdsSpmStatus;
+import org.ovirt.engine.core.common.vdscommands.ResetIrsVDSCommandParameters;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
+
+@NonTransactiveCommandAttribute
+public class ReinitializeSPMCommand<T extends ReinitializeSPMParameters> 
extends CommandBase<T> {
+
+    public ReinitializeSPMCommand(T parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected boolean canDoAction() {
+        setVdsId(getParameters().getPrefferedSPMId());
+
+        if (getVds().getStatus() != VDSStatus.Up || getVds().getSpmStatus() != 
VdsSpmStatus.None) {
+            return false;
+        }
+
+        if (getVds().getVdsSpmPriority() == 
BusinessEntitiesDefinitions.HOST_MIN_SPM_PRIORITY) {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    protected void executeCommand() {
+        setStoragePoolId(getParameters().getStoragePoolId());
+        // TODO: SPM id might be null...
+        ResetIrsVDSCommandParameters params =
+                new ResetIrsVDSCommandParameters(getStoragePool().getId(),
+                        getStoragePool().getspm_vds_id().getValue(),
+                        getParameters().getPrefferedSPMId());
+        runVdsCommand(VDSCommandType.ResetIrs, params);
+        setSucceeded(true);
+    }
+
+    @Override
+    public List<PermissionSubject> getPermissionCheckSubjects() {
+        List<PermissionSubject> permissions = new 
ArrayList<PermissionSubject>();
+        permissions.add(new 
PermissionSubject(getParameters().getStoragePoolId(),
+                VdcObjectType.StoragePool,
+                ActionGroup.CONFIGURE_VM_STORAGE));
+        return permissions;
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
index d7e7f35..29e9c41 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
@@ -10,17 +10,16 @@
 import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.action.StorageDomainPoolParametersBase;
+import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
 import org.ovirt.engine.core.common.businessentities.StorageDomainType;
+import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap;
 import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMapId;
 import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
 import org.ovirt.engine.core.common.businessentities.VDS;
-import org.ovirt.engine.core.common.businessentities.StorageDomain;
-import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap;
 import org.ovirt.engine.core.common.utils.Pair;
 import 
org.ovirt.engine.core.common.vdscommands.DeactivateStorageDomainVDSCommandParameters;
 import 
org.ovirt.engine.core.common.vdscommands.DisconnectStoragePoolVDSCommandParameters;
-import org.ovirt.engine.core.common.vdscommands.IrsBaseVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
 import org.ovirt.engine.core.compat.Guid;
@@ -32,6 +31,7 @@
 import org.ovirt.engine.core.utils.linq.LinqUtils;
 import org.ovirt.engine.core.utils.linq.Predicate;
 import org.ovirt.engine.core.utils.transaction.TransactionMethod;
+import 
org.ovirt.engine.core.vdsbroker.irsbroker.SpmStopOnIrsVDSCommandParameters;
 
 @LockIdNameAttribute
 @NonTransactiveCommandAttribute(forceCompensation = true)
@@ -195,7 +195,7 @@
         }
         if (_isLastMaster && spm != null) {
             final VDSReturnValue stopSpmReturnValue = 
runVdsCommand(VDSCommandType.SpmStopOnIrs,
-                    new IrsBaseVDSCommandParameters(getStoragePool().getId()));
+                    new 
SpmStopOnIrsVDSCommandParameters(getStoragePool().getId()));
             if (!stopSpmReturnValue.getSucceeded()) {
                 // no need to continue because DisconnectStoragePool will
                 // fail if host is SPM
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
index 32db824..eb521e6 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
@@ -17,6 +17,7 @@
 import org.ovirt.engine.core.common.action.RemoveStorageDomainParameters;
 import org.ovirt.engine.core.common.action.StoragePoolParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
 import org.ovirt.engine.core.common.businessentities.StorageDomainType;
 import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
@@ -24,7 +25,6 @@
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
 import org.ovirt.engine.core.common.businessentities.VmStatic;
-import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.storage_pool;
 import org.ovirt.engine.core.common.businessentities.network.Network;
 import org.ovirt.engine.core.common.errors.VdcBLLException;
@@ -41,6 +41,7 @@
 import org.ovirt.engine.core.utils.linq.Predicate;
 import org.ovirt.engine.core.utils.transaction.TransactionMethod;
 import org.ovirt.engine.core.utils.transaction.TransactionSupport;
+import 
org.ovirt.engine.core.vdsbroker.irsbroker.SpmStopOnIrsVDSCommandParameters;
 
 @NonTransactiveCommandAttribute(forceCompensation = true)
 public class RemoveStoragePoolCommand<T extends StoragePoolParametersBase> 
extends StorageHandlingCommandBase<T> {
@@ -226,7 +227,7 @@
                         Backend.getInstance()
                                 .getResourceManager()
                                 .RunVdsCommand(VDSCommandType.SpmStopOnIrs,
-                                        new 
IrsBaseVDSCommandParameters(getStoragePool().getId()));
+                                        new 
SpmStopOnIrsVDSCommandParameters(getStoragePool().getId()));
                         return null;
                     }
                 });
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ReinitializeSPMParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ReinitializeSPMParameters.java
new file mode 100644
index 0000000..617ea17
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ReinitializeSPMParameters.java
@@ -0,0 +1,30 @@
+package org.ovirt.engine.core.common.action;
+
+import org.ovirt.engine.core.compat.Guid;
+
+public class ReinitializeSPMParameters extends VdcActionParametersBase {
+
+    private Guid prefferedSPMId;
+    private Guid storagePoolId = Guid.Empty;
+
+    public ReinitializeSPMParameters(Guid storagePoolId, Guid prefferedSPMId) {
+        setStoragePoolId(storagePoolId);
+        setPrefferedSPMId(prefferedSPMId);
+    }
+
+    public Guid getPrefferedSPMId() {
+        return prefferedSPMId;
+    }
+
+    public void setPrefferedSPMId(Guid prefferedSPMId) {
+        this.prefferedSPMId = prefferedSPMId;
+    }
+
+    public Guid getStoragePoolId() {
+        return storagePoolId;
+    }
+
+    public void setStoragePoolId(Guid storagePoolId) {
+        this.storagePoolId = storagePoolId;
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
index acf66b0..c2e475f 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
@@ -72,6 +72,7 @@
     InitVdsOnUp(115, QuotaDependency.NONE),
     SetNonOperationalVds(117, QuotaDependency.NONE),
     AddVdsSpmId(119, QuotaDependency.NONE),
+    ReinitializeSPM(120, QuotaDependency.NONE),
     // Fencing (including RestartVds above)
     StartVds(121, ActionGroup.MANIPUTLATE_HOST, QuotaDependency.NONE),
     StopVds(122, ActionGroup.MANIPUTLATE_HOST, QuotaDependency.NONE),
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ResetIrsVDSCommandParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ResetIrsVDSCommandParameters.java
index 865db31..dc2e9ca 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ResetIrsVDSCommandParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ResetIrsVDSCommandParameters.java
@@ -1,6 +1,6 @@
 package org.ovirt.engine.core.common.vdscommands;
 
-import org.ovirt.engine.core.compat.*;
+import org.ovirt.engine.core.compat.Guid;
 
 public class ResetIrsVDSCommandParameters extends IrsBaseVDSCommandParameters {
     public ResetIrsVDSCommandParameters(Guid storagePoolId, Guid vdsId) {
@@ -8,7 +8,14 @@
         setVdsId(vdsId);
     }
 
+    public ResetIrsVDSCommandParameters(Guid storagePoolId, Guid vdsId, Guid 
prefferedSPMId) {
+        this(storagePoolId, vdsId);
+        setPrefferedSPMId(prefferedSPMId);
+    }
+
     private Guid privateVdsId;
+
+    private Guid prefferedSPMId;
 
     public Guid getVdsId() {
         return privateVdsId;
@@ -24,6 +31,14 @@
         return privateIgnoreStopFailed;
     }
 
+    public Guid getPrefferedSPMId() {
+        return prefferedSPMId;
+    }
+
+    public void setPrefferedSPMId(Guid prefferedSPMId) {
+        this.prefferedSPMId = prefferedSPMId;
+    }
+
     public void setIgnoreStopFailed(boolean value) {
         privateIgnoreStopFailed = value;
     }
diff --git 
a/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
 
b/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
index f3ef714..bbb9854 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
@@ -18,6 +18,7 @@
 job.AddDisk=Adding Disk ${DiskAlias}
 job.RemoveDisk=Removing Disk ${DiskAlias}
 job.ImportVm=Importing VM ${VM} to Cluster ${VdsGroups}
+job.ReinitializeSPM=Trying to reinitialize SPM for Data Center ${StoragePool}
 job.RemoveVmFromImportExport=Removing VM ${VM} image from Storage Domain 
${Storage}
 job.RemoveVmTemplateFromImportExport=Removing VM Template ${VmTemplate} image 
from Storage Domain ${Storage}
 job.ImportVmTemplate=Importing VM Template ${VmTemplate} to Data Center 
${StoragePool}
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 04d6cd9..0c8f372 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
@@ -12,6 +12,7 @@
 import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
+
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.ovirt.engine.core.common.AuditLogType;
@@ -21,17 +22,17 @@
 import org.ovirt.engine.core.common.businessentities.NonOperationalReason;
 import org.ovirt.engine.core.common.businessentities.SpmStatus;
 import org.ovirt.engine.core.common.businessentities.SpmStatusResult;
+import org.ovirt.engine.core.common.businessentities.StorageDomain;
+import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
 import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
 import org.ovirt.engine.core.common.businessentities.StorageDomainType;
+import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap;
 import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMapId;
 import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSDomainsData;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
-import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
-import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.storage_pool;
-import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap;
 import org.ovirt.engine.core.common.businessentities.vds_spm_id_map;
 import org.ovirt.engine.core.common.config.Config;
 import org.ovirt.engine.core.common.config.ConfigValues;
@@ -120,19 +121,21 @@
     }
 
     protected static class IrsProxyData {
-        // TODO the syncObj initial purposs was to lock the IrsBroker creation
-        // but eventually because the IRS is singlethreaded and suppose to have
+        // TODO the syncObj initial purpose was to lock the IrsBroker creation
+        // but eventually because the IRS is single threaded and suppose to 
have
         // quite a load of requests,
-        // In order to avoid unexpected behaviour we have used the syncObj to
+        // In order to avoid unexpected behavior we have used the syncObj to
         // lock each request to the IRS
-        // and by that we caused a searialization of requests to the IRS.
+        // and by that we caused a serialization of requests to the IRS.
         // This lock should be removed as soon as the IrsBroker is turned
-        // multithreaded
+        // multi threaded
         public Object syncObj = new Object();
 
         private final String storagePoolRefreshJobId;
         private final java.util.HashSet<Guid> mTriedVdssList = new 
java.util.HashSet<Guid>();
         private Guid mCurrentVdsId;
+
+        private Guid prefferedHost;
 
         public Guid getCurrentVdsId() {
             return getIrsProxy() != null ? mCurrentVdsId : Guid.Empty;
@@ -186,7 +189,7 @@
 
                     }
                 }
-            } catch (java.lang.Exception ex) {
+            } catch (Exception ex) {
             }
         }
 
@@ -194,7 +197,7 @@
 
         @SuppressWarnings("unchecked")
         private void proceedStoragePoolStats(storage_pool storagePool) {
-            // ugly patch because vdsm doesnt check if host is spm on spm
+            // ugly patch because vdsm doesn't check if host is spm on spm
             // operations
             VDSReturnValue result = null;
             if (mCurrentVdsId != null) {
@@ -225,7 +228,7 @@
                     }
                 }
 
-                // if spm status didnt work or not spm and NOT NETWORK
+                // if spm status didn't work or not spm and NOT NETWORK
                 // PROBLEM
                 // then cause failover with attempts
                 if (result != null && !(result.getExceptionObject() instanceof 
VDSNetworkException)) {
@@ -296,6 +299,14 @@
                     }
                 }
             }
+        }
+
+        public Guid getPrefferedHost() {
+            return prefferedHost;
+        }
+
+        public void setPrefferedHost(Guid prefferedHost) {
+            this.prefferedHost = prefferedHost;
         }
 
         private void proceedStorageDomain(StorageDomain data, int 
dataMasterVersion, storage_pool storagePool) {
@@ -692,11 +703,20 @@
             // deal with the case that there are several hosts with the same 
priority.
             List<VDS> allVds = 
DbFacade.getInstance().getVdsDao().getListForSpmSelection(_storagePoolId);
             List<VDS> vdsRelevantForSpmSelection = new ArrayList<VDS>();
+            Guid prefferedHost = 
getIrsProxyData(_storagePoolId).getPrefferedHost();
+            getIrsProxyData(_storagePoolId).setPrefferedHost(null);
+
             for (VDS vds : allVds) {
                 if (!mTriedVdssList.contains(vds.getId()) && 
!vds.getId().equals(curVdsId)) {
-                    vdsRelevantForSpmSelection.add(vds);
+                    if (vds.getId().equals(prefferedHost)) {
+                        vdsRelevantForSpmSelection.add(0, vds);
+                    }
+                    else {
+                        vdsRelevantForSpmSelection.add(vds);
+                    }
                 }
             }
+
             return vdsRelevantForSpmSelection;
         }
 
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ResetIrsVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ResetIrsVDSCommand.java
index 669b080..7fdaeac 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ResetIrsVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ResetIrsVDSCommand.java
@@ -1,13 +1,15 @@
 package org.ovirt.engine.core.vdsbroker.irsbroker;
 
-import org.ovirt.engine.core.compat.*;
-import org.ovirt.engine.core.common.*;
-import org.ovirt.engine.core.common.businessentities.*;
-import org.ovirt.engine.core.vdsbroker.*;
-import org.ovirt.engine.core.common.errors.*;
-
-import org.ovirt.engine.core.common.vdscommands.*;
-import org.ovirt.engine.core.dal.dbbroker.*;
+import org.ovirt.engine.core.common.AuditLogType;
+import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
+import org.ovirt.engine.core.common.businessentities.storage_pool;
+import org.ovirt.engine.core.common.errors.VdcBllErrors;
+import org.ovirt.engine.core.common.vdscommands.ResetIrsVDSCommandParameters;
+import org.ovirt.engine.core.common.vdscommands.SpmStopVDSCommandParameters;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.vdsbroker.ResourceManager;
 
 public class ResetIrsVDSCommand<P extends ResetIrsVDSCommandParameters> 
extends IrsBrokerCommand<P> {
     public ResetIrsVDSCommand(P parameters) {
@@ -23,6 +25,9 @@
                 .runVdsCommand(VDSCommandType.SpmStop,
                         new SpmStopVDSCommandParameters(vdsId, 
parameters.getStoragePoolId())).getSucceeded()
                 || parameters.getIgnoreStopFailed()) {
+            if (getParameters().getPrefferedSPMId() != null) {
+                
getCurrentIrsProxyData().setPrefferedHost(getParameters().getPrefferedSPMId());
+            }
             getCurrentIrsProxyData().ResetIrs();
             storage_pool pool = 
DbFacade.getInstance().getStoragePoolDao().get(parameters.getStoragePoolId());
             if (pool != null && (pool.getstatus() == 
StoragePoolStatus.NotOperational)) {
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..92940eb 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
@@ -1,9 +1,10 @@
 package org.ovirt.engine.core.vdsbroker.irsbroker;
 
-import org.ovirt.engine.core.vdsbroker.*;
-import org.ovirt.engine.core.common.vdscommands.*;
+import org.ovirt.engine.core.common.vdscommands.ResetIrsVDSCommandParameters;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
+import org.ovirt.engine.core.vdsbroker.ResourceManager;
 
-public class SpmStopOnIrsVDSCommand<P extends IrsBaseVDSCommandParameters> 
extends IrsBrokerCommand<P> {
+public class SpmStopOnIrsVDSCommand<P extends 
SpmStopOnIrsVDSCommandParameters> extends IrsBrokerCommand<P> {
     public SpmStopOnIrsVDSCommand(P parameters) {
         super(parameters);
     }
@@ -13,6 +14,6 @@
         ResourceManager.getInstance().runVdsCommand(
                 VDSCommandType.ResetIrs,
                 new 
ResetIrsVDSCommandParameters(getParameters().getStoragePoolId(),
-                        getCurrentIrsProxyData().getCurrentVdsId()));
+                        getCurrentIrsProxyData().getCurrentVdsId(), 
getParameters().getPrefferedSPMId()));
     }
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SpmStopOnIrsVDSCommandParameters.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SpmStopOnIrsVDSCommandParameters.java
new file mode 100644
index 0000000..f03f536
--- /dev/null
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/SpmStopOnIrsVDSCommandParameters.java
@@ -0,0 +1,25 @@
+package org.ovirt.engine.core.vdsbroker.irsbroker;
+
+import org.ovirt.engine.core.common.vdscommands.IrsBaseVDSCommandParameters;
+import org.ovirt.engine.core.compat.Guid;
+
+public class SpmStopOnIrsVDSCommandParameters extends 
IrsBaseVDSCommandParameters {
+    public SpmStopOnIrsVDSCommandParameters(Guid storagePoolId) {
+        super(storagePoolId);
+    }
+
+    public SpmStopOnIrsVDSCommandParameters(Guid storagePoolId, Guid 
prefferedSPMId) {
+        super(storagePoolId);
+        setPrefferedSPMId(prefferedSPMId);
+    }
+
+    private Guid prefferedSPMId;
+
+    public Guid getPrefferedSPMId() {
+        return prefferedSPMId;
+    }
+
+    public void setPrefferedSPMId(Guid prefferedSPMId) {
+        this.prefferedSPMId = prefferedSPMId;
+    }
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java
index d6d0ea0..8a131fb 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java
@@ -4,6 +4,7 @@
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -16,18 +17,21 @@
 import org.ovirt.engine.core.common.action.FenceVdsActionParameters;
 import org.ovirt.engine.core.common.action.FenceVdsManualyParameters;
 import org.ovirt.engine.core.common.action.MaintenanceNumberOfVdssParameters;
+import org.ovirt.engine.core.common.action.ReinitializeSPMParameters;
 import org.ovirt.engine.core.common.action.RemoveVdsParameters;
 import org.ovirt.engine.core.common.action.UpdateVdsActionParameters;
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VdcReturnValueBase;
 import org.ovirt.engine.core.common.action.VdsActionParameters;
+import 
org.ovirt.engine.core.common.businessentities.BusinessEntitiesDefinitions;
 import org.ovirt.engine.core.common.businessentities.FenceActionType;
 import org.ovirt.engine.core.common.businessentities.RoleType;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
 import org.ovirt.engine.core.common.businessentities.VDSType;
+import org.ovirt.engine.core.common.businessentities.VdsSpmStatus;
 import org.ovirt.engine.core.common.businessentities.VdsStatic;
 import org.ovirt.engine.core.common.businessentities.permissions;
 import org.ovirt.engine.core.common.businessentities.storage_pool;
@@ -124,6 +128,18 @@
     private void setRemoveCommand(UICommand value)
     {
         privateRemoveCommand = value;
+    }
+
+    private UICommand makeSpmCommand;
+
+    public UICommand getMakeSpmCommand()
+    {
+        return makeSpmCommand;
+    }
+
+    private void setMakeSpmCommand(UICommand value)
+    {
+        makeSpmCommand = value;
     }
 
     private UICommand privateActivateCommand;
@@ -291,6 +307,7 @@
         setNewCommand(new UICommand("New", this)); //$NON-NLS-1$
         setEditCommand(new UICommand("Edit", this)); //$NON-NLS-1$
         setEditWithPMemphasisCommand(new UICommand("EditWithPMemphasis", 
this)); //$NON-NLS-1$
+        setMakeSpmCommand(new UICommand("MakeSpm", this)); //$NON-NLS-1$
         setRemoveCommand(new UICommand("Remove", this)); //$NON-NLS-1$
         setActivateCommand(new UICommand("Activate", this, true)); 
//$NON-NLS-1$
         setMaintenanceCommand(new UICommand("Maintenance", this, true)); 
//$NON-NLS-1$
@@ -1673,6 +1690,8 @@
         getNewCommand().setIsAvailable(isAvailable);
         getRemoveCommand().setIsAvailable(isAvailable);
 
+        
getMakeSpmCommand().setIsExecutionAllowed(isMakeSpmCommandAllowed(items));
+
         UpdateConfigureLocalStorageCommandAvailability();
     }
 
@@ -1758,6 +1777,10 @@
         else if (command == getRemoveCommand())
         {
             remove();
+        }
+        else if (command == getMakeSpmCommand())
+        {
+            makeSpm();
         }
         else if (command == getActivateCommand())
         {
@@ -1853,6 +1876,31 @@
         }
     }
 
+    public void makeSpm() {
+        ReinitializeSPMParameters params =
+                new ReinitializeSPMParameters(((VDS) 
getSelectedItem()).getStoragePoolId(),
+                        ((VDS) getSelectedItem()).getId());
+        Frontend.RunAction(VdcActionType.ReinitializeSPM, params);
+
+    }
+
+    private boolean isMakeSpmCommandAllowed(List<VDS> selectedItems) {
+        if (selectedItems.size() != 1)
+            return false;
+
+        VDS vds = selectedItems.get(0);
+
+        if (vds.getStatus() != VDSStatus.Up || vds.getSpmStatus() != 
VdsSpmStatus.None) {
+            return false;
+        }
+
+        if (vds.getVdsSpmPriority() == 
BusinessEntitiesDefinitions.HOST_MIN_SPM_PRIORITY) {
+            return false;
+        }
+
+        return true;
+    }
+
     // @Override
     // public void run(TaskContext context)
     // {
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
index 2be4c22..291efdf 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
@@ -1058,6 +1058,9 @@
     @DefaultStringValue("Maintenance")
     String maintenanceHost();
 
+    @DefaultStringValue("Make SPM")
+    String makeHostSPM();
+
     @DefaultStringValue("Confirm 'Host has been Rebooted'")
     String confirmRebootedHost();
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabHostView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabHostView.java
index d1b8fd6..1c02af0 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabHostView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabHostView.java
@@ -225,6 +225,12 @@
                 return getMainModel().getMaintenanceCommand();
             }
         });
+        getTable().addActionButton(new 
WebAdminButtonDefinition<VDS>(constants.makeHostSPM()) {
+            @Override
+            protected UICommand resolveCommand() {
+                return getMainModel().getMakeSpmCommand();
+            }
+        });
         if (ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly) {
             getTable().addActionButton(new 
WebAdminButtonDefinition<VDS>(constants.confirmRebootedHost(),
                     CommandLocation.OnlyFromFromContext) {


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ife292b85270e6aa8f5bf723ad7d3fa84e325d3d8
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Tal Nisan <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to