Updated Branches: refs/heads/trunk e59e85a61 -> 4059a69ed
AMBARI-3934 Custom Action: Enhance host_role_command table to record end time and structured output (dsen) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/4059a69e Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/4059a69e Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/4059a69e Branch: refs/heads/trunk Commit: 4059a69ed5ede2aab6fdb27b90df3496497852c0 Parents: e59e85a Author: Dmitry Sen <[email protected]> Authored: Fri Nov 29 19:00:04 2013 +0200 Committer: Dmitry Sen <[email protected]> Committed: Fri Nov 29 19:09:46 2013 +0200 ---------------------------------------------------------------------- .../actionmanager/ActionDBAccessorImpl.java | 12 ++++++++ .../server/actionmanager/HostRoleCommand.java | 22 +++++++++++++++ .../ambari/server/agent/CommandReport.java | 12 ++++++++ .../server/controller/TaskStatusResponse.java | 22 ++++++++++++++- .../internal/TaskResourceProvider.java | 4 +++ .../orm/entities/HostRoleCommandEntity.java | 29 ++++++++++++++++++++ .../main/resources/Ambari-DDL-Oracle-CREATE.sql | 2 +- .../resources/Ambari-DDL-Postgres-CREATE.sql | 2 +- .../Ambari-DDL-Postgres-REMOTE-CREATE.sql | 2 +- .../src/main/resources/properties.json | 2 ++ .../upgrade/ddl/Ambari-DDL-Oracle-UPGRADE.sql | 4 +++ .../ddl/Ambari-DDL-Postgres-UPGRADE-1.3.0.sql | 4 +++ .../actionmanager/TestActionDBAccessorImpl.java | 5 ++++ .../server/actionmanager/TestActionManager.java | 12 ++++++-- 14 files changed, 128 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/4059a69e/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java index d0cba5e..3fcf4f4 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java @@ -117,6 +117,7 @@ public class ActionDBAccessorImpl implements ActionDBAccessor { */ @Override public void abortOperation(long requestId) { + long now = System.currentTimeMillis(); List<HostRoleCommandEntity> commands = hostRoleCommandDAO.findByRequest(requestId); for (HostRoleCommandEntity command : commands) { @@ -124,6 +125,7 @@ public class ActionDBAccessorImpl implements ActionDBAccessor { command.getStatus() == HostRoleStatus.IN_PROGRESS || command.getStatus() == HostRoleStatus.PENDING) { command.setStatus(HostRoleStatus.ABORTED); + command.setEndTime(now); hostRoleCommandDAO.merge(command); LOG.info("Aborting command. Hostname " + command.getHostName() + " role " + command.getRole() @@ -141,10 +143,12 @@ public class ActionDBAccessorImpl implements ActionDBAccessor { @Transactional public void timeoutHostRole(String host, long requestId, long stageId, String role) { + long now = System.currentTimeMillis(); List<HostRoleCommandEntity> commands = hostRoleCommandDAO.findByHostRole(host, requestId, stageId, role); for (HostRoleCommandEntity command : commands) { command.setStatus(HostRoleStatus.TIMEDOUT); + command.setEndTime(now); hostRoleCommandDAO.merge(command); } } @@ -229,12 +233,20 @@ public class ActionDBAccessorImpl implements ActionDBAccessor { + "HostName " + hostname + " requestId " + requestId + " stageId " + stageId + " role " + role + " report " + report); } + long now = System.currentTimeMillis(); List<HostRoleCommandEntity> commands = hostRoleCommandDAO.findByHostRole( hostname, requestId, stageId, role); for (HostRoleCommandEntity command : commands) { command.setStatus(HostRoleStatus.valueOf(report.getStatus())); command.setStdOut(report.getStdOut().getBytes()); command.setStdError(report.getStdErr().getBytes()); + command.setStructuredOut(report.getStructuredOut() == null ? null : + report.getStructuredOut().getBytes()); // =================================== + if (command.getStatus() == HostRoleStatus.COMPLETED || + command.getStatus() == HostRoleStatus.ABORTED || + command.getStatus() == HostRoleStatus.FAILED) { + command.setEndTime(now); + } command.setExitcode(report.getExitCode()); hostRoleCommandDAO.merge(command); } http://git-wip-us.apache.org/repos/asf/ambari/blob/4059a69e/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommand.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommand.java index b797a7b..127feab 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommand.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommand.java @@ -47,9 +47,11 @@ public class HostRoleCommand { private HostRoleStatus status = HostRoleStatus.PENDING; private String stdout = ""; private String stderr = ""; + private String structuredOut = ""; private int exitCode = 999; //Default is unknown private final ServiceComponentHostEventWrapper event; private long startTime = -1; + private long endTime = -1; private long lastAttemptTime = -1; private short attemptCount = 0; private RoleCommand roleCommand; @@ -76,8 +78,10 @@ public class HostRoleCommand { status = hostRoleCommandEntity.getStatus(); stdout = hostRoleCommandEntity.getStdOut() != null ? new String(hostRoleCommandEntity.getStdOut()) : ""; stderr = hostRoleCommandEntity.getStdError() != null ? new String(hostRoleCommandEntity.getStdError()) : ""; + structuredOut = hostRoleCommandEntity.getStructuredOut() != null ? new String(hostRoleCommandEntity.getStructuredOut()) : ""; exitCode = hostRoleCommandEntity.getExitcode(); startTime = hostRoleCommandEntity.getStartTime(); + endTime = hostRoleCommandEntity.getEndTime() != null ? hostRoleCommandEntity.getEndTime() : -1L; lastAttemptTime = hostRoleCommandEntity.getLastAttemptTime(); attemptCount = hostRoleCommandEntity.getAttemptCount(); roleCommand = hostRoleCommandEntity.getRoleCommand(); @@ -95,7 +99,9 @@ public class HostRoleCommand { hostRoleCommandEntity.setStdError(stderr.getBytes()); hostRoleCommandEntity.setExitcode(exitCode); hostRoleCommandEntity.setStdOut(stdout.getBytes()); + hostRoleCommandEntity.setStructuredOut(structuredOut.getBytes()); hostRoleCommandEntity.setStartTime(startTime); + hostRoleCommandEntity.setEndTime(endTime); hostRoleCommandEntity.setLastAttemptTime(lastAttemptTime); hostRoleCommandEntity.setAttemptCount(attemptCount); hostRoleCommandEntity.setRoleCommand(roleCommand); @@ -193,6 +199,22 @@ public class HostRoleCommand { this.attemptCount++; } + public String getStructuredOut() { + return structuredOut; + } + + public void setStructuredOut(String structuredOut) { + this.structuredOut = structuredOut; + } + + public long getEndTime() { + return endTime; + } + + public void setEndTime(long endTime) { + this.endTime = endTime; + } + public ExecutionCommandWrapper getExecutionCommandWrapper() { if (taskId != -1 && executionCommandWrapper == null) { ExecutionCommandEntity commandEntity = executionCommandDAO.findByPK(taskId); http://git-wip-us.apache.org/repos/asf/ambari/blob/4059a69e/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandReport.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandReport.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandReport.java index de0ecbc..e5863fd 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandReport.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandReport.java @@ -28,6 +28,7 @@ public class CommandReport { private String actionId; private String stdout; private String stderr; + private String structuredOut; private String status; int exitCode; private String clusterName; @@ -97,6 +98,17 @@ public class CommandReport { this.stdout = stdout; } + @JsonProperty("structuredOut") + public String getStructuredOut() { + return this.structuredOut; + } + + + @JsonProperty("structuredOut") + public void setStructuredOut(String structuredOut) { + this.structuredOut = structuredOut; + } + @JsonProperty("roleCommand") public String getRoleCommand() { return this.roleCommand; http://git-wip-us.apache.org/repos/asf/ambari/blob/4059a69e/ambari-server/src/main/java/org/apache/ambari/server/controller/TaskStatusResponse.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/TaskStatusResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/TaskStatusResponse.java index 7f068e2..192cad4 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/TaskStatusResponse.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/TaskStatusResponse.java @@ -25,7 +25,9 @@ public class TaskStatusResponse extends ShortTaskStatus { private int exitCode; private String stderr; private String stdout; + private String structuredOut; private long startTime; + private Long endTime; private short attemptCount; public TaskStatusResponse() { @@ -51,6 +53,8 @@ public class TaskStatusResponse extends ShortTaskStatus { this.stdout = hostRoleCommand.getStdout(); this.startTime = hostRoleCommand.getStartTime(); this.attemptCount = hostRoleCommand.getAttemptCount(); + this.structuredOut = hostRoleCommand.getStructuredOut(); + this.endTime = hostRoleCommand.getEndTime(); } public long getRequestId() { @@ -100,7 +104,23 @@ public class TaskStatusResponse extends ShortTaskStatus { public void setAttemptCount(short attemptCount) { this.attemptCount = attemptCount; } - + + public String getStructuredOut() { + return structuredOut; + } + + public void setStructuredOut(String structuredOut) { + this.structuredOut = structuredOut; + } + + public Long getEndTime() { + return endTime; + } + + public void setEndTime(Long endTime) { + this.endTime = endTime; + } + @Override public String toString() { return super.toString(); http://git-wip-us.apache.org/repos/asf/ambari/blob/4059a69e/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/TaskResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/TaskResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/TaskResourceProvider.java index b9e3cd2..b533a1f 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/TaskResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/TaskResourceProvider.java @@ -56,7 +56,9 @@ class TaskResourceProvider extends AbstractControllerResourceProvider { protected static final String TASK_EXIT_CODE_PROPERTY_ID = PropertyHelper.getPropertyId("Tasks", "exit_code"); protected static final String TASK_STDERR_PROPERTY_ID = PropertyHelper.getPropertyId("Tasks", "stderr"); protected static final String TASK_STOUT_PROPERTY_ID = PropertyHelper.getPropertyId("Tasks", "stdout"); + protected static final String TASK_STRUCT_OUT_PROPERTY_ID = PropertyHelper.getPropertyId("Tasks", "structured_out"); protected static final String TASK_START_TIME_PROPERTY_ID = PropertyHelper.getPropertyId("Tasks", "start_time"); + protected static final String TASK_END_TIME_PROPERTY_ID = PropertyHelper.getPropertyId("Tasks", "end_time"); protected static final String TASK_ATTEMPT_CNT_PROPERTY_ID = PropertyHelper.getPropertyId("Tasks", "attempt_cnt"); @@ -141,7 +143,9 @@ class TaskResourceProvider extends AbstractControllerResourceProvider { setResourceProperty(resource, TASK_EXIT_CODE_PROPERTY_ID, response.getExitCode(), requestedIds); setResourceProperty(resource, TASK_STDERR_PROPERTY_ID, response.getStderr(), requestedIds); setResourceProperty(resource, TASK_STOUT_PROPERTY_ID, response.getStdout(), requestedIds); + setResourceProperty(resource, TASK_STRUCT_OUT_PROPERTY_ID, response.getStructuredOut(), requestedIds); setResourceProperty(resource, TASK_START_TIME_PROPERTY_ID, response.getStartTime(), requestedIds); + setResourceProperty(resource, TASK_END_TIME_PROPERTY_ID, response.getEndTime(), requestedIds); setResourceProperty(resource, TASK_ATTEMPT_CNT_PROPERTY_ID, response.getAttemptCount(), requestedIds); resources.add(resource); } http://git-wip-us.apache.org/repos/asf/ambari/blob/4059a69e/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostRoleCommandEntity.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostRoleCommandEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostRoleCommandEntity.java index 4877333..61b4f5f 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostRoleCommandEntity.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostRoleCommandEntity.java @@ -99,11 +99,20 @@ public class HostRoleCommandEntity { @Basic private byte[] stdOut = new byte[0]; + @Column(name = "structured_out") + @Lob + @Basic + private byte[] structuredOut = new byte[0]; + @Basic @Column(name = "start_time", nullable = false) private Long startTime = -1L; @Basic + @Column(name = "end_time", nullable = false) + private Long endTime = -1L; + + @Basic @Column(name = "last_attempt_time", nullable = false) private Long lastAttemptTime = -1L; @@ -238,6 +247,22 @@ public class HostRoleCommandEntity { this.roleCommand = roleCommand; } + public byte[] getStructuredOut() { + return structuredOut; + } + + public void setStructuredOut(byte[] structuredOut) { + this.structuredOut = structuredOut; + } + + public Long getEndTime() { + return endTime; + } + + public void setEndTime(Long endTime) { + this.endTime = endTime; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -259,6 +284,8 @@ public class HostRoleCommandEntity { if (stdError != null ? !Arrays.equals(stdError, that.stdError) : that.stdError != null) return false; if (stdOut != null ? !Arrays.equals(stdOut, that.stdOut) : that.stdOut != null) return false; if (taskId != null ? !taskId.equals(that.taskId) : that.taskId != null) return false; + if (structuredOut != null ? !Arrays.equals(structuredOut, that.structuredOut) : that.structuredOut != null) return false; + if (endTime != null ? !endTime.equals(that.endTime) : that.endTime != null) return false; return true; } @@ -278,6 +305,8 @@ public class HostRoleCommandEntity { result = 31 * result + (startTime != null ? startTime.hashCode() : 0); result = 31 * result + (lastAttemptTime != null ? lastAttemptTime.hashCode() : 0); result = 31 * result + (attemptCount != null ? attemptCount.hashCode() : 0); + result = 31 * result + (endTime != null ? endTime.hashCode() : 0); + result = 31 * result + (structuredOut != null ? Arrays.hashCode(structuredOut) : 0); return result; } http://git-wip-us.apache.org/repos/asf/ambari/blob/4059a69e/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql index e53bbbd..6ad899e 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql @@ -29,7 +29,7 @@ CREATE TABLE servicedesiredstate (cluster_id NUMBER(19) NOT NULL, desired_host_r CREATE TABLE roles (role_name VARCHAR2(255) NOT NULL, PRIMARY KEY (role_name)); CREATE TABLE users (user_id NUMBER(10) NOT NULL, create_time TIMESTAMP NULL, ldap_user NUMBER(10) DEFAULT 0, user_name VARCHAR2(255) NULL, user_password VARCHAR2(255) NULL, PRIMARY KEY (user_id)); CREATE TABLE execution_command (task_id NUMBER(19) NOT NULL, command BLOB NULL, PRIMARY KEY (task_id)); -CREATE TABLE host_role_command (task_id NUMBER(19) NOT NULL, attempt_count NUMBER(5) NOT NULL, event CLOB NULL, exitcode NUMBER(10) NOT NULL, host_name VARCHAR2(255) NOT NULL, last_attempt_time NUMBER(19) NOT NULL, request_id NUMBER(19) NOT NULL, role VARCHAR2(255) NULL, role_command VARCHAR2(255) NULL, stage_id NUMBER(19) NOT NULL, start_time NUMBER(19) NOT NULL, status VARCHAR2(255) NULL, std_error BLOB NULL, std_out BLOB NULL, PRIMARY KEY (task_id)); +CREATE TABLE host_role_command (task_id NUMBER(19) NOT NULL, attempt_count NUMBER(5) NOT NULL, event CLOB NULL, exitcode NUMBER(10) NOT NULL, host_name VARCHAR2(255) NOT NULL, last_attempt_time NUMBER(19) NOT NULL, request_id NUMBER(19) NOT NULL, role VARCHAR2(255) NULL, role_command VARCHAR2(255) NULL, stage_id NUMBER(19) NOT NULL, start_time NUMBER(19) NOT NULL, end_time NUMBER(19), status VARCHAR2(255) NULL, std_error BLOB NULL, std_out BLOB NULL, structured_out BLOB NULL, PRIMARY KEY (task_id)); CREATE TABLE role_success_criteria (role VARCHAR2(255) NOT NULL, request_id NUMBER(19) NOT NULL, stage_id NUMBER(19) NOT NULL, success_factor NUMBER(19,4) NOT NULL, PRIMARY KEY (role, request_id, stage_id)); CREATE TABLE stage (stage_id NUMBER(19) NOT NULL, request_id NUMBER(19) NOT NULL, cluster_id NUMBER(19) NULL, log_info VARCHAR2(255) NULL, request_context VARCHAR2(255) NULL, cluster_host_info BLOB NOT NULL, PRIMARY KEY (stage_id, request_id)); CREATE TABLE key_value_store ("key" VARCHAR2(255) NOT NULL, "value" CLOB NULL, PRIMARY KEY ("key")); http://git-wip-us.apache.org/repos/asf/ambari/blob/4059a69e/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql index d8ea6f3..c05c3e9 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql @@ -70,7 +70,7 @@ GRANT ALL PRIVILEGES ON TABLE ambari.users TO :username; CREATE TABLE ambari.execution_command (command BYTEA, task_id BIGINT NOT NULL, PRIMARY KEY (task_id)); GRANT ALL PRIVILEGES ON TABLE ambari.execution_command TO :username; -CREATE TABLE ambari.host_role_command (task_id BIGINT NOT NULL, attempt_count SMALLINT NOT NULL, event VARCHAR(32000) NOT NULL, exitcode INTEGER NOT NULL, host_name VARCHAR(255) NOT NULL, last_attempt_time BIGINT NOT NULL, request_id BIGINT NOT NULL, role VARCHAR(255), stage_id BIGINT NOT NULL, start_time BIGINT NOT NULL, status VARCHAR(255), std_error BYTEA, std_out BYTEA, role_command VARCHAR(255), PRIMARY KEY (task_id)); +CREATE TABLE ambari.host_role_command (task_id BIGINT NOT NULL, attempt_count SMALLINT NOT NULL, event VARCHAR(32000) NOT NULL, exitcode INTEGER NOT NULL, host_name VARCHAR(255) NOT NULL, last_attempt_time BIGINT NOT NULL, request_id BIGINT NOT NULL, role VARCHAR(255), stage_id BIGINT NOT NULL, start_time BIGINT NOT NULL, end_time BIGINT, status VARCHAR(255), std_error BYTEA, std_out BYTEA, structured_out BYTEA, role_command VARCHAR(255), PRIMARY KEY (task_id)); GRANT ALL PRIVILEGES ON TABLE ambari.host_role_command TO :username; CREATE TABLE ambari.role_success_criteria (role VARCHAR(255) NOT NULL, request_id BIGINT NOT NULL, stage_id BIGINT NOT NULL, success_factor FLOAT NOT NULL, PRIMARY KEY (role, request_id, stage_id)); http://git-wip-us.apache.org/repos/asf/ambari/blob/4059a69e/ambari-server/src/main/resources/Ambari-DDL-Postgres-REMOTE-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-REMOTE-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-REMOTE-CREATE.sql index 145b229..1b2a206 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-REMOTE-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-REMOTE-CREATE.sql @@ -33,7 +33,7 @@ CREATE TABLE ambari.servicedesiredstate (cluster_id BIGINT NOT NULL, desired_hos CREATE TABLE ambari.roles (role_name VARCHAR(255) NOT NULL, PRIMARY KEY (role_name)); CREATE TABLE ambari.users (user_id INTEGER, ldap_user INTEGER NOT NULL DEFAULT 0, user_name VARCHAR(255) NOT NULL, create_time TIMESTAMP DEFAULT NOW(), user_password VARCHAR(255), PRIMARY KEY (user_id), UNIQUE (ldap_user, user_name)); CREATE TABLE ambari.execution_command (command bytea, task_id BIGINT NOT NULL, PRIMARY KEY (task_id)); -CREATE TABLE ambari.host_role_command (task_id BIGINT NOT NULL, attempt_count SMALLINT NOT NULL, event VARCHAR(32000) NOT NULL, exitcode INTEGER NOT NULL, host_name VARCHAR(255) NOT NULL, last_attempt_time BIGINT NOT NULL, request_id BIGINT NOT NULL, role VARCHAR(255), stage_id BIGINT NOT NULL, start_time BIGINT NOT NULL, status VARCHAR(255), std_error bytea, std_out bytea, role_command VARCHAR(255), PRIMARY KEY (task_id)); +CREATE TABLE ambari.host_role_command (task_id BIGINT NOT NULL, attempt_count SMALLINT NOT NULL, event VARCHAR(32000) NOT NULL, exitcode INTEGER NOT NULL, host_name VARCHAR(255) NOT NULL, last_attempt_time BIGINT NOT NULL, request_id BIGINT NOT NULL, role VARCHAR(255), stage_id BIGINT NOT NULL, start_time BIGINT NOT NULL, end_time BIGINT, status VARCHAR(255), std_error BYTEA, std_out BYTEA, structured_out BYTEA, role_command VARCHAR(255), PRIMARY KEY (task_id)); CREATE TABLE ambari.role_success_criteria (role VARCHAR(255) NOT NULL, request_id BIGINT NOT NULL, stage_id BIGINT NOT NULL, success_factor FLOAT NOT NULL, PRIMARY KEY (role, request_id, stage_id)); CREATE TABLE ambari.stage (stage_id BIGINT NOT NULL, request_id BIGINT NOT NULL, cluster_id BIGINT NOT NULL, log_info VARCHAR(255) NOT NULL, request_context VARCHAR(255), PRIMARY KEY (stage_id, request_id)); CREATE TABLE ambari.ClusterHostMapping (cluster_id BIGINT NOT NULL, host_name VARCHAR(255) NOT NULL, PRIMARY KEY (cluster_id, host_name)); http://git-wip-us.apache.org/repos/asf/ambari/blob/4059a69e/ambari-server/src/main/resources/properties.json ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/properties.json b/ambari-server/src/main/resources/properties.json index 25f371b..e8015c9 100644 --- a/ambari-server/src/main/resources/properties.json +++ b/ambari-server/src/main/resources/properties.json @@ -118,6 +118,8 @@ "Tasks/stderr", "Tasks/stdout", "Tasks/start_time", + "Tasks/end_time", + "Tasks/structured_out", "Tasks/attempt_cnt", "_" ], http://git-wip-us.apache.org/repos/asf/ambari/blob/4059a69e/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Oracle-UPGRADE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Oracle-UPGRADE.sql b/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Oracle-UPGRADE.sql index 69faa53..8c62f76 100644 --- a/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Oracle-UPGRADE.sql +++ b/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Oracle-UPGRADE.sql @@ -76,4 +76,8 @@ ALTER TABLE stage MODIFY (cluster_host_info NOT NULL); ALTER TABLE ambari.hosts DROP COLUMN disks_info; +--Added end_time and structured output support to command execution result +ALTER TABLE host_role_command ADD (end_time NUMBER(19) DEFAULT NULL); +ALTER TABLE host_role_command ADD (structured_out BLOB DEFAULT NULL); + commit; http://git-wip-us.apache.org/repos/asf/ambari/blob/4059a69e/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Postgres-UPGRADE-1.3.0.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Postgres-UPGRADE-1.3.0.sql b/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Postgres-UPGRADE-1.3.0.sql index 38894e3..279a274 100644 --- a/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Postgres-UPGRADE-1.3.0.sql +++ b/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Postgres-UPGRADE-1.3.0.sql @@ -154,3 +154,7 @@ UPDATE ambari.stage sd ALTER TABLE ambari.stage ALTER COLUMN cluster_host_info SET NOT NULL; ALTER TABLE ambari.hosts DROP COLUMN disks_info; + +--Added end_time and structured output support to command execution result +ALTER TABLE ambari.host_role_command ADD COLUMN end_time BIGINT; +ALTER TABLE ambari.host_role_command ADD COLUMN structured_out BYTEA; http://git-wip-us.apache.org/repos/asf/ambari/blob/4059a69e/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java index 8c7d839..d8042ae 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java @@ -238,6 +238,7 @@ public class TestActionDBAccessorImpl { commandReport.setStatus(HostRoleStatus.COMPLETED.toString()); commandReport.setStdOut(largeString); commandReport.setStdErr(largeString); + commandReport.setStructuredOut(largeString); commandReport.setExitCode(123); db.updateHostRoleState(hostName, requestId, stageId, Role.HBASE_MASTER.toString(), commandReport); @@ -249,6 +250,10 @@ public class TestActionDBAccessorImpl { assertNotNull(command); assertEquals(largeString, command.getStdout()); + assertEquals(largeString, command.getStructuredOut()); + + //endTime for completed commands should be set + assertTrue(command.getEndTime() != -1); } http://git-wip-us.apache.org/repos/asf/ambari/blob/4059a69e/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java index f5ffe8b..20d6792 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java @@ -98,6 +98,7 @@ public class TestActionManager { cr.setStatus("COMPLETED"); cr.setStdErr("ERROR"); cr.setStdOut("OUTPUT"); + cr.setStructuredOut("STRUCTURED_OUTPUT"); cr.setExitCode(215); reports.add(cr); am.processTaskResponse(hostname, reports); @@ -113,7 +114,10 @@ public class TestActionManager { "OUTPUT", am.getAction(requestId, stageId) .getHostRoleCommand(hostname, "HBASE_MASTER").getStdout()); - + assertEquals( + "STRUCTURED_OUTPUT", + am.getAction(requestId, stageId) + .getHostRoleCommand(hostname, "HBASE_MASTER").getStructuredOut()); } @Test @@ -136,6 +140,7 @@ public class TestActionManager { String outLog = Arrays.toString(new byte[110000]); cr.setStdErr(errLog); cr.setStdOut(outLog); + cr.setStructuredOut(outLog); cr.setExitCode(215); reports.add(cr); am.processTaskResponse(hostname, reports); @@ -151,7 +156,10 @@ public class TestActionManager { outLog.length(), am.getAction(requestId, stageId) .getHostRoleCommand(hostname, "HBASE_MASTER").getStdout().length()); - + assertEquals( + outLog.length(), + am.getAction(requestId, stageId) + .getHostRoleCommand(hostname, "HBASE_MASTER").getStructuredOut().length()); } private void populateActionDB(ActionDBAccessor db, String hostname) {
