Vitor de Lima has uploaded a new change for review. Change subject: core, engine, restapi: Proper default migration policies for ppc64 ......................................................................
core, engine, restapi: Proper default migration policies for ppc64 This patch changes the default option when creating clusters and VMs using the REST API. When omitted, the Migrate On Error parameter for new clusters is disabled when the architecture of the cluster does not support migration. Also, if the user does not specify a migration policy for a new VM, the REST API will disable it in architectures that do not support it. Change-Id: Ib34c4a01fe0c667bafc47bf70b33bb2990ffb7d3 Signed-off-by: Vitor de Lima <vitor.l...@eldorado.org.br> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDefaultResiliencePolicyQuery.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetDefaultResiliencePolicyParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClustersResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java 5 files changed, 110 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/43/21643/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDefaultResiliencePolicyQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDefaultResiliencePolicyQuery.java new file mode 100644 index 0000000..2594ace --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDefaultResiliencePolicyQuery.java @@ -0,0 +1,51 @@ +package org.ovirt.engine.core.bll; + +import org.apache.commons.lang.StringUtils; +import org.ovirt.engine.core.bll.architecture.IsMigrationSupported; +import org.ovirt.engine.core.common.archstrategy.ArchStrategyFactory; +import org.ovirt.engine.core.common.businessentities.ArchitectureType; +import org.ovirt.engine.core.common.businessentities.MigrateOnErrorOptions; +import org.ovirt.engine.core.common.businessentities.VDSGroup; +import org.ovirt.engine.core.common.queries.GetDefaultResiliencePolicyParameters; + +public class GetDefaultResiliencePolicyQuery<P extends GetDefaultResiliencePolicyParameters> extends QueriesCommandBase<P> { + + public GetDefaultResiliencePolicyQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + ArchitectureType architecture = getArchitecture(); + + boolean isMigrationSupported = true; + + if (!architecture.equals(ArchitectureType.undefined)) { + isMigrationSupported = + ArchStrategyFactory.getStrategy(architecture) + .run(new IsMigrationSupported(getParameters().getVdsGroup().getcompatibility_version())) + .returnValue(); + + } + + if (isMigrationSupported) { + setReturnValue(MigrateOnErrorOptions.YES); + } else { + setReturnValue(MigrateOnErrorOptions.NO); + } + + } + + private ArchitectureType getArchitecture() { + VDSGroup group = getParameters().getVdsGroup(); + + if (StringUtils.isNotEmpty(group.getcpu_name())) { + return CpuFlagsManagerHandler.getArchitectureByCpuName(group.getcpu_name(), + group.getcompatibility_version()); + } else if (group.getArchitecture() == null) { + return ArchitectureType.undefined; + } + + return group.getArchitecture(); + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetDefaultResiliencePolicyParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetDefaultResiliencePolicyParameters.java new file mode 100644 index 0000000..4f251f4 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetDefaultResiliencePolicyParameters.java @@ -0,0 +1,21 @@ +package org.ovirt.engine.core.common.queries; + +import org.ovirt.engine.core.common.businessentities.VDSGroup; + +public class GetDefaultResiliencePolicyParameters extends VdcQueryParametersBase { + + public GetDefaultResiliencePolicyParameters(VDSGroup group) { + _vdsGroup = group; + } + + public GetDefaultResiliencePolicyParameters() { + + } + + private VDSGroup _vdsGroup; + + public VDSGroup getVdsGroup() { + return _vdsGroup; + } + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java index d90d989..6d6d253 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java @@ -276,6 +276,7 @@ GetDefaultConfigurationVersion(VdcQueryAuthType.User), OsRepository(VdcQueryAuthType.User), GetArchitectureCapabilities(VdcQueryAuthType.User), + GetDefaultResiliencePolicy(VdcQueryAuthType.User), // Providers GetAllProviders, diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClustersResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClustersResource.java index 910bfd8..d2422ee 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClustersResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClustersResource.java @@ -13,10 +13,12 @@ import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdsGroupOperationParameters; import org.ovirt.engine.core.common.action.VdsGroupParametersBase; +import org.ovirt.engine.core.common.businessentities.MigrateOnErrorOptions; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.mode.ApplicationMode; +import org.ovirt.engine.core.common.queries.GetDefaultResiliencePolicyParameters; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; import org.ovirt.engine.core.common.queries.VdcQueryType; @@ -81,6 +83,17 @@ validateEnums(Cluster.class, cluster); StoragePool pool = getStoragePool(cluster, this); VDSGroup entity = map(cluster, map(pool)); + + if (!cluster.isSetErrorHandling() || !cluster.getErrorHandling().isSetOnError()) { + MigrateOnErrorOptions resiliencePolicy = + getEntity(MigrateOnErrorOptions.class, + VdcQueryType.GetDefaultResiliencePolicy, + new GetDefaultResiliencePolicyParameters(entity), + ""); + + entity.setMigrateOnError(resiliencePolicy); + } + return performCreate(VdcActionType.AddVdsGroup, new VdsGroupOperationParameters(entity), new QueryIdResolver<Guid>(VdcQueryType.GetVdsGroupById, IdQueryParameters.class)); diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java index bc0e26f..7fddbf9 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java @@ -41,13 +41,17 @@ import org.ovirt.engine.core.common.action.RemoveVmParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VmManagementParametersBase; +import org.ovirt.engine.core.common.businessentities.ArchitectureType; import org.ovirt.engine.core.common.businessentities.DiskImage; +import org.ovirt.engine.core.common.businessentities.MigrationSupport; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.VmPayload; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.interfaces.SearchType; +import org.ovirt.engine.core.common.queries.ArchCapabilitiesParameters; +import org.ovirt.engine.core.common.queries.ArchCapabilitiesParameters.ArchCapabilitiesVerb; import org.ovirt.engine.core.common.queries.GetVmFromConfigurationQueryParameters; import org.ovirt.engine.core.common.queries.GetVmTemplateParameters; import org.ovirt.engine.core.common.queries.IdQueryParameters; @@ -56,6 +60,7 @@ import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.compat.Version; public class BackendVmsResource extends AbstractBackendCollectionResource<VM, org.ovirt.engine.core.common.businessentities.VM> @@ -103,8 +108,16 @@ staticVm.setVdsGroupId(getClusterId(vm)); } + VDSGroup cluster = lookupCluster(staticVm.getVdsGroupId()); + staticVm.setUsbPolicy(VmMapper.getUsbPolicyOnCreate(vm.getUsb(), - lookupCluster(staticVm.getVdsGroupId()))); + cluster)); + + if (!vm.isSetPlacementPolicy()) { + if (!isMigrationSupported(cluster)) { + staticVm.setMigrationSupport(MigrationSupport.PINNED_TO_HOST); + } + } if (!isFiltered()) { // if the user set the host-name within placement-policy, rather than the host-id (legal) - @@ -503,6 +516,16 @@ return getEntity(VDSGroup.class, VdcQueryType.GetVdsGroupByVdsGroupId, new IdQueryParameters(id), "GetVdsGroupByVdsGroupId"); } + private boolean isMigrationSupported(VDSGroup cluster) { + HashMap<ArchitectureType, HashMap<Version, Boolean>> migrationMap = + (HashMap<ArchitectureType, HashMap<Version, Boolean>>) getEntity(HashMap.class, + VdcQueryType.GetArchitectureCapabilities, + new ArchCapabilitiesParameters(ArchCapabilitiesVerb.GetMigrationSupport), + "GetArchitectureCapabilities"); + + return migrationMap.get(cluster.getArchitecture()).get(cluster.getcompatibility_version()); + } + protected boolean namedCluster(VM vm) { return vm.isSetCluster() && vm.getCluster().isSetName() && !vm.getCluster().isSetId(); } -- To view, visit http://gerrit.ovirt.org/21643 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib34c4a01fe0c667bafc47bf70b33bb2990ffb7d3 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Vitor de Lima <vitor.l...@eldorado.org.br> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches