Ravi Nori has uploaded a new change for review.

Change subject: engine : Persist VdcReturnValue in CommandEntity
......................................................................

engine : Persist VdcReturnValue in CommandEntity

Add return_value and return_value class to
command_entities table

Change-Id: I35f4601fe8aceae6d98a76334c55db77097205b5
Bug-Url: https://bugzilla.redhat.com/1083769
Signed-off-by: Ravi Nori <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandExecutor.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/CommandEntity.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/CommandEntityDaoDbFacadeImpl.java
M packaging/dbscripts/command_entities_sp.sql
A packaging/dbscripts/upgrade/03_05_0690_add_cmd_entity_return_value.sql
6 files changed, 61 insertions(+), 19 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/72/28672/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
index c3f1d5a..6939cee 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
@@ -2101,7 +2101,8 @@
                         getActionType(),
                         getParameters(),
                         commandStatus,
-                        enableCallBack));
+                        enableCallBack,
+                        getReturnValue()));
     }
 
     protected void removeCommand() {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandExecutor.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandExecutor.java
index accccd0..e843659 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandExecutor.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandExecutor.java
@@ -113,7 +113,7 @@
         }
         VdcReturnValueBase result = 
BackendUtils.getBackendCommandObjectsHandler(log).runAction(command, null);
         if (callBack != null) {
-            updateCommandStatus(command, result);
+            updateCommand(command, result);
             callBack.executed(result);
         }
         return result;
@@ -128,15 +128,17 @@
         }
     }
 
-    private void updateCommandStatus(final CommandBase<?> command,
-                                     final VdcReturnValueBase result) {
+    private void updateCommand(final CommandBase<?> command,
+                               final VdcReturnValueBase result) {
+        CommandEntity cmdEntity = 
coco.getCommandEntity(command.getCommandId());
+        cmdEntity.setReturnValue(result);
         if (!result.getCanDoAction()) {
-            command.setCommandStatus(CommandStatus.FAILED);
-            return;
+            cmdEntity.setCommandStatus(CommandStatus.FAILED);
+        } else
+        if (CommandStatus.ACTIVE_SYNC.equals(cmdEntity.getCommandStatus())) {
+            cmdEntity.setCommandStatus(result.getSucceeded() ? 
CommandStatus.SUCCEEDED : CommandStatus.FAILED);
         }
-        if 
(CommandStatus.ACTIVE_SYNC.equals(coco.getCommandStatus(command.getCommandId())))
 {
-            command.setCommandStatus(result.getSucceeded() ? 
CommandStatus.SUCCEEDED : CommandStatus.FAILED);
-        }
+        coco.persistCommand(cmdEntity);
     }
 
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/CommandEntity.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/CommandEntity.java
index ffe18c3..005918a 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/CommandEntity.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/CommandEntity.java
@@ -4,6 +4,7 @@
 
 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.utils.ObjectUtils;
 import org.ovirt.engine.core.compat.CommandStatus;
 import org.ovirt.engine.core.compat.Guid;
@@ -15,6 +16,7 @@
     private Guid rootCommandId;
     private VdcActionType commandType;
     private VdcActionParametersBase actionParameters;
+    private VdcReturnValueBase returnValue;
     private Date createdAt;
     private CommandStatus commandStatus = CommandStatus.UNKNOWN;
     private boolean callBackEnabled = false;
@@ -112,7 +114,7 @@
         this.callBackNotified = callBackNotified;
     }
 
-    public static CommandEntity buildCommandEntity(Guid commandId, Guid 
rootCommandId, VdcActionType actionType, VdcActionParametersBase params, 
CommandStatus status, boolean callBackEnabled) {
+    public static CommandEntity buildCommandEntity(Guid commandId, Guid 
rootCommandId, VdcActionType actionType, VdcActionParametersBase params, 
CommandStatus status, boolean callBackEnabled, VdcReturnValueBase returnValue) {
         CommandEntity entity = new CommandEntity();
         entity.setId(commandId);
         entity.setRootCommandId(rootCommandId);
@@ -120,6 +122,15 @@
         entity.setActionParameters(params);
         entity.setCommandStatus(status);
         entity.setCallBackEnabled(callBackEnabled);
+        entity.setReturnValue(returnValue);
         return entity;
     }
+
+    public VdcReturnValueBase getReturnValue() {
+        return returnValue;
+    }
+
+    public void setReturnValue(VdcReturnValueBase returnValue) {
+        this.returnValue = returnValue;
+    }
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/CommandEntityDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/CommandEntityDaoDbFacadeImpl.java
index e562b71..cf5ee14 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/CommandEntityDaoDbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/CommandEntityDaoDbFacadeImpl.java
@@ -8,6 +8,7 @@
 import org.apache.commons.lang.StringUtils;
 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.businessentities.CommandEntity;
 import org.ovirt.engine.core.compat.CommandStatus;
 import org.ovirt.engine.core.compat.Guid;
@@ -29,6 +30,7 @@
             
result.setCommandType(VdcActionType.forValue(resultSet.getInt("command_type")));
             
result.setRootCommandId(Guid.createGuidFromString(resultSet.getString("root_command_id")));
             
result.setActionParameters(deserializeParameters(resultSet.getString("action_parameters"),
 resultSet.getString("action_parameters_class")));
+            
result.setReturnValue(deserializeReturnValue(resultSet.getString("return_value"),
 resultSet.getString("return_value_class")));
             
result.setCommandStatus(getCommandStatus(resultSet.getString("status")));
             
result.setCallBackEnabled(resultSet.getBoolean("callback_enabled"));
             
result.setCallBackNotified(resultSet.getBoolean("callback_notified"));
@@ -57,7 +59,13 @@
                 .addValue("action_parameters", 
serializeParameters(entity.getActionParameters()))
                 .addValue("action_parameters_class", 
entity.getActionParameters() == null ? null : 
entity.getActionParameters().getClass().getName())
                 .addValue("status", entity.getCommandStatus().toString())
-                .addValue("callback_enabled", entity.isCallBackEnabled());
+                .addValue("callback_enabled", entity.isCallBackEnabled())
+                .addValue("return_value", 
serializeReturnValue(entity.getReturnValue()))
+                .addValue("return_value_class", entity.getReturnValue() == 
null ? null : entity.getReturnValue().getClass().getName());
+    }
+
+    private String serializeReturnValue(VdcReturnValueBase retVal) {
+        return SerializationFactory.getSerializer().serialize(retVal);
     }
 
     private String serializeParameters(VdcActionParametersBase params) {
@@ -65,6 +73,16 @@
     }
 
     @SuppressWarnings("unchecked")
+    private static VdcReturnValueBase deserializeReturnValue(String payload, 
String className) {
+        if (className == null) {
+            return null;
+        }
+        Class<Serializable> retValueClass = (Class<Serializable>) 
ReflectionUtils.getClassFor(className);
+        return (VdcReturnValueBase) 
SerializationFactory.getDeserializer().deserialize(payload,
+                retValueClass);
+    }
+
+    @SuppressWarnings("unchecked")
     private static VdcActionParametersBase deserializeParameters(String 
payload, String className) {
         if (className == null) {
             return null;
diff --git a/packaging/dbscripts/command_entities_sp.sql 
b/packaging/dbscripts/command_entities_sp.sql
index ea51c46..c57fcb2 100644
--- a/packaging/dbscripts/command_entities_sp.sql
+++ b/packaging/dbscripts/command_entities_sp.sql
@@ -4,12 +4,14 @@
        v_action_parameters text,
        v_action_parameters_class varchar(256),
        v_status varchar(20),
-       v_callback_enabled boolean)
+       v_callback_enabled boolean,
+       v_return_value text,
+       v_return_value_class varchar(256))
 RETURNS VOID
    AS $procedure$
 BEGIN
-       INSERT INTO command_entities(command_id, command_type, root_command_id, 
action_parameters, action_parameters_class, created_at, status, 
callback_enabled)
-              VALUES(v_command_id, v_command_type, v_root_command_id, 
v_action_parameters, v_action_parameters_class, NOW(), v_status, 
v_callback_enabled);
+       INSERT INTO command_entities(command_id, command_type, root_command_id, 
action_parameters, action_parameters_class, created_at, status, 
callback_enabled, return_value, return_value_class)
+              VALUES(v_command_id, v_command_type, v_root_command_id, 
v_action_parameters, v_action_parameters_class, NOW(), v_status, 
v_callback_enabled, v_return_value, v_return_value_class);
 END; $procedure$
 LANGUAGE plpgsql;
 
@@ -20,7 +22,9 @@
        v_action_parameters text,
        v_action_parameters_class varchar(256),
        v_status varchar(20),
-       v_callback_enabled boolean)
+       v_callback_enabled boolean,
+       v_return_value text,
+       v_return_value_class varchar(256))
 RETURNS VOID
    AS $procedure$
 BEGIN
@@ -30,7 +34,9 @@
           action_parameters = v_action_parameters,
           action_parameters_class = v_action_parameters_class,
           status = v_status,
-          callback_enabled = v_callback_enabled
+          callback_enabled = v_callback_enabled,
+          return_value = v_return_value,
+          return_value_class = v_return_value_class
       WHERE command_id = v_command_id;
 END; $procedure$
 LANGUAGE plpgsql;
@@ -66,14 +72,16 @@
        v_action_parameters text,
        v_action_parameters_class varchar(256),
        v_status varchar(20),
-       v_callback_enabled boolean)
+       v_callback_enabled boolean,
+       v_return_value text,
+       v_return_value_class varchar(256))
 RETURNS VOID
    AS $procedure$
 BEGIN
       IF NOT EXISTS (SELECT 1 from command_entities where command_id = 
v_command_id) THEN
-            PERFORM InsertCommandEntity (v_command_id, v_command_type, 
v_root_command_id, v_action_parameters, v_action_parameters_class, v_status, 
v_callback_enabled);
+            PERFORM InsertCommandEntity (v_command_id, v_command_type, 
v_root_command_id, v_action_parameters, v_action_parameters_class, v_status, 
v_callback_enabled, v_return_value, v_return_value_class);
       ELSE
-            PERFORM UpdateCommandEntity (v_command_id, v_command_type, 
v_root_command_id, v_action_parameters, v_action_parameters_class, v_status, 
v_callback_enabled);
+            PERFORM UpdateCommandEntity (v_command_id, v_command_type, 
v_root_command_id, v_action_parameters, v_action_parameters_class, v_status, 
v_callback_enabled, v_return_value, v_return_value_class);
       END IF;
 END; $procedure$
 LANGUAGE plpgsql;
diff --git 
a/packaging/dbscripts/upgrade/03_05_0690_add_cmd_entity_return_value.sql 
b/packaging/dbscripts/upgrade/03_05_0690_add_cmd_entity_return_value.sql
new file mode 100644
index 0000000..40b88f2
--- /dev/null
+++ b/packaging/dbscripts/upgrade/03_05_0690_add_cmd_entity_return_value.sql
@@ -0,0 +1,2 @@
+select fn_db_add_column('command_entities', 'return_value', 'text');
+select fn_db_add_column('command_entities', 'return_value_class', 
'varchar(256)');


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

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

Reply via email to