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

Reply via email to