You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sw...@apache.org on 2014/07/25 08:41:18 UTC
git commit: AMBARI-6533. Add API to get file log location in the task
execution output, currently hardcoded in UI. (Alejandro Fernandez via swagle)
Repository: ambari
Updated Branches:
refs/heads/trunk d5bd15bdc -> f3aab68ec
AMBARI-6533. Add API to get file log location in the task execution output, currently hardcoded in UI. (Alejandro Fernandez via swagle)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f3aab68e
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f3aab68e
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f3aab68e
Branch: refs/heads/trunk
Commit: f3aab68ec417d8e2c39c216962e1e1d47d56d401
Parents: d5bd15b
Author: Siddharth Wagle <sw...@hortonworks.com>
Authored: Thu Jul 24 23:40:43 2014 -0700
Committer: Siddharth Wagle <sw...@hortonworks.com>
Committed: Thu Jul 24 23:40:43 2014 -0700
----------------------------------------------------------------------
.../src/main/python/ambari_agent/ActionQueue.py | 5 +-
.../src/main/python/ambari_agent/Register.py | 3 +-
.../python/ambari_agent/TestRegistration.py | 3 +-
.../actionmanager/ActionDBAccessorImpl.java | 21 +++++++-
.../server/actionmanager/HostRoleCommand.java | 18 +++++++
.../ambari/server/agent/HeartBeatHandler.java | 3 ++
.../apache/ambari/server/agent/Register.java | 8 ++-
.../server/configuration/Configuration.java | 7 +++
.../server/controller/ShortTaskStatus.java | 29 ++++++++++-
.../server/controller/TaskStatusResponse.java | 4 +-
.../internal/TaskResourceProvider.java | 4 ++
.../orm/entities/HostRoleCommandEntity.java | 21 ++++++++
.../org/apache/ambari/server/state/Host.java | 12 +++++
.../ambari/server/state/host/HostImpl.java | 20 +++++++-
.../server/upgrade/UpgradeCatalog170.java | 16 ++++++
.../main/resources/Ambari-DDL-MySQL-CREATE.sql | 2 +-
.../main/resources/Ambari-DDL-Oracle-CREATE.sql | 2 +-
.../resources/Ambari-DDL-Postgres-CREATE.sql | 2 +-
.../Ambari-DDL-Postgres-EMBEDDED-CREATE.sql | 2 +-
.../src/main/resources/properties.json | 2 +
.../HDP/2.1/services/HIVE/metainfo.xml.orig | 51 --------------------
.../server/agent/LocalAgentSimulator.java | 2 +
.../server/agent/TestHeartbeatHandler.java | 4 ++
.../AmbariManagementControllerTest.java | 44 +++++++++++++++++
.../internal/TaskResourceProviderTest.java | 2 +-
.../server/orm/InMemoryDefaultTestModule.java | 4 +-
.../global/background_operations_controller.js | 2 +
ambari-web/app/messages.js | 2 +-
ambari-web/app/utils/host_progress_popup.js | 5 +-
.../views/wizard/step9/hostLogPopupBody_view.js | 2 -
30 files changed, 227 insertions(+), 75 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-agent/src/main/python/ambari_agent/ActionQueue.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/ActionQueue.py b/ambari-agent/src/main/python/ambari_agent/ActionQueue.py
index 123288b..d023cde 100644
--- a/ambari-agent/src/main/python/ambari_agent/ActionQueue.py
+++ b/ambari-agent/src/main/python/ambari_agent/ActionQueue.py
@@ -122,9 +122,6 @@ class ActionQueue(threading.Thread):
except (Queue.Empty):
pass
-
-
-
def process_command(self, command):
logger.debug("Took an element of Queue: " + pprint.pformat(command))
# make sure we log failures
@@ -157,6 +154,8 @@ class ActionQueue(threading.Thread):
taskId = command['taskId']
# Preparing 'IN_PROGRESS' report
in_progress_status = self.commandStatuses.generate_report_template(command)
+ # The path of the files that contain the output log and error log use a prefix that the agent advertises to the
+ # server. The prefix is defined in agent-config.ini
in_progress_status.update({
'tmpout': self.tmpdir + os.sep + 'output-' + str(taskId) + '.txt',
'tmperr': self.tmpdir + os.sep + 'errors-' + str(taskId) + '.txt',
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-agent/src/main/python/ambari_agent/Register.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/Register.py b/ambari-agent/src/main/python/ambari_agent/Register.py
index dbf0ef1..fada031 100644
--- a/ambari-agent/src/main/python/ambari_agent/Register.py
+++ b/ambari-agent/src/main/python/ambari_agent/Register.py
@@ -52,7 +52,8 @@ class Register:
'publicHostname' : hostname.public_hostname(),
'hardwareProfile' : self.hardware.get(),
'agentEnv' : agentEnv,
- 'agentVersion' : version
+ 'agentVersion' : version,
+ 'prefix' : self.config.get('agent', 'prefix')
}
return register
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-agent/src/test/python/ambari_agent/TestRegistration.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestRegistration.py b/ambari-agent/src/test/python/ambari_agent/TestRegistration.py
index b70ebbe..afd82b9 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestRegistration.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestRegistration.py
@@ -60,6 +60,7 @@ class TestRegistration(TestCase):
print data['agentEnv']['umask']
self.assertEquals(not data['agentEnv']['umask']== "", True, "agents umask should not be empty")
self.assertEquals(data['currentPingPort'] == 33777, True, "current ping port should be 33777")
- self.assertEquals(len(data), 8)
+ self.assertEquals(data['prefix'], config.get('agent', 'prefix'), 'The prefix path does not match')
+ self.assertEquals(len(data), 9)
os.remove(ver_file)
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/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 a6c59a7..d6d7c11 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
@@ -23,6 +23,7 @@ import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.inject.name.Named;
import com.google.inject.persist.Transactional;
+import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.agent.CommandReport;
import org.apache.ambari.server.agent.ExecutionCommand;
import org.apache.ambari.server.orm.dao.ClusterDAO;
@@ -42,6 +43,7 @@ import org.apache.ambari.server.orm.entities.RequestScheduleEntity;
import org.apache.ambari.server.orm.entities.RoleSuccessCriteriaEntity;
import org.apache.ambari.server.orm.entities.StageEntity;
import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.utils.StageUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -243,8 +245,25 @@ public class ActionDBAccessorImpl implements ActionDBAccessor {
hostRoleCommandDAO.create(hostRoleCommandEntity);
assert hostRoleCommandEntity.getTaskId() != null;
-
hostRoleCommand.setTaskId(hostRoleCommandEntity.getTaskId());
+
+ try {
+ // Get the in-memory host object and its prefix to construct the output and error log paths.
+ Host hostObject = clusters.getHost(hostRoleCommandEntity.getHostName());
+ String prefix = hostObject.getPrefix();
+ if (null != prefix && !prefix.isEmpty()) {
+ if (!prefix.endsWith("/")) {
+ prefix = prefix + "/";
+ }
+ hostRoleCommand.setOutputLog(prefix + "output-" + hostRoleCommandEntity.getTaskId() + ".txt");
+ hostRoleCommand.setErrorLog(prefix + "errors-" + hostRoleCommandEntity.getTaskId() + ".txt");
+ hostRoleCommandEntity.setOutputLog(hostRoleCommand.getOutputLog());
+ hostRoleCommandEntity.setErrorLog(hostRoleCommand.getErrorLog());
+ }
+ } catch (AmbariException e) {
+ LOG.warn("Exception in getting prefix for host and setting output and error log files.");
+ }
+
ExecutionCommandEntity executionCommandEntity = hostRoleCommand.constructExecutionCommandEntity();
executionCommandEntity.setHostRoleCommand(hostRoleCommandEntity);
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/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 8998197..f71e2d5 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
@@ -46,6 +46,8 @@ public class HostRoleCommand {
private HostRoleStatus status = HostRoleStatus.PENDING;
private String stdout = "";
private String stderr = "";
+ public String outputLog = null;
+ public String errorLog = null;
private String structuredOut = "";
private int exitCode = 999; //Default is unknown
private long startTime = -1;
@@ -76,6 +78,8 @@ public class HostRoleCommand {
status = hostRoleCommandEntity.getStatus();
stdout = hostRoleCommandEntity.getStdOut() != null ? new String(hostRoleCommandEntity.getStdOut()) : "";
stderr = hostRoleCommandEntity.getStdError() != null ? new String(hostRoleCommandEntity.getStdError()) : "";
+ outputLog = hostRoleCommandEntity.getOutputLog();
+ errorLog = hostRoleCommandEntity.getErrorLog();
structuredOut = hostRoleCommandEntity.getStructuredOut() != null ? new String(hostRoleCommandEntity.getStructuredOut()) : "";
exitCode = hostRoleCommandEntity.getExitcode();
startTime = hostRoleCommandEntity.getStartTime();
@@ -185,6 +189,18 @@ public class HostRoleCommand {
this.stderr = stderr;
}
+ public String getOutputLog() { return outputLog; }
+
+ public void setOutputLog(String outputLog) {
+ this.outputLog = outputLog;
+ }
+
+ public String getErrorLog() { return errorLog; }
+
+ public void setErrorLog(String errorLog) {
+ this.errorLog = errorLog;
+ }
+
public int getExitCode() {
return exitCode;
}
@@ -291,6 +307,8 @@ public class HostRoleCommand {
builder.append(" Role: ").append(role).append("\n");
builder.append(" Status: ").append(status).append("\n");
builder.append(" Event: ").append(event).append("\n");
+ builder.append(" Output log: ").append(outputLog).append("\n");
+ builder.append(" Error log: ").append(errorLog).append("\n");
builder.append(" stdout: ").append(stdout).append("\n");
builder.append(" stderr: ").append(stderr).append("\n");
builder.append(" exitcode: ").append(exitCode).append("\n");
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
index 17aa9bf..bccbc02 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
@@ -641,6 +641,9 @@ public class HeartBeatHandler {
// Get status of service components
List<StatusCommand> cmds = heartbeatMonitor.generateStatusCommands(hostname);
+ // Save the prefix of the log file paths
+ hostObject.setPrefix(register.getPrefix());
+
hostObject.handleEvent(new HostRegistrationRequestEvent(hostname,
null != register.getPublicHostname() ? register.getPublicHostname() : hostname,
new AgentVersion(register.getAgentVersion()), now, register.getHardwareProfile(),
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-server/src/main/java/org/apache/ambari/server/agent/Register.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/Register.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/Register.java
index ec6f4f7..a571afd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/agent/Register.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/Register.java
@@ -34,6 +34,7 @@ public class Register {
private String publicHostname;
private AgentEnv agentEnv;
private String agentVersion;
+ private String prefix;
@JsonProperty("responseId")
public int getResponseId() {
@@ -89,6 +90,10 @@ public class Register {
return agentVersion;
}
+ public String getPrefix() { return prefix; }
+
+ public void setPrefix(String prefix) { this.prefix = prefix; }
+
public void setAgentVersion(String agentVersion) {
this.agentVersion = agentVersion;
}
@@ -106,7 +111,8 @@ public class Register {
String ret = "responseId=" + responseId + "\n" +
"timestamp=" + timestamp + "\n" +
"hostname=" + hostname + "\n" +
- "currentPingPort=" + currentPingPort + "\n";
+ "currentPingPort=" + currentPingPort + "\n" +
+ "prefix=" + prefix + "\n";
if (hardwareProfile != null)
ret = ret + "hardwareprofile=" + this.hardwareProfile.toString();
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
index 226cf86..d958443 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
@@ -51,6 +51,13 @@ public class Configuration {
public static final String CONFIG_FILE = "ambari.properties";
public static final String BOOTSTRAP_DIR = "bootstrap.dir";
+
+ /**
+ * PREFIX_DIR is shared in ambari-agent.ini and should only be called by unit tests.
+ * For all server-side processing, it should be retrieved from <code>HostImpl.getPrefix()</code>
+ */
+ public static final String PREFIX_DIR = "/var/lib/ambari-agent/data";
+
public static final String BOOTSTRAP_DIR_DEFAULT = "/var/run/ambari-server/bootstrap";
public static final String VIEWS_DIR = "views.dir";
public static final String VIEWS_DIR_DEFAULT = "/var/lib/ambari-server/resources/views";
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-server/src/main/java/org/apache/ambari/server/controller/ShortTaskStatus.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ShortTaskStatus.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ShortTaskStatus.java
index e84ac3d..3155746 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ShortTaskStatus.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ShortTaskStatus.java
@@ -28,12 +28,14 @@ public class ShortTaskStatus {
protected String command;
protected String status;
protected String customCommandName;
+ protected String outputLog;
+ protected String errorLog;
public ShortTaskStatus() {
}
public ShortTaskStatus(int taskId, long stageId, String hostName, String role, String command, String status,
- String customCommandName) {
+ String customCommandName, String outputLog, String errorLog) {
this.taskId = taskId;
this.stageId = stageId;
this.hostName = hostName;
@@ -41,6 +43,8 @@ public class ShortTaskStatus {
this.command = command;
this.status = status;
this.customCommandName = customCommandName;
+ this.outputLog = outputLog;
+ this.errorLog = errorLog;
}
public ShortTaskStatus(HostRoleCommand hostRoleCommand) {
@@ -51,6 +55,8 @@ public class ShortTaskStatus {
this.role = hostRoleCommand.getRole().toString();
this.status = hostRoleCommand.getStatus().toString();
this.customCommandName = hostRoleCommand.getCustomCommandName();
+ this.outputLog = hostRoleCommand.getOutputLog();
+ this.errorLog = hostRoleCommand.getErrorLog();
}
public String getCustomCommandName() {
@@ -101,6 +107,22 @@ public class ShortTaskStatus {
this.command = command;
}
+ public String getOutputLog() {
+ return outputLog;
+ }
+
+ public void setOutputLog(String outputLog) {
+ this.outputLog = outputLog;
+ }
+
+ public String getErrorLog() {
+ return errorLog;
+ }
+
+ public void setErrorLog(String errorLog) {
+ this.errorLog = errorLog;
+ }
+
public String getStatus() {
return status;
}
@@ -117,7 +139,10 @@ public class ShortTaskStatus {
+ ", hostname=" + hostName
+ ", role=" + role
+ ", command=" + command
- + ", status=" + status);
+ + ", status=" + status
+ + ", outputLog=" + outputLog
+ + ", errorLog=" + errorLog
+ );
return sb.toString();
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/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 c413f2d..892b1c3 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
@@ -37,8 +37,8 @@ public class TaskStatusResponse extends ShortTaskStatus {
public TaskStatusResponse(long requestId,
int taskId, long stageId, String hostName, String role, String command, String status,
int exitCode, String stderr, String stdout, long startTime, short attemptCount,
- String commandDetail, String customCommandName) {
- super(taskId, stageId, hostName, role, command, status, customCommandName);
+ String commandDetail, String customCommandName, String outputLog, String errorLog) {
+ super(taskId, stageId, hostName, role, command, status, customCommandName, outputLog, errorLog);
this.requestId = requestId;
this.exitCode = exitCode;
this.stderr = stderr;
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/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 79a4f05..1806b78 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
@@ -57,6 +57,8 @@ 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_OUTPUTLOG_PROPERTY_ID = PropertyHelper.getPropertyId("Tasks", "output_log");
+ protected static final String TASK_ERRORLOG_PROPERTY_ID = PropertyHelper.getPropertyId("Tasks", "error_log");
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");
@@ -153,6 +155,8 @@ 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_OUTPUTLOG_PROPERTY_ID, response.getOutputLog(), requestedIds);
+ setResourceProperty(resource, TASK_ERRORLOG_PROPERTY_ID, response.getErrorLog(), requestedIds);
setResourceProperty(resource, TASK_STRUCT_OUT_PROPERTY_ID, parseStructuredOutput(response.getStructuredOut()), requestedIds);
setResourceProperty(resource, TASK_START_TIME_PROPERTY_ID, response.getStartTime(), requestedIds);
setResourceProperty(resource, TASK_END_TIME_PROPERTY_ID, response.getEndTime(), requestedIds);
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/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 9755b22..490b289 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
@@ -101,6 +101,15 @@ public class HostRoleCommandEntity {
@Basic
private byte[] stdOut = new byte[0];
+ @Column(name = "output_log")
+ @Basic
+ private String outputLog = null;
+
+ @Column(name = "error_log")
+ @Basic
+ private String errorLog = null;
+
+
@Column(name = "structured_out")
@Lob
@Basic
@@ -228,6 +237,14 @@ public class HostRoleCommandEntity {
this.stdOut = stdOut;
}
+ public String getOutputLog() { return outputLog; }
+
+ public void setOutputLog(String outputLog) { this.outputLog = outputLog; }
+
+ public String getErrorLog() { return errorLog; }
+
+ public void setErrorLog(String errorLog) { this.errorLog = errorLog; }
+
public Long getStartTime() {
return startTime;
}
@@ -318,6 +335,8 @@ public class HostRoleCommandEntity {
if (status != null ? !status.equals(that.status) : that.status != null) return false;
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 (outputLog != null ? !outputLog.equals(that.outputLog) : that.outputLog != null) return false;
+ if (errorLog != null ? !errorLog.equals(that.errorLog) : that.errorLog != 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;
@@ -337,6 +356,8 @@ public class HostRoleCommandEntity {
result = 31 * result + (status != null ? status.hashCode() : 0);
result = 31 * result + (stdError != null ? Arrays.hashCode(stdError) : 0);
result = 31 * result + (stdOut != null ? Arrays.hashCode(stdOut) : 0);
+ result = 31 * result + (outputLog != null ? outputLog.hashCode() : 0);
+ result = 31 * result + (errorLog != null ? errorLog.hashCode() : 0);
result = 31 * result + (startTime != null ? startTime.hashCode() : 0);
result = 31 * result + (lastAttemptTime != null ? lastAttemptTime.hashCode() : 0);
result = 31 * result + (attemptCount != null ? attemptCount.hashCode() : 0);
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-server/src/main/java/org/apache/ambari/server/state/Host.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/Host.java b/ambari-server/src/main/java/org/apache/ambari/server/state/Host.java
index 5c0f2aa..1ee2071 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/Host.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/Host.java
@@ -276,6 +276,18 @@ public interface Host {
public void setState(HostState state);
/**
+ * Get the prefix path of all logs
+ * @return prefix
+ */
+ public String getPrefix();
+
+ /**
+ * Set the prefix path of all logs of the host
+ * @param prefix the prefix path to set
+ */
+ public void setPrefix(String prefix);
+
+ /**
* Send an event to the Host's StateMachine
* @param event HostEvent
* @throws InvalidStateTransitionException
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java
index df97944..c1aa492 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java
@@ -120,9 +120,12 @@ public class HostImpl implements Host {
- //In-memory status, based on host components states
+ // In-memory status, based on host components states
private String status;
+ // In-memory prefix of log file paths that is retrieved when the agent registers with the server
+ private String prefix;
+
private static final StateMachineFactory
<HostImpl, HostState, HostEventType, HostEvent>
stateMachineFactory
@@ -862,6 +865,21 @@ public class HostImpl implements Host {
}
@Override
+ public String getPrefix() { return prefix; }
+
+ @Override
+ public void setPrefix(String prefix) {
+ if (prefix != null && !prefix.equals(this.prefix)) {
+ try {
+ writeLock.lock();
+ this.prefix = prefix;
+ } finally {
+ writeLock.unlock();
+ }
+ }
+ }
+
+ @Override
public Map<String, String> getHostAttributes() {
try {
readLock.lock();
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java
index 24645ba..31a5883 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java
@@ -27,6 +27,7 @@ import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.orm.DBAccessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.ambari.server.configuration.Configuration;
import com.google.inject.Inject;
import com.google.inject.Injector;
@@ -68,6 +69,7 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog {
// !!! TODO: alerting DDL upgrade
List<DBAccessor.DBColumnInfo> columns;
+ String dbType = getDbType();
// add admin tables and initial values prior to adding referencing columns on existing tables
columns = new ArrayList<DBAccessor.DBColumnInfo>();
@@ -157,6 +159,20 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog {
Integer.class, 1, 1, false));
dbAccessor.addColumn("viewinstance", new DBAccessor.DBColumnInfo("resource_id",
Long.class, 1, 1, false));
+
+ dbAccessor.addColumn("host_role_command", new DBAccessor.DBColumnInfo("output_log", String.class, 255, null, true));
+ dbAccessor.addColumn("host_role_command", new DBAccessor.DBColumnInfo("error_log", String.class, 255, null, true));
+
+ // Update historic records with the log paths, but only enough so as to not prolong the upgrade process
+ if (dbType.equals(Configuration.POSTGRES_DB_NAME) || dbType.equals(Configuration.ORACLE_DB_NAME)) {
+ // Postgres and Oracle use a different concatenation operator.
+ dbAccessor.executeQuery("UPDATE host_role_command SET output_log = ('/var/lib/ambari-agent/data/output-' || CAST(task_id AS VARCHAR(20)) || '.txt') WHERE task_id IN (SELECT task_id FROM host_role_command WHERE output_log IS NULL OR output_log = '' ORDER BY task_id DESC LIMIT 1000);");
+ dbAccessor.executeQuery("UPDATE host_role_command SET error_log = ('/var/lib/ambari-agent/data/errors-' || CAST(task_id AS VARCHAR(20)) || '.txt') WHERE task_id IN (SELECT task_id FROM host_role_command WHERE error_log IS NULL OR error_log = '' ORDER BY task_id DESC LIMIT 1000);");
+ } else if (dbType.equals(Configuration.MYSQL_DB_NAME)) {
+ // MySQL uses a different concatenation operator.
+ dbAccessor.executeQuery("UPDATE host_role_command SET output_log = CONCAT('/var/lib/ambari-agent/data/output-', task_id, '.txt') WHERE task_id IN (SELECT task_id FROM host_role_command WHERE output_log IS NULL OR output_log = '' ORDER BY task_id DESC LIMIT 1000);");
+ dbAccessor.executeQuery("UPDATE host_role_command SET error_log = CONCAT('/var/lib/ambari-agent/data/errors-', task_id, '.txt') WHERE task_id IN (SELECT task_id FROM host_role_command WHERE error_log IS NULL OR error_log = '' ORDER BY task_id DESC LIMIT 1000);");
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
index d55444e..f3cac2e 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -41,7 +41,7 @@ CREATE TABLE users (user_id INTEGER, principal_id BIGINT NOT NULL, create_time T
CREATE TABLE groups (group_id INTEGER, principal_id BIGINT NOT NULL, group_name VARCHAR(255) NOT NULL, ldap_group INTEGER NOT NULL DEFAULT 0, PRIMARY KEY (group_id));
CREATE TABLE members (member_id INTEGER, group_id INTEGER NOT NULL, user_id INTEGER NOT NULL, PRIMARY KEY (member_id));
CREATE TABLE execution_command (task_id BIGINT NOT NULL, command LONGBLOB, PRIMARY KEY (task_id));
-CREATE TABLE host_role_command (task_id BIGINT NOT NULL, attempt_count SMALLINT NOT NULL, event LONGTEXT 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), role_command VARCHAR(255), stage_id BIGINT NOT NULL, start_time BIGINT NOT NULL, end_time BIGINT, status VARCHAR(255), std_error LONGBLOB, std_out LONGBLOB, structured_out LONGBLOB, command_detail VARCHAR(255), custom_command_name VARCHAR(255), PRIMARY KEY (task_id));
+CREATE TABLE host_role_command (task_id BIGINT NOT NULL, attempt_count SMALLINT NOT NULL, event LONGTEXT 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), role_command VARCHAR(255), stage_id BIGINT NOT NULL, start_time BIGINT NOT NULL, end_time BIGINT, status VARCHAR(255), std_error LONGBLOB, std_out LONGBLOB, output_log VARCHAR(255) NULL, error_log VARCHAR(255) NULL, structured_out LONGBLOB, command_detail VARCHAR(255), custom_command_name VARCHAR(255), PRIMARY KEY (task_id));
CREATE TABLE role_success_criteria (role VARCHAR(255) NOT NULL, request_id BIGINT NOT NULL, stage_id BIGINT NOT NULL, success_factor DOUBLE NOT NULL, PRIMARY KEY (role, request_id, stage_id));
CREATE TABLE stage (stage_id BIGINT NOT NULL, request_id BIGINT NOT NULL, cluster_id BIGINT, log_info VARCHAR(255) NOT NULL, request_context VARCHAR(255), cluster_host_info LONGBLOB, PRIMARY KEY (stage_id, request_id));
CREATE TABLE request (request_id BIGINT NOT NULL, cluster_id BIGINT, request_schedule_id BIGINT, command_name VARCHAR(255), create_time BIGINT NOT NULL, end_time BIGINT NOT NULL, inputs LONGBLOB, request_context VARCHAR(255), request_type VARCHAR(255), start_time BIGINT NOT NULL, status VARCHAR(255), PRIMARY KEY (request_id));
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/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 30d9e0a..2328ffc 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -31,7 +31,7 @@ CREATE TABLE users (user_id NUMBER(10) NOT NULL, principal_id NUMBER(19) NOT NUL
CREATE TABLE groups (group_id NUMBER(10) NOT NULL, principal_id NUMBER(19) NOT NULL, group_name VARCHAR2(255) NOT NULL, ldap_group NUMBER(10) DEFAULT 0, PRIMARY KEY (group_id));
CREATE TABLE members (member_id NUMBER(10), group_id NUMBER(10) NOT NULL, user_id NUMBER(10) NOT NULL, PRIMARY KEY (member_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, end_time NUMBER(19), status VARCHAR2(255) NULL, std_error BLOB NULL, std_out BLOB NULL, structured_out BLOB NULL, command_detail VARCHAR2(255) NULL, custom_command_name VARCHAR2(255) 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, output_log VARCHAR2(255) NULL, error_log VARCHAR2(255) NULL, structured_out BLOB NULL, command_detail VARCHAR2(255) NULL, custom_command_name VARCHAR2(255) 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 request (request_id NUMBER(19) NOT NULL, cluster_id NUMBER(19), request_schedule_id NUMBER(19), command_name VARCHAR(255), create_time NUMBER(19) NOT NULL, end_time NUMBER(19) NOT NULL, inputs BLOB, request_context VARCHAR(255), request_type VARCHAR(255), start_time NUMBER(19) NOT NULL, status VARCHAR(255), PRIMARY KEY (request_id));
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/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 b32a6f7..8ddd8e8 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
@@ -49,7 +49,7 @@ CREATE TABLE members (member_id INTEGER, group_id INTEGER NOT NULL, user_id INTE
CREATE TABLE execution_command (command BYTEA, task_id BIGINT NOT NULL, PRIMARY KEY (task_id));
-CREATE TABLE 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), command_detail VARCHAR(255), custom_command_name VARCHAR(255), PRIMARY KEY (task_id));
+CREATE TABLE 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, output_log VARCHAR(255) NULL, error_log VARCHAR(255) NULL, structured_out BYTEA, role_command VARCHAR(255), command_detail VARCHAR(255), custom_command_name VARCHAR(255), PRIMARY KEY (task_id));
CREATE TABLE 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/f3aab68e/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
index bcb8145..f78f07f 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
@@ -76,7 +76,7 @@ GRANT ALL PRIVILEGES ON TABLE ambari.members 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, end_time BIGINT, status VARCHAR(255), std_error BYTEA, std_out BYTEA, structured_out BYTEA, role_command VARCHAR(255), command_detail VARCHAR(255), custom_command_name 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, output_log VARCHAR(255) NULL, error_log VARCHAR(255) NULL, structured_out BYTEA, role_command VARCHAR(255), command_detail VARCHAR(255), custom_command_name 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/f3aab68e/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 aeb03f2..543773e 100644
--- a/ambari-server/src/main/resources/properties.json
+++ b/ambari-server/src/main/resources/properties.json
@@ -147,6 +147,8 @@
"Tasks/exit_code",
"Tasks/stderr",
"Tasks/stdout",
+ "Tasks/output_log",
+ "Tasks/error_log",
"Tasks/start_time",
"Tasks/end_time",
"Tasks/structured_out",
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-server/src/main/resources/stacks/HDP/2.1/services/HIVE/metainfo.xml.orig
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.1/services/HIVE/metainfo.xml.orig b/ambari-server/src/main/resources/stacks/HDP/2.1/services/HIVE/metainfo.xml.orig
deleted file mode 100644
index 7f44191..0000000
--- a/ambari-server/src/main/resources/stacks/HDP/2.1/services/HIVE/metainfo.xml.orig
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<metainfo>
- <schemaVersion>2.0</schemaVersion>
- <services>
- <service>
- <name>HIVE</name>
- <comment>Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service</comment>
- <version>0.13.0.2.1</version>
-
- <configuration-dependencies>
- <config-type>hive-site</config-type>
- <config-type>hive-log4j</config-type>
- <config-type>hive-exec-log4j</config-type>
- <config-type>global</config-type>
- </configuration-dependencies>
- </service>
-
- <service>
- <name>HCATALOG</name>
- <comment>This is comment for HCATALOG service</comment>
- <version>0.12.0.2.1</version>
- <osSpecifics>
- <osSpecific>
- <osFamily>any</osFamily>
- <packages>
- <package>
- <name>hive-hcatalog</name>
- </package>
- </packages>
- </osSpecific>
- </osSpecifics>
- </service>
-
- </services>
-</metainfo>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-server/src/test/java/org/apache/ambari/server/agent/LocalAgentSimulator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/LocalAgentSimulator.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/LocalAgentSimulator.java
index e220b3d..892a1f5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/agent/LocalAgentSimulator.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/LocalAgentSimulator.java
@@ -18,6 +18,7 @@
package org.apache.ambari.server.agent;
import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.state.fsm.InvalidStateTransitionException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -97,6 +98,7 @@ public class LocalAgentSimulator implements Runnable {
reg.setTimestamp(System.currentTimeMillis());
reg.setHostname(this.hostname);
reg.setAgentVersion(this.agentVersion);
+ reg.setPrefix(Configuration.PREFIX_DIR);
}
RegistrationResponse response;
try {
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
index 2136c94..599db59 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
@@ -668,6 +668,7 @@ public class TestHeartbeatHandler {
reg.setCurrentPingPort(DummyCurrentPingPort);
reg.setHardwareProfile(hi);
reg.setAgentVersion(metaInfo.getServerVersion());
+ reg.setPrefix(Configuration.PREFIX_DIR);
handler.handleRegistration(reg);
assertEquals(hostObject.getState(), HostState.HEALTHY);
assertEquals(DummyOsType, hostObject.getOsType());
@@ -698,6 +699,7 @@ public class TestHeartbeatHandler {
reg.setHostname(DummyHostname1);
reg.setHardwareProfile(hi);
reg.setAgentVersion(""); // Invalid agent version
+ reg.setPrefix(Configuration.PREFIX_DIR);
try {
handler.handleRegistration(reg);
fail ("Expected failure for non compatible agent version");
@@ -823,12 +825,14 @@ public class TestHeartbeatHandler {
reg.setHostname(DummyHostname1);
reg.setHardwareProfile(hi);
reg.setAgentVersion(metaInfo.getServerVersion());
+ reg.setPrefix(Configuration.PREFIX_DIR);
RegistrationResponse response = handler.handleRegistration(reg);
assertEquals(hostObject.getState(), HostState.HEALTHY);
assertEquals("redhat5", hostObject.getOsType());
assertEquals(RegistrationStatus.OK, response.getResponseStatus());
assertEquals(0, response.getResponseId());
+ assertEquals(reg.getPrefix(), hostObject.getPrefix());
assertTrue(response.getStatusCommands().isEmpty());
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
index 39b43f7..36fc8a1 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
@@ -1563,6 +1563,50 @@ public class AmbariManagementControllerTest {
}
@Test
+ /**
+ * Create a cluster with a service, and verify that the request tasks have the correct output log and error log paths.
+ */
+ public void testRequestStatusLogs() throws Exception {
+ testCreateServiceComponentHostSimple();
+
+ String clusterName = "foo1";
+ String serviceName = "HDFS";
+
+ Cluster cluster = clusters.getCluster(clusterName);
+ for (Host h : clusters.getHosts()) {
+ // Simulate each agent registering and setting the prefix path on its host
+ h.setPrefix(Configuration.PREFIX_DIR);
+ }
+
+ Map<String, Config> configs = new HashMap<String, Config>();
+ Map<String, String> properties = new HashMap<String, String>();
+ Map<String, Map<String, String>> propertiesAttributes = new HashMap<String, Map<String,String>>();
+
+ Config c1 = new ConfigImpl(cluster, "hdfs-site", properties, propertiesAttributes, injector);
+ c1.setVersionTag("v1");
+ cluster.addConfig(c1);
+ c1.persist();
+ configs.put(c1.getType(), c1);
+
+ ServiceRequest r = new ServiceRequest(clusterName, serviceName, State.INSTALLED.toString());
+ Set<ServiceRequest> requests = new HashSet<ServiceRequest>();
+ requests.add(r);
+
+ Map<String, String> mapRequestProps = new HashMap<String, String>();
+ mapRequestProps.put("context", "Called from a test");
+
+ RequestStatusResponse trackAction =
+ ServiceResourceProviderTest.updateServices(controller, requests, mapRequestProps, true, false);
+
+ List<ShortTaskStatus> taskStatuses = trackAction.getTasks();
+ Assert.assertFalse(taskStatuses.isEmpty());
+ for (ShortTaskStatus task : taskStatuses) {
+ Assert.assertEquals("Task output logs don't match", Configuration.PREFIX_DIR + "/output-" + task.getTaskId() + ".txt", task.getOutputLog());
+ Assert.assertEquals("Task error logs don't match", Configuration.PREFIX_DIR + "/errors-" + task.getTaskId() + ".txt", task.getErrorLog());
+ }
+ }
+
+ @Test
public void testInstallAndStartService() throws Exception {
testCreateServiceComponentHostSimple();
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/TaskResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/TaskResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/TaskResourceProviderTest.java
index 2957683..6feb2cc 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/TaskResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/TaskResourceProviderTest.java
@@ -98,7 +98,7 @@ public class TaskResourceProviderTest {
Set<TaskStatusResponse> allResponse = new HashSet<TaskStatusResponse>();
allResponse.add(new TaskStatusResponse(100L, 100, 100L, "HostName100", "", "", "", 0, "", "", 0L, (short) 0,
- "commandDetail", "customCommandName"));
+ "commandDetail", "customCommandName", null, null));
// set expectations
expect(managementController.getTaskStatus(AbstractResourceProviderTest.Matcher.getTaskRequestSet(100L, 100L))).
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java
index c9a392d..4314538 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java
@@ -33,9 +33,9 @@ public class InMemoryDefaultTestModule extends AbstractModule {
protected void configure() {
properties.setProperty(Configuration.SERVER_PERSISTENCE_TYPE_KEY, "in-memory");
properties.setProperty(Configuration.METADETA_DIR_PATH,
- "src/test/resources/stacks");
+ "ambari-server/src/test/resources/stacks");
properties.setProperty(Configuration.SERVER_VERSION_FILE,
- "target/version");
+ "ambari-server/target/version");
properties.setProperty(Configuration.OS_VERSION_KEY,
"centos5");
try {
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-web/app/controllers/global/background_operations_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/background_operations_controller.js b/ambari-web/app/controllers/global/background_operations_controller.js
index 553654b..52108f7 100644
--- a/ambari-web/app/controllers/global/background_operations_controller.js
+++ b/ambari-web/app/controllers/global/background_operations_controller.js
@@ -170,6 +170,8 @@ App.BackgroundOperationsController = Em.Controller.extend({
task.Tasks.status = data.Tasks.status;
task.Tasks.stdout = data.Tasks.stdout;
task.Tasks.stderr = data.Tasks.stderr;
+ task.Tasks.output_log = data.Tasks.output_log;
+ task.Tasks.error_log = data.Tasks.error_log;
this.set('serviceTimestamp', App.dateTime());
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 744601d..56d99a1 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -203,7 +203,7 @@ Em.I18n.translations = {
'common.additional': 'Additional',
'common.time.start': 'Start Time',
'common.time.end': 'End Time',
- 'common.hostLog.popup.logDir.path':'/var/lib/ambari-agent/data/',
+ 'common.hostLog.popup.logDir.path':'/var/lib/ambari-agent/data/', // TODO, this hardcoded path needs to be removed.
'common.hostLog.popup.outputLog.value': 'output-{0}.txt',
'common.hostLog.popup.errorLog.value': 'errors-{0}.txt',
'common.maintenance.task': ' Toggle Maintenance Mode',
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-web/app/utils/host_progress_popup.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/host_progress_popup.js b/ambari-web/app/utils/host_progress_popup.js
index fb9a5e6..41dd17a 100644
--- a/ambari-web/app/utils/host_progress_popup.js
+++ b/ambari-web/app/utils/host_progress_popup.js
@@ -301,8 +301,6 @@ App.HostPopup = Em.Object.create({
commandDetail: App.format.commandDetail(_task.Tasks.command_detail),
status: App.format.taskStatus(_task.Tasks.status),
role: App.format.role(_task.Tasks.role),
- outputLog: Em.I18n.t('common.hostLog.popup.logDir.path') + Em.I18n.t('common.hostLog.popup.outputLog.value').format(_task.Tasks.id),
- errorLog: Em.I18n.t('common.hostLog.popup.logDir.path') + Em.I18n.t('common.hostLog.popup.errorLog.value').format(_task.Tasks.id),
stderr: _task.Tasks.stderr,
stdout: _task.Tasks.stdout,
isVisible: true,
@@ -377,6 +375,9 @@ App.HostPopup = Em.Object.create({
existTask.set('status', App.format.taskStatus(_task.Tasks.status));
existTask.set('stdout', _task.Tasks.stdout);
existTask.set('stderr', _task.Tasks.stderr);
+ // Verified that this is needed.
+ existTask.set('outputLog', _task.Tasks.output_log);
+ existTask.set('errorLog', _task.Tasks.error_log);
existTask.set('startTime', date.startTime(_task.Tasks.start_time));
existTask.set('duration', date.durationSummary(_task.Tasks.start_time, _task.Tasks.end_time));
} else {
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3aab68e/ambari-web/app/views/wizard/step9/hostLogPopupBody_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/wizard/step9/hostLogPopupBody_view.js b/ambari-web/app/views/wizard/step9/hostLogPopupBody_view.js
index daa35b2..4192bdf 100644
--- a/ambari-web/app/views/wizard/step9/hostLogPopupBody_view.js
+++ b/ambari-web/app/views/wizard/step9/hostLogPopupBody_view.js
@@ -147,8 +147,6 @@ App.WizardStep9HostLogPopupBodyView = Em.View.extend({
taskInfo.set('isVisible', true);
taskInfo.set('icon', '');
taskInfo.set('hostName', _task.Tasks.host_name);
- taskInfo.set('outputLog', Em.I18n.t('common.hostLog.popup.logDir.path') + Em.I18n.t('common.hostLog.popup.outputLog.value').format(_task.Tasks.id));
- taskInfo.set('errorLog', Em.I18n.t('common.hostLog.popup.logDir.path') + Em.I18n.t('common.hostLog.popup.errorLog.value').format(_task.Tasks.id));
if (taskInfo.get('status') == 'pending' || taskInfo.get('status') == 'queued') {
taskInfo.set('icon', 'icon-cog');
} else if (taskInfo.get('status') == 'in_progress') {