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
