You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by ma...@apache.org on 2015/08/14 22:20:55 UTC

aurora git commit: Suppressing "Unregistered executor" status message.

Repository: aurora
Updated Branches:
  refs/heads/master ae8a9f726 -> b6e2bc34f


Suppressing "Unregistered executor" status message.

Bugs closed: AURORA-1193

Reviewed at https://reviews.apache.org/r/37483/


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

Branch: refs/heads/master
Commit: b6e2bc34fe0785270700cf39e6d45af86b414c5a
Parents: ae8a9f7
Author: Maxim Khutornenko <ma...@apache.org>
Authored: Fri Aug 14 13:18:14 2015 -0700
Committer: Maxim Khutornenko <ma...@apache.org>
Committed: Fri Aug 14 13:18:14 2015 -0700

----------------------------------------------------------------------
 .../aurora/scheduler/TaskStatusHandlerImpl.java | 39 +++++++---
 .../scheduler/TaskStatusHandlerImplTest.java    | 78 +++++++++++++++-----
 2 files changed, 86 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aurora/blob/b6e2bc34/src/main/java/org/apache/aurora/scheduler/TaskStatusHandlerImpl.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/TaskStatusHandlerImpl.java b/src/main/java/org/apache/aurora/scheduler/TaskStatusHandlerImpl.java
index 24a7a2c..423765f 100644
--- a/src/main/java/org/apache/aurora/scheduler/TaskStatusHandlerImpl.java
+++ b/src/main/java/org/apache/aurora/scheduler/TaskStatusHandlerImpl.java
@@ -153,22 +153,12 @@ public class TaskStatusHandlerImpl extends AbstractExecutionThreadService
             for (TaskStatus status : updates) {
               ScheduleStatus translatedState = Conversions.convertProtoState(status.getState());
 
-              Optional<String> message = Optional.absent();
-              if (status.hasMessage()) {
-                message = Optional.of(status.getMessage());
-              }
-
-              if (translatedState == ScheduleStatus.FAILED && status.hasReason()
-                  && status.getReason() == TaskStatus.Reason.REASON_MEMORY_LIMIT) {
-                message = Optional.of(MEMORY_LIMIT_DISPLAY);
-              }
-
               StateChangeResult result = stateManager.changeState(
                   storeProvider,
                   status.getTaskId().getValue(),
                   Optional.absent(),
                   translatedState,
-                  message);
+                  formatMessage(status));
 
               if (status.hasReason()) {
                 counters.get(statName(status, result)).incrementAndGet();
@@ -190,4 +180,31 @@ public class TaskStatusHandlerImpl extends AbstractExecutionThreadService
   static String statName(TaskStatus status, StateChangeResult result) {
     return String.format(STATUS_STAT_FORMAT, status.getReason(), result);
   }
+
+  private static Optional<String> formatMessage(TaskStatus status) {
+    Optional<String> message = Optional.absent();
+    if (status.hasMessage()) {
+      message = Optional.of(status.getMessage());
+    }
+
+    if (status.hasReason()) {
+      switch (status.getReason()) {
+        case REASON_MEMORY_LIMIT:
+          // Add a failure explanation to the user
+          message = Optional.of(MEMORY_LIMIT_DISPLAY);
+          break;
+
+        case REASON_EXECUTOR_UNREGISTERED:
+          // Suppress "Unregistered executor" message as it bears no meaning to the user.
+          message = Optional.absent();
+          break;
+
+        default:
+          // Message is already populated above.
+          break;
+      }
+    }
+
+    return message;
+  }
 }

http://git-wip-us.apache.org/repos/asf/aurora/blob/b6e2bc34/src/test/java/org/apache/aurora/scheduler/TaskStatusHandlerImplTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/TaskStatusHandlerImplTest.java b/src/test/java/org/apache/aurora/scheduler/TaskStatusHandlerImplTest.java
index 83dcb4b..937cadc 100644
--- a/src/test/java/org/apache/aurora/scheduler/TaskStatusHandlerImplTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/TaskStatusHandlerImplTest.java
@@ -32,11 +32,13 @@ import org.apache.mesos.Protos.TaskID;
 import org.apache.mesos.Protos.TaskState;
 import org.apache.mesos.Protos.TaskStatus;
 import org.easymock.EasyMock;
+import org.easymock.IAnswer;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
 import static org.apache.aurora.gen.ScheduleStatus.FAILED;
+import static org.apache.aurora.gen.ScheduleStatus.KILLED;
 import static org.apache.aurora.gen.ScheduleStatus.RUNNING;
 import static org.apache.aurora.scheduler.TaskStatusHandlerImpl.statName;
 import static org.easymock.EasyMock.expect;
@@ -102,10 +104,7 @@ public class TaskStatusHandlerImplTest extends EasyMockTest {
     final CountDownLatch latch = new CountDownLatch(1);
 
     driver.acknowledgeStatusUpdate(status);
-    expectLastCall().andAnswer(() -> {
-        latch.countDown();
-        return null;
-      });
+    waitAndAnswer(latch);
 
     control.replay();
 
@@ -126,10 +125,13 @@ public class TaskStatusHandlerImplTest extends EasyMockTest {
         Optional.absent(),
         RUNNING,
         Optional.of("fake message")))
-        .andAnswer(() -> {
+        .andAnswer(new IAnswer<StateChangeResult>() {
+          @Override
+          public StateChangeResult answer() throws Throwable {
             latch.countDown();
             throw new StorageException("Injected error");
-          });
+          }
+        });
 
     control.replay();
 
@@ -166,10 +168,38 @@ public class TaskStatusHandlerImplTest extends EasyMockTest {
     final CountDownLatch latch = new CountDownLatch(1);
 
     driver.acknowledgeStatusUpdate(status);
-    expectLastCall().andAnswer(() -> {
-        latch.countDown();
-        return null;
-      });
+    waitAndAnswer(latch);
+
+    control.replay();
+
+    statusHandler.statusUpdate(status);
+
+    assertTrue(latch.await(5L, TimeUnit.SECONDS));
+  }
+
+  @Test
+  public void testSuppressUnregisteredExecutorMessage() throws Exception {
+    storageUtil.expectWrite();
+
+    TaskStatus status = TaskStatus.newBuilder()
+        .setState(TaskState.TASK_KILLED)
+        .setTaskId(TaskID.newBuilder().setValue(TASK_ID_A))
+        .setReason(TaskStatus.Reason.REASON_EXECUTOR_UNREGISTERED)
+        .setMessage("Unregistered executor")
+        .build();
+
+    expect(stateManager.changeState(
+        storageUtil.mutableStoreProvider,
+        TASK_ID_A,
+        Optional.absent(),
+        KILLED,
+        Optional.absent()))
+        .andReturn(StateChangeResult.SUCCESS);
+
+    final CountDownLatch latch = new CountDownLatch(1);
+
+    driver.acknowledgeStatusUpdate(status);
+    waitAndAnswer(latch);
 
     control.replay();
 
@@ -197,21 +227,19 @@ public class TaskStatusHandlerImplTest extends EasyMockTest {
         1000,
         new CachedCounters(stats));
 
-    expect(queue.add(EasyMock.anyObject()))
-        .andReturn(true);
+    expect(queue.add(EasyMock.anyObject())).andReturn(true);
 
-    expect(queue.take())
-        .andAnswer(() -> {
-            throw new RuntimeException();
-          });
+    expect(queue.take()).andAnswer(new IAnswer<TaskStatus>() {
+      @Override
+      public TaskStatus answer() throws Throwable {
+        throw new RuntimeException();
+      }
+    });
 
     final CountDownLatch latch = new CountDownLatch(1);
 
     driver.abort();
-    expectLastCall().andAnswer(() -> {
-        latch.countDown();
-        return null;
-      });
+    waitAndAnswer(latch);
 
     control.replay();
 
@@ -227,4 +255,14 @@ public class TaskStatusHandlerImplTest extends EasyMockTest {
 
     assertTrue(latch.await(5L, TimeUnit.SECONDS));
   }
+
+  private static void waitAndAnswer(CountDownLatch latch) {
+    expectLastCall().andAnswer(new IAnswer<StateChangeResult>() {
+      @Override
+      public StateChangeResult answer() {
+        latch.countDown();
+        return null;
+      }
+    });
+  }
 }