Martin Peřina has uploaded a new change for review. Change subject: core: Add fencing policy as parameter to fenceNode VDSM verb ......................................................................
core: Add fencing policy as parameter to fenceNode VDSM verb Add fencing policy as a parameter to fenceNode VDSM verb. This policy will be used during VdsNotResponding handling. Change-Id: I61ca142f0630ec2d8c1ec16e44c01af989c19079 Bug-Url: https://bugzilla.redhat.com/1090799 Signed-off-by: Martin Perina <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceExecutor.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceVdsBaseCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestartVdsCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsNotRespondingTreatmentCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/FenceVdsActionParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/FenceVdsVDSCommandParameters.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/FenceVdsVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java 12 files changed, 66 insertions(+), 10 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/84/30584/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceExecutor.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceExecutor.java index 734c412..e46d3d4 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceExecutor.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceExecutor.java @@ -8,6 +8,7 @@ import org.ovirt.engine.core.common.businessentities.FenceActionType; import org.ovirt.engine.core.common.businessentities.FenceAgentOrder; import org.ovirt.engine.core.common.businessentities.FenceStatusReturnValue; +import org.ovirt.engine.core.common.businessentities.FencingPolicy; import org.ovirt.engine.core.common.businessentities.NonOperationalReason; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; @@ -38,8 +39,13 @@ private Guid proxyHostId; private String proxyHostName; private Guid skippedProxyHostId=null; + private FencingPolicy fencingPolicy; public FenceExecutor(VDS vds, FenceActionType actionType) { + this(vds, actionType, null); + } + + public FenceExecutor(VDS vds, FenceActionType actionType, FencingPolicy fencingPolicy) { // TODO remove if block after UI patch that should set also cluster & proxy preferences in GetNewVdsFenceStatusParameters if (! vds.getId().equals(Guid.Empty)) { VDS dbVds = DbFacade.getInstance().getVdsDao().get(vds.getId()); @@ -52,6 +58,7 @@ } _vds = vds; _action = actionType; + this.fencingPolicy = fencingPolicy; } public boolean findProxyHost() { @@ -219,7 +226,7 @@ VDSCommandType.FenceVds, new FenceVdsVDSCommandParameters(proxyHostId, _vds.getId(), managementIp, managementPort, managementAgent, managementUser, managementPassword, - managementOptions, actionType)); + managementOptions, actionType, fencingPolicy)); } private String getManagementOptions(FenceAgentOrder order) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceVdsBaseCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceVdsBaseCommand.java index 2180d88..c3932be 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceVdsBaseCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceVdsBaseCommand.java @@ -618,7 +618,8 @@ private FenceExecutor createFenceExecutor(FenceActionType actionType) { return new FenceExecutor( getVds(), - actionType + actionType, + getParameters().getFencingPolicy() ); } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestartVdsCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestartVdsCommand.java index a2f8f4c..aed57c3 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestartVdsCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestartVdsCommand.java @@ -124,6 +124,8 @@ FenceVdsActionParameters params = new FenceVdsActionParameters(vdsId, fenceAction); params.setParentCommand(VdcActionType.RestartVds); params.setSessionId(sessionId); + params.setFencingPolicy(getParameters().getFencingPolicy()); + // If Host was in Maintenance, and was restarted manually , it should preserve its status after reboot if (getParameters().getParentCommand() != VdcActionType.VdsNotRespondingTreatment && getVds().getStatus() == VDSStatus.Maintenance) { params.setChangeHostToMaintenanceOnStart(true); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsNotRespondingTreatmentCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsNotRespondingTreatmentCommand.java index bc67b1c..6356c29 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsNotRespondingTreatmentCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsNotRespondingTreatmentCommand.java @@ -14,6 +14,7 @@ import org.ovirt.engine.core.common.action.SetStoragePoolStatusParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; +import org.ovirt.engine.core.common.businessentities.FencingPolicy; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; import org.ovirt.engine.core.common.businessentities.VdsSpmStatus; @@ -76,6 +77,12 @@ return; } + // load cluster fencing policy + FencingPolicy fencingPolicy = getDbFacade().getVdsGroupDao().get( + getVds().getVdsGroupId() + ).getFencingPolicy(); + getParameters().setFencingPolicy(fencingPolicy); + // Make sure that the StopVdsCommand that runs by the RestartVds // don't write over our job, and disrupt marking the job status correctly ExecutionContext ec = (ExecutionContext) ObjectUtils.clone(this.getExecutionContext()); diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/FenceVdsActionParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/FenceVdsActionParameters.java index 3b76cb5..e0a5e2e 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/FenceVdsActionParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/FenceVdsActionParameters.java @@ -1,6 +1,7 @@ package org.ovirt.engine.core.common.action; import org.ovirt.engine.core.common.businessentities.FenceActionType; +import org.ovirt.engine.core.common.businessentities.FencingPolicy; import org.ovirt.engine.core.compat.Guid; public class FenceVdsActionParameters extends VdsActionParameters { @@ -16,6 +17,8 @@ private boolean keepPolicyPMEnabled; private FenceActionType action; + + private FencingPolicy fencingPolicy; public FenceVdsActionParameters() { this(null, FenceActionType.Restart); @@ -50,4 +53,12 @@ public void setChangeHostToMaintenanceOnStart(boolean changeHostStatusOnStart) { this.changeHostToMaintenanceOnStart = changeHostStatusOnStart; } + + public FencingPolicy getFencingPolicy() { + return fencingPolicy; + } + + public void setFencingPolicy(FencingPolicy fencingPolicy) { + this.fencingPolicy = fencingPolicy; + } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/FenceVdsVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/FenceVdsVDSCommandParameters.java index dea35af..403c20e 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/FenceVdsVDSCommandParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/FenceVdsVDSCommandParameters.java @@ -1,11 +1,12 @@ package org.ovirt.engine.core.common.vdscommands; import org.ovirt.engine.core.common.businessentities.FenceActionType; +import org.ovirt.engine.core.common.businessentities.FencingPolicy; import org.ovirt.engine.core.compat.Guid; public class FenceVdsVDSCommandParameters extends VdsIdVDSCommandParametersBase { public FenceVdsVDSCommandParameters(Guid vdsId, Guid targetVdsId, String ip, String port, String type, String user, - String password, String options, FenceActionType action) { + String password, String options, FenceActionType action, FencingPolicy fencingPolicy) { super(vdsId); _targetVdsId = targetVdsId; _ip = ip; @@ -15,6 +16,7 @@ _password = password; _action = action; _options = options; + this.fencingPolicy = fencingPolicy; } private Guid _targetVdsId; @@ -25,6 +27,8 @@ private String _password; private String _options; private FenceActionType _action; + + private FencingPolicy fencingPolicy; public Guid getTargetVdsID() { return _targetVdsId; @@ -63,6 +67,10 @@ _action = FenceActionType.Restart; } + public FencingPolicy getFencingPolicy() { + return fencingPolicy; + } + @Override public String toString() { return String.format("%s, targetVdsId = %s, action = %s, ip = %s, port = %s, type = %s, user = %s, " + diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java index 3f651da..1c297c5 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java @@ -417,7 +417,8 @@ String password, String action, String secured, - String options) { + String options, + Map<String, Object> fencingPolicy) { JsonRpcRequest request = new RequestBuilder("Host.fenceNode").withParameter("addr", ip) .withParameter("port", port) @@ -427,6 +428,7 @@ .withParameter("action", action) .withOptionalParameter("secure", secured) .withOptionalParameter("options", options) + .withParameter("fencingPolicy", fencingPolicy) .build(); Map<String, Object> response = new FutureMap(this.client, request).withResponseKey("power") diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/FenceVdsVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/FenceVdsVDSCommand.java index e3f2786..6319b66 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/FenceVdsVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/FenceVdsVDSCommand.java @@ -1,8 +1,12 @@ package org.ovirt.engine.core.vdsbroker.vdsbroker; +import java.util.HashMap; +import java.util.Map; + import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.businessentities.FenceActionType; import org.ovirt.engine.core.common.businessentities.FenceStatusReturnValue; +import org.ovirt.engine.core.common.businessentities.FencingPolicy; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.vdscommands.FenceVdsVDSCommandParameters; import org.ovirt.engine.core.compat.Guid; @@ -55,7 +59,8 @@ if (!isAlreadyInRequestedStatus(options)) { _result = getBroker().fenceNode(getParameters().getIp(), "", getParameters().getType(), getParameters().getUser(), - getParameters().getPassword(), getActualActionName(), "", options); + getParameters().getPassword(), getActualActionName(), "", options, + convertFencingPolicy(getParameters().getFencingPolicy())); proceedProxyReturnValue(); getVDSReturnValue().setSucceeded(false); @@ -111,7 +116,8 @@ FenceActionType action = getParameters().getAction(); _result = getBroker().fenceNode(getParameters().getIp(), "", getParameters().getType(), getParameters().getUser(), - getParameters().getPassword(), "status", "", options); + getParameters().getPassword(), "status", "", options, + convertFencingPolicy(getParameters().getFencingPolicy())); if (_result.power != null) { String powerStatus = _result.power.toLowerCase(); if ((action == FenceActionType.Start && powerStatus.equals("on")) || @@ -121,6 +127,14 @@ return ret; } + private Map<String, Object> convertFencingPolicy(FencingPolicy fencingPolicy) { + Map<String, Object> map = new HashMap<>(); + if (fencingPolicy != null) { + map.put(VdsProperties.SKIP_FENCING_IF_SD_ACTIVE, fencingPolicy.isSkipFencingIfSDActive()); + } + return map; + } + @Override protected StatusForXmlRpc getReturnStatus() { return (_result.mStatus != null) ? _result.mStatus : new StatusForXmlRpc(); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java index 64a7c68..6385517 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java @@ -94,7 +94,7 @@ StatusOnlyReturnForXmlRpc setSafeNetworkConfig(); FenceStatusReturnForXmlRpc fenceNode(String ip, String port, String type, String user, String password, - String action, String secured, String options); + String action, String secured, String options, Map<String, Object> fencingPolicy); ServerConnectionStatusReturnForXmlRpc connectStorageServer(int serverType, String spUUID, Map<String, String>[] args); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java index 3670f39..826c32f 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java @@ -365,6 +365,10 @@ public static final String QOS_PEAK = "peak"; public static final String QOS_BURST = "burst"; + // fencing policy + public static final String SKIP_FENCING_IF_SD_ACTIVE = "skipFencingIfSDActive"; + + public static String migrationMethodtoString(MigrationMethod method) { switch (method) { case OFFLINE: diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java index de27444..5b22632 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java @@ -76,7 +76,7 @@ public Map<String, Object> setSafeNetworkConfig(); public Map<String, Object> fenceNode(String ip, String port, String type, String user, String password, - String action, String secured, String options); + String action, String secured, String options, Map<String, Object> fencingPolicy); public Map<String, Object> connectStorageServer(int serverType, String spUUID, Map<String, String>[] args); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java index 0d54aaa..0f49554d 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java @@ -400,10 +400,10 @@ @Override public FenceStatusReturnForXmlRpc fenceNode(String ip, String port, String type, String user, String password, - String action, String secured, String options) { + String action, String secured, String options, Map<String, Object> fencingPolicy) { try { Map<String, Object> xmlRpcReturnValue = vdsServer.fenceNode(ip, port, type, user, password, action, - secured, options); + secured, options, fencingPolicy); FenceStatusReturnForXmlRpc wrapper = new FenceStatusReturnForXmlRpc(xmlRpcReturnValue); return wrapper; } catch (UndeclaredThrowableException ute) { -- To view, visit http://gerrit.ovirt.org/30584 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I61ca142f0630ec2d8c1ec16e44c01af989c19079 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Martin Peřina <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
