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
