ambari-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From d...@apache.org
Subject git commit: AMBARI-3934 Custom Action: Enhance host_role_command table to record end time and structured output (dsen)
Date Fri, 29 Nov 2013 17:10:25 GMT
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 <dsen@hortonworks.com>
Authored: Fri Nov 29 19:00:04 2013 +0200
Committer: Dmitry Sen <dsen@hortonworks.com>
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) {


Mime
View raw message