Shubhendu Tripathi has uploaded a new change for review.

Change subject: gluster: BLL command to set volume snapshot config
......................................................................

gluster: BLL command to set volume snapshot config

Introduced BLL command to set the volume snapshot configurations

Change-Id: I37b6f4dd02ca4258e5e40e7da11f0a657ac6b330
Signed-off-by: Shubhendu Tripathi <[email protected]>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/UpdateGlusterVolumeSnapshotConfigCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/gluster/UpdateGlusterVolumeSnapshotConfigParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
5 files changed, 230 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/94/36294/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/UpdateGlusterVolumeSnapshotConfigCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/UpdateGlusterVolumeSnapshotConfigCommand.java
new file mode 100644
index 0000000..c02952a
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/UpdateGlusterVolumeSnapshotConfigCommand.java
@@ -0,0 +1,173 @@
+package org.ovirt.engine.core.bll.gluster;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.ovirt.engine.core.bll.LockMessagesMatchUtil;
+import org.ovirt.engine.core.common.AuditLogType;
+import org.ovirt.engine.core.common.action.LockProperties;
+import org.ovirt.engine.core.common.action.LockProperties.Scope;
+import 
org.ovirt.engine.core.common.action.gluster.UpdateGlusterVolumeSnapshotConfigParameters;
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeSnapshotConfigParam;
+import org.ovirt.engine.core.common.errors.VdcBllMessages;
+import org.ovirt.engine.core.common.locks.LockingGroup;
+import org.ovirt.engine.core.common.utils.Pair;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
+import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
+import 
org.ovirt.engine.core.common.vdscommands.gluster.GlusterVolumeSnapshotSetConfigVDSParameters;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.dao.gluster.GlusterVolumeSnapshotConfigDao;
+
+public class UpdateGlusterVolumeSnapshotConfigCommand extends 
GlusterCommandBase<UpdateGlusterVolumeSnapshotConfigParameters> {
+
+    public 
UpdateGlusterVolumeSnapshotConfigCommand(UpdateGlusterVolumeSnapshotConfigParameters
 params) {
+        super(params);
+        setVdsGroupId(params.getClusterId());
+    }
+
+    @Override
+    protected LockProperties applyLockProperties(LockProperties 
lockProperties) {
+        return lockProperties.withScope(Scope.Execution);
+    }
+
+    @Override
+    protected void setActionMessageParameters() {
+        
addCanDoActionMessage(VdcBllMessages.VAR__ACTION__VOLUME_SNAPSHOT_CONFIG_UPDATE);
+    }
+
+    @Override
+    protected boolean canDoAction() {
+        if (!super.canDoAction()) {
+            return false;
+        }
+
+        if (getParameters().getClusterId() == null) {
+            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_CLUSTER_IS_NOT_VALID);
+            return false;
+        }
+
+        if (getParameters() == null || getParameters().getConfigParams() == 
null
+                || getParameters().getConfigParams().size() == 0) {
+            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_GLUSTER_VOLUME_SNAPSHOT_CONFIG_PARAMS_IS_EMPTY);
+            return false;
+        }
+
+        for (GlusterVolumeSnapshotConfigParam param : 
getParameters().getConfigParams()) {
+            if (param.getParamValue() == null || 
param.getParamValue().equals("")) {
+                
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_GLUSTER_VOLUME_SNAPSHOT_CONFIG_PARAM_VALUE_IS_EMPTY);
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    @Override
+    protected void executeCommand() {
+        Guid clusterId = getParameters().getClusterId();
+        Guid volumeId = getParameters().getVolumeId();
+        List<GlusterVolumeSnapshotConfigParam> fetchedConfigParams =
+                
getGlusterVolumeSnapshotConfigDao().getGlusterVolumeSnapshotConfigByClusterId(clusterId);
+
+        // segregate the fetched cluster and volume specific config params
+        Map<String, GlusterVolumeSnapshotConfigParam> 
fetchedClusterConfigParams =
+                new HashMap<String, GlusterVolumeSnapshotConfigParam>();
+        Map<String, GlusterVolumeSnapshotConfigParam> 
fetchedVolumeConfigParams =
+                new HashMap<String, GlusterVolumeSnapshotConfigParam>();
+        for (GlusterVolumeSnapshotConfigParam param : fetchedConfigParams) {
+            if (Guid.isNullOrEmpty(param.getVolumeId())) {
+                fetchedClusterConfigParams.put(param.getParamName(), param);
+            } else if (volumeId != null && 
param.getVolumeId().equals(volumeId)) {
+                fetchedVolumeConfigParams.put(param.getParamName(), param);
+            }
+        }
+
+        List<GlusterVolumeSnapshotConfigParam> configParams = 
getParameters().getConfigParams();
+
+        // segregate the cluster and volume specific config params
+        Map<String, GlusterVolumeSnapshotConfigParam> clusterConfigParams =
+                new HashMap<String, GlusterVolumeSnapshotConfigParam>();
+        Map<String, GlusterVolumeSnapshotConfigParam> volumeConfigParams =
+                new HashMap<String, GlusterVolumeSnapshotConfigParam>();
+        for (GlusterVolumeSnapshotConfigParam param : configParams) {
+            if (Guid.isNullOrEmpty(param.getVolumeId())) {
+                clusterConfigParams.put(param.getParamName(), param);
+            } else {
+                volumeConfigParams.put(param.getParamName(), param);
+            }
+        }
+
+        // form the final list of updated config params
+        List<GlusterVolumeSnapshotConfigParam> updatedClusterConfigParams =
+                new ArrayList<GlusterVolumeSnapshotConfigParam>();
+        for (GlusterVolumeSnapshotConfigParam cfgParam : 
clusterConfigParams.values()) {
+            GlusterVolumeSnapshotConfigParam fetchedCfgParam = 
fetchedClusterConfigParams.get(cfgParam.getParamName());
+            if 
(!(fetchedCfgParam.getParamValue().equals(cfgParam.getParamValue()))) {
+                updatedClusterConfigParams.add(cfgParam);
+            }
+        }
+        List<GlusterVolumeSnapshotConfigParam> updatedVolumeConfigParams =
+                new ArrayList<GlusterVolumeSnapshotConfigParam>();
+        for (GlusterVolumeSnapshotConfigParam cfgParam : 
volumeConfigParams.values()) {
+            GlusterVolumeSnapshotConfigParam fetchedCfgParam = 
fetchedVolumeConfigParams.get(cfgParam.getParamName());
+            if 
(!(fetchedCfgParam.getParamValue().equals(cfgParam.getParamValue()))) {
+                updatedVolumeConfigParams.add(cfgParam);
+            }
+        }
+
+        // TODO: execute vds command to set the configurations
+        List<GlusterVolumeSnapshotConfigParam> vdsParam = new 
ArrayList<GlusterVolumeSnapshotConfigParam>();
+        for (GlusterVolumeSnapshotConfigParam param : 
updatedClusterConfigParams)
+            vdsParam.add(param);
+        for (GlusterVolumeSnapshotConfigParam param : 
updatedVolumeConfigParams)
+            vdsParam.add(param);
+        VDSReturnValue retVal = 
runVdsCommand(VDSCommandType.SetGlusterVolumeSnapshotConfig,
+                new 
GlusterVolumeSnapshotSetConfigVDSParameters(upServer.getId(), vdsParam));
+        setSucceeded(retVal.getSucceeded());
+
+        if (getSucceeded()) {
+            // persist the configurations
+            for (GlusterVolumeSnapshotConfigParam param : 
updatedClusterConfigParams) {
+                
getGlusterVolumeSnapshotConfigDao().updateConfigByClusterIdAndName(param.getClusterId(),
+                        param.getParamName(),
+                        param.getParamValue());
+            }
+            for (GlusterVolumeSnapshotConfigParam param : 
updatedVolumeConfigParams) {
+                
getGlusterVolumeSnapshotConfigDao().updateConfigByVolumeIdIdAndName(param.getClusterId(),
+                        param.getVolumeId(),
+                        param.getParamName(),
+                        param.getParamValue());
+            }
+        } else {
+            
handleVdsError(AuditLogType.GLUSTER_VOLUME_SNAPSHOT_CONFIG_UPDATE_FAILED, 
retVal.getVdsError().getMessage());
+        }
+    }
+
+    protected GlusterVolumeSnapshotConfigDao 
getGlusterVolumeSnapshotConfigDao() {
+        return DbFacade.getInstance().getGlusterVolumeSnapshotConfigDao();
+    }
+
+    @Override
+    protected Map<String, Pair<String, String>> getExclusiveLocks() {
+        Guid clusterId = 
getParameters().getConfigParams().get(0).getClusterId();
+        if (!isInternalExecution()) {
+            return Collections.singletonMap(clusterId.toString(),
+                    LockMessagesMatchUtil.makeLockingPair(LockingGroup.GLUSTER,
+                            VdcBllMessages.ACTION_TYPE_FAILED_OBJECT_LOCKED));
+        }
+        return null;
+    }
+
+    @Override
+    public AuditLogType getAuditLogTypeValue() {
+        if (getSucceeded()) {
+            return AuditLogType.GLUSTER_VOLUME_SNAPSHOT_CREATED;
+        } else {
+            return errorType == null ? 
AuditLogType.GLUSTER_VOLUME_SNAPSHOT_CONFIG_UPDATE_FAILED : errorType;
+        }
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
index ab9d7e1..786ef32 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
@@ -386,6 +386,8 @@
     GLUSTER_GEOREP_SESSION_DETECTED_FROM_CLI(4098, AuditLogSeverity.WARNING),
     GLUSTER_VOLUME_SNAPSHOT_CREATED(4099),
     GLUSTER_VOLUME_SNAPSHOT_CREATE_FAILED(4100, AuditLogSeverity.ERROR),
+    GLUSTER_VOLUME_SNAPSHOT_CONFIG_UPDATED(4101),
+    GLUSTER_VOLUME_SNAPSHOT_CONFIG_UPDATE_FAILED(4102, AuditLogSeverity.ERROR),
     USER_FORCE_SELECTED_SPM(159),
     USER_VDS_RESTART(41),
     USER_FAILED_VDS_RESTART(107, AuditLogSeverity.ERROR),
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 411eff2..1c5bdab 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
@@ -300,6 +300,7 @@
     CommitRemoveGlusterVolumeBricks(1424, 
ActionGroup.MANIPULATE_GLUSTER_VOLUME, false, QuotaDependency.NONE),
     RefreshGlusterVolumeDetails(1425, ActionGroup.MANIPULATE_GLUSTER_VOLUME, 
QuotaDependency.NONE),
     CreateGlusterVolumeSnapshot(1426, ActionGroup.MANIPULATE_GLUSTER_VOLUME, 
QuotaDependency.NONE),
+    UpdateGlusterVolumeSnapshotConfig(1427, 
ActionGroup.MANIPULATE_GLUSTER_VOLUME, QuotaDependency.NONE),
 
     // Scheduling Policy
     AddClusterPolicy(1450, ActionGroup.EDIT_STORAGE_POOL_CONFIGURATION, false, 
QuotaDependency.NONE),
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/gluster/UpdateGlusterVolumeSnapshotConfigParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/gluster/UpdateGlusterVolumeSnapshotConfigParameters.java
new file mode 100644
index 0000000..74afb95
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/gluster/UpdateGlusterVolumeSnapshotConfigParameters.java
@@ -0,0 +1,51 @@
+package org.ovirt.engine.core.common.action.gluster;
+
+import java.util.List;
+
+import org.ovirt.engine.core.common.action.VdcActionParametersBase;
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeSnapshotConfigParam;
+import org.ovirt.engine.core.compat.Guid;
+
+public class UpdateGlusterVolumeSnapshotConfigParameters extends 
VdcActionParametersBase {
+    private static final long serialVersionUID = 2015321730118872977L;
+
+    private Guid clusterId;
+    // Nullable, so not extending the class from GlusterVolumeParameters
+    private Guid volumeId;
+    private List<GlusterVolumeSnapshotConfigParam> configParams;
+
+    public UpdateGlusterVolumeSnapshotConfigParameters() {
+    }
+
+    public UpdateGlusterVolumeSnapshotConfigParameters(Guid clusterId,
+            Guid volumeId,
+            List<GlusterVolumeSnapshotConfigParam> params) {
+        this.clusterId = clusterId;
+        this.volumeId = volumeId;
+        this.configParams = params;
+    }
+
+    public Guid getClusterId() {
+        return this.clusterId;
+    }
+
+    public void setClusterId(Guid id) {
+        this.clusterId = id;
+    }
+
+    public Guid getVolumeId() {
+        return this.volumeId;
+    }
+
+    public void setVolumeId(Guid id) {
+        this.volumeId = id;
+    }
+
+    public List<GlusterVolumeSnapshotConfigParam> getConfigParams() {
+        return this.configParams;
+    }
+
+    public void setConfigParams(List<GlusterVolumeSnapshotConfigParam> params) 
{
+        this.configParams = params;
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
index e9a5693..9299030 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
@@ -110,6 +110,7 @@
     VAR__ACTION__UPDATE_SLA_POLICY,
     VAR__ACTION__UPDATE_VM_VERSION,
     VAR__ACTION__VOLUME_SNAPSHOT_CREATE,
+    VAR__ACTION__VOLUME_SNAPSHOT_CONFIG_UPDATE,
 
     // Host statuses replacements
     VAR__HOST_STATUS__UP,
@@ -897,6 +898,8 @@
     
ACTION_TYPE_FAILED_GLUSTER_VOLUME_CANNOT_STOP_REMOVE_BRICK_IN_PROGRESS(ErrorType.CONFLICT),
     ACTION_TYPE_FAILED_GLUSTER_VOLUME_IS_DOWN(ErrorType.CONFLICT),
     
ACTION_TYPE_FAILED_GLUSTER_VOLUME_IS_NOT_THINLY_PROVISIONED(ErrorType.CONFLICT),
+    
ACTION_TYPE_FAILED_GLUSTER_VOLUME_SNAPSHOT_CONFIG_PARAMS_IS_EMPTY(ErrorType.BAD_PARAMETERS),
+    
ACTION_TYPE_FAILED_GLUSTER_VOLUME_SNAPSHOT_CONFIG_PARAM_VALUE_IS_EMPTY(ErrorType.BAD_PARAMETERS),
     ACTION_TYPE_FAILED_NOT_A_GLUSTER_VOLUME_BRICK(ErrorType.BAD_PARAMETERS),
     
ACTION_TYPE_FAILED_GLUSTER_VOLUME_REMOVE_BRICKS_NOT_STARTED(ErrorType.CONFLICT),
     
ACTION_TYPE_FAILED_GLUSTER_VOLUME_REMOVE_BRICKS_NOT_FINISHED(ErrorType.CONFLICT),


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

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

Reply via email to