You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by vv...@apache.org on 2016/02/02 04:58:47 UTC

[1/2] hadoop git commit: YARN-4649. Add additional logging to some NM state store operations. Contributed by Sidharta Seethana

Repository: hadoop
Updated Branches:
  refs/heads/branch-2 9591363ad -> bbda44688
  refs/heads/trunk 9875325d5 -> 1cd55e0c1


YARN-4649. Add additional logging to some NM state store operations. Contributed by Sidharta Seethana


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/1cd55e0c
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/1cd55e0c
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/1cd55e0c

Branch: refs/heads/trunk
Commit: 1cd55e0c171f7c4dec6f843931285557d59cd5ea
Parents: 9875325
Author: Varun Vasudev <vv...@apache.org>
Authored: Tue Feb 2 09:25:23 2016 +0530
Committer: Varun Vasudev <vv...@apache.org>
Committed: Tue Feb 2 09:25:23 2016 +0530

----------------------------------------------------------------------
 hadoop-yarn-project/CHANGES.txt                 |  3 ++
 .../containermanager/ContainerManagerImpl.java  | 14 +++++++
 .../recovery/NMLeveldbStateStoreService.java    | 44 ++++++++++++++++++++
 .../recovery/NMStateStoreService.java           | 11 +++++
 4 files changed, 72 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/1cd55e0c/hadoop-yarn-project/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt
index 90742db..bf46864 100644
--- a/hadoop-yarn-project/CHANGES.txt
+++ b/hadoop-yarn-project/CHANGES.txt
@@ -115,6 +115,9 @@ Release 2.9.0 - UNRELEASED
 
     YARN-4647. Make RegisterNodeManagerRequestPBImpl thread-safe. (kasha)
 
+    YARN-4649. Add additional logging to some NM state store operations.
+    (Sidharta Seethana via vvasudev)
+
   OPTIMIZATIONS
 
   BUG FIXES

http://git-wip-us.apache.org/repos/asf/hadoop/blob/1cd55e0c/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/ContainerManagerImpl.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/ContainerManagerImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/ContainerManagerImpl.java
index d0663d5..7d51477 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/ContainerManagerImpl.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/ContainerManagerImpl.java
@@ -286,18 +286,32 @@ public class ContainerManagerImpl extends CompositeService implements
       RecoveredApplicationsState appsState = stateStore.loadApplicationsState();
       for (ContainerManagerApplicationProto proto :
            appsState.getApplications()) {
+        if (LOG.isDebugEnabled()) {
+          LOG.debug("Recovering application with state: " + proto.toString());
+        }
         recoverApplication(proto);
       }
 
       for (RecoveredContainerState rcs : stateStore.loadContainersState()) {
+        if (LOG.isDebugEnabled()) {
+          LOG.debug("Recovering container with state: " + rcs);
+        }
+
         recoverContainer(rcs);
       }
 
       String diagnostic = "Application marked finished during recovery";
       for (ApplicationId appId : appsState.getFinishedApplications()) {
+
+        if (LOG.isDebugEnabled()) {
+          LOG.debug("Application marked finished during recovery: " + appId);
+        }
+
         dispatcher.getEventHandler().handle(
             new ApplicationFinishEvent(appId, diagnostic));
       }
+    } else {
+      LOG.info("Not a recoverable state store. Nothing to recover.");
     }
   }
 

http://git-wip-us.apache.org/repos/asf/hadoop/blob/1cd55e0c/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMLeveldbStateStoreService.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMLeveldbStateStoreService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMLeveldbStateStoreService.java
index 89c71bb..81d6c57 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMLeveldbStateStoreService.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMLeveldbStateStoreService.java
@@ -248,6 +248,11 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void storeContainer(ContainerId containerId,
       StartContainerRequest startRequest) throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("storeContainer: containerId= " + containerId
+          + ", startRequest= " + startRequest);
+    }
+
     String key = CONTAINERS_KEY_PREFIX + containerId.toString()
         + CONTAINER_REQUEST_KEY_SUFFIX;
     try {
@@ -261,6 +266,11 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void storeContainerDiagnostics(ContainerId containerId,
       StringBuilder diagnostics) throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("storeContainerDiagnostics: containerId=" + containerId
+          + ", diagnostics=" + diagnostics);
+    }
+
     String key = CONTAINERS_KEY_PREFIX + containerId.toString()
         + CONTAINER_DIAGS_KEY_SUFFIX;
     try {
@@ -273,6 +283,10 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void storeContainerLaunched(ContainerId containerId)
       throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("storeContainerLaunched: containerId=" + containerId);
+    }
+
     String key = CONTAINERS_KEY_PREFIX + containerId.toString()
         + CONTAINER_LAUNCHED_KEY_SUFFIX;
     try {
@@ -285,6 +299,11 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void storeContainerResourceChanged(ContainerId containerId,
       Resource capability) throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("storeContainerResourceChanged: containerId=" + containerId
+          + ", capability=" + capability);
+    }
+
     String key = CONTAINERS_KEY_PREFIX + containerId.toString()
         + CONTAINER_RESOURCE_CHANGED_KEY_SUFFIX;
     try {
@@ -299,6 +318,10 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void storeContainerKilled(ContainerId containerId)
       throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("storeContainerKilled: containerId=" + containerId);
+    }
+
     String key = CONTAINERS_KEY_PREFIX + containerId.toString()
         + CONTAINER_KILLED_KEY_SUFFIX;
     try {
@@ -311,6 +334,10 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void storeContainerCompleted(ContainerId containerId,
       int exitCode) throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("storeContainerCompleted: containerId=" + containerId);
+    }
+
     String key = CONTAINERS_KEY_PREFIX + containerId.toString()
         + CONTAINER_EXIT_CODE_KEY_SUFFIX;
     try {
@@ -323,6 +350,10 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void removeContainer(ContainerId containerId)
       throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("removeContainer: containerId=" + containerId);
+    }
+
     String keyPrefix = CONTAINERS_KEY_PREFIX + containerId.toString();
     try {
       WriteBatch batch = db.createWriteBatch();
@@ -389,6 +420,11 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void storeApplication(ApplicationId appId,
       ContainerManagerApplicationProto p) throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("storeApplication: appId=" + appId
+          + ", proto=" + p);
+    }
+
     String key = APPLICATIONS_KEY_PREFIX + appId;
     try {
       db.put(bytes(key), p.toByteArray());
@@ -400,6 +436,10 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void storeFinishedApplication(ApplicationId appId)
       throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("storeFinishedApplication.appId: " + appId);
+    }
+
     String key = FINISHED_APPS_KEY_PREFIX + appId;
     try {
       db.put(bytes(key), new byte[0]);
@@ -411,6 +451,10 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void removeApplication(ApplicationId appId)
       throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("removeApplication: appId=" + appId);
+    }
+
     try {
       WriteBatch batch = db.createWriteBatch();
       try {

http://git-wip-us.apache.org/repos/asf/hadoop/blob/1cd55e0c/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMStateStoreService.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMStateStoreService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMStateStoreService.java
index e8ccf54..84c5aa9 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMStateStoreService.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMStateStoreService.java
@@ -100,6 +100,17 @@ public abstract class NMStateStoreService extends AbstractService {
     public Resource getCapability() {
       return capability;
     }
+
+    @Override
+    public String toString() {
+      return new StringBuffer("Status: ").append(getStatus())
+          .append(", Exit code: ").append(exitCode)
+          .append(", Killed: ").append(getKilled())
+          .append(", Diagnostics: ").append(getDiagnostics())
+          .append(", Capability: ").append(getCapability())
+          .append(", StartRequest: ").append(getStartRequest())
+          .toString();
+    }
   }
 
   public static class LocalResourceTrackerState {


[2/2] hadoop git commit: YARN-4649. Add additional logging to some NM state store operations. Contributed by Sidharta Seethana

Posted by vv...@apache.org.
YARN-4649. Add additional logging to some NM state store operations. Contributed by Sidharta Seethana

(cherry picked from commit 1cd55e0c171f7c4dec6f843931285557d59cd5ea)


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/bbda4468
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/bbda4468
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/bbda4468

Branch: refs/heads/branch-2
Commit: bbda446889eb07391619131524fe75a411c97017
Parents: 9591363
Author: Varun Vasudev <vv...@apache.org>
Authored: Tue Feb 2 09:25:23 2016 +0530
Committer: Varun Vasudev <vv...@apache.org>
Committed: Tue Feb 2 09:26:22 2016 +0530

----------------------------------------------------------------------
 hadoop-yarn-project/CHANGES.txt                 |  3 ++
 .../containermanager/ContainerManagerImpl.java  | 14 +++++++
 .../recovery/NMLeveldbStateStoreService.java    | 44 ++++++++++++++++++++
 .../recovery/NMStateStoreService.java           | 11 +++++
 4 files changed, 72 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/bbda4468/hadoop-yarn-project/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt
index 68a364e..94b62e1 100644
--- a/hadoop-yarn-project/CHANGES.txt
+++ b/hadoop-yarn-project/CHANGES.txt
@@ -57,6 +57,9 @@ Release 2.9.0 - UNRELEASED
 
     YARN-4647. Make RegisterNodeManagerRequestPBImpl thread-safe. (kasha)
 
+    YARN-4649. Add additional logging to some NM state store operations.
+    (Sidharta Seethana via vvasudev)
+
   OPTIMIZATIONS
 
   BUG FIXES

http://git-wip-us.apache.org/repos/asf/hadoop/blob/bbda4468/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/ContainerManagerImpl.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/ContainerManagerImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/ContainerManagerImpl.java
index d0663d5..7d51477 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/ContainerManagerImpl.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/ContainerManagerImpl.java
@@ -286,18 +286,32 @@ public class ContainerManagerImpl extends CompositeService implements
       RecoveredApplicationsState appsState = stateStore.loadApplicationsState();
       for (ContainerManagerApplicationProto proto :
            appsState.getApplications()) {
+        if (LOG.isDebugEnabled()) {
+          LOG.debug("Recovering application with state: " + proto.toString());
+        }
         recoverApplication(proto);
       }
 
       for (RecoveredContainerState rcs : stateStore.loadContainersState()) {
+        if (LOG.isDebugEnabled()) {
+          LOG.debug("Recovering container with state: " + rcs);
+        }
+
         recoverContainer(rcs);
       }
 
       String diagnostic = "Application marked finished during recovery";
       for (ApplicationId appId : appsState.getFinishedApplications()) {
+
+        if (LOG.isDebugEnabled()) {
+          LOG.debug("Application marked finished during recovery: " + appId);
+        }
+
         dispatcher.getEventHandler().handle(
             new ApplicationFinishEvent(appId, diagnostic));
       }
+    } else {
+      LOG.info("Not a recoverable state store. Nothing to recover.");
     }
   }
 

http://git-wip-us.apache.org/repos/asf/hadoop/blob/bbda4468/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMLeveldbStateStoreService.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMLeveldbStateStoreService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMLeveldbStateStoreService.java
index 89c71bb..81d6c57 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMLeveldbStateStoreService.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMLeveldbStateStoreService.java
@@ -248,6 +248,11 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void storeContainer(ContainerId containerId,
       StartContainerRequest startRequest) throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("storeContainer: containerId= " + containerId
+          + ", startRequest= " + startRequest);
+    }
+
     String key = CONTAINERS_KEY_PREFIX + containerId.toString()
         + CONTAINER_REQUEST_KEY_SUFFIX;
     try {
@@ -261,6 +266,11 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void storeContainerDiagnostics(ContainerId containerId,
       StringBuilder diagnostics) throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("storeContainerDiagnostics: containerId=" + containerId
+          + ", diagnostics=" + diagnostics);
+    }
+
     String key = CONTAINERS_KEY_PREFIX + containerId.toString()
         + CONTAINER_DIAGS_KEY_SUFFIX;
     try {
@@ -273,6 +283,10 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void storeContainerLaunched(ContainerId containerId)
       throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("storeContainerLaunched: containerId=" + containerId);
+    }
+
     String key = CONTAINERS_KEY_PREFIX + containerId.toString()
         + CONTAINER_LAUNCHED_KEY_SUFFIX;
     try {
@@ -285,6 +299,11 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void storeContainerResourceChanged(ContainerId containerId,
       Resource capability) throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("storeContainerResourceChanged: containerId=" + containerId
+          + ", capability=" + capability);
+    }
+
     String key = CONTAINERS_KEY_PREFIX + containerId.toString()
         + CONTAINER_RESOURCE_CHANGED_KEY_SUFFIX;
     try {
@@ -299,6 +318,10 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void storeContainerKilled(ContainerId containerId)
       throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("storeContainerKilled: containerId=" + containerId);
+    }
+
     String key = CONTAINERS_KEY_PREFIX + containerId.toString()
         + CONTAINER_KILLED_KEY_SUFFIX;
     try {
@@ -311,6 +334,10 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void storeContainerCompleted(ContainerId containerId,
       int exitCode) throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("storeContainerCompleted: containerId=" + containerId);
+    }
+
     String key = CONTAINERS_KEY_PREFIX + containerId.toString()
         + CONTAINER_EXIT_CODE_KEY_SUFFIX;
     try {
@@ -323,6 +350,10 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void removeContainer(ContainerId containerId)
       throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("removeContainer: containerId=" + containerId);
+    }
+
     String keyPrefix = CONTAINERS_KEY_PREFIX + containerId.toString();
     try {
       WriteBatch batch = db.createWriteBatch();
@@ -389,6 +420,11 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void storeApplication(ApplicationId appId,
       ContainerManagerApplicationProto p) throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("storeApplication: appId=" + appId
+          + ", proto=" + p);
+    }
+
     String key = APPLICATIONS_KEY_PREFIX + appId;
     try {
       db.put(bytes(key), p.toByteArray());
@@ -400,6 +436,10 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void storeFinishedApplication(ApplicationId appId)
       throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("storeFinishedApplication.appId: " + appId);
+    }
+
     String key = FINISHED_APPS_KEY_PREFIX + appId;
     try {
       db.put(bytes(key), new byte[0]);
@@ -411,6 +451,10 @@ public class NMLeveldbStateStoreService extends NMStateStoreService {
   @Override
   public void removeApplication(ApplicationId appId)
       throws IOException {
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("removeApplication: appId=" + appId);
+    }
+
     try {
       WriteBatch batch = db.createWriteBatch();
       try {

http://git-wip-us.apache.org/repos/asf/hadoop/blob/bbda4468/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMStateStoreService.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMStateStoreService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMStateStoreService.java
index e8ccf54..84c5aa9 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMStateStoreService.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/recovery/NMStateStoreService.java
@@ -100,6 +100,17 @@ public abstract class NMStateStoreService extends AbstractService {
     public Resource getCapability() {
       return capability;
     }
+
+    @Override
+    public String toString() {
+      return new StringBuffer("Status: ").append(getStatus())
+          .append(", Exit code: ").append(exitCode)
+          .append(", Killed: ").append(getKilled())
+          .append(", Diagnostics: ").append(getDiagnostics())
+          .append(", Capability: ").append(getCapability())
+          .append(", StartRequest: ").append(getStartRequest())
+          .toString();
+    }
   }
 
   public static class LocalResourceTrackerState {