You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by wf...@apache.org on 2015/04/28 01:52:32 UTC

aurora git commit: Use explicit status update acknowledgements.

Repository: aurora
Updated Branches:
  refs/heads/master 297c0eb48 -> e9d723d9c


Use explicit status update acknowledgements.

Bugs closed: AURORA-1228

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


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

Branch: refs/heads/master
Commit: e9d723d9cc846aab58d389ad71c29b662d313ed1
Parents: 297c0eb
Author: Ben Mahler <be...@gmail.com>
Authored: Mon Apr 27 16:49:34 2015 -0700
Committer: Bill Farner <wf...@apache.org>
Committed: Mon Apr 27 16:49:34 2015 -0700

----------------------------------------------------------------------
 .../aurora/scheduler/mesos/DriverFactoryImpl.java | 14 +++++++++++---
 .../scheduler/mesos/MesosSchedulerImpl.java       | 11 ++++++-----
 .../scheduler/mesos/MesosSchedulerImplTest.java   | 18 +++++++++++-------
 3 files changed, 28 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aurora/blob/e9d723d9/src/main/java/org/apache/aurora/scheduler/mesos/DriverFactoryImpl.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/mesos/DriverFactoryImpl.java b/src/main/java/org/apache/aurora/scheduler/mesos/DriverFactoryImpl.java
index db7aa74..a5f5e99 100644
--- a/src/main/java/org/apache/aurora/scheduler/mesos/DriverFactoryImpl.java
+++ b/src/main/java/org/apache/aurora/scheduler/mesos/DriverFactoryImpl.java
@@ -34,11 +34,19 @@ class DriverFactoryImpl implements DriverFactory {
       Optional<Protos.Credential> credentials,
       FrameworkInfo frameworkInfo,
       String master) {
-
     if (credentials.isPresent()) {
-      return new MesosSchedulerDriver(scheduler, frameworkInfo, master, credentials.get());
+      return new MesosSchedulerDriver(
+          scheduler,
+          frameworkInfo,
+          master,
+          false, // Disable implicit acknowledgements.
+          credentials.get());
     } else {
-      return new MesosSchedulerDriver(scheduler, frameworkInfo, master);
+      return new MesosSchedulerDriver(
+          scheduler,
+          frameworkInfo,
+          master,
+          false); // Disable implicit acknowledgements.
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/aurora/blob/e9d723d9/src/main/java/org/apache/aurora/scheduler/mesos/MesosSchedulerImpl.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/mesos/MesosSchedulerImpl.java b/src/main/java/org/apache/aurora/scheduler/mesos/MesosSchedulerImpl.java
index f40746b..9b8ab7c 100644
--- a/src/main/java/org/apache/aurora/scheduler/mesos/MesosSchedulerImpl.java
+++ b/src/main/java/org/apache/aurora/scheduler/mesos/MesosSchedulerImpl.java
@@ -228,21 +228,22 @@ class MesosSchedulerImpl implements Scheduler {
     try {
       for (TaskLauncher launcher : taskLaunchers) {
         if (launcher.statusUpdate(status)) {
+          driver.acknowledgeStatusUpdate(status);
           return;
         }
       }
     } catch (SchedulerException e) {
       log.log(Level.SEVERE, "Status update failed due to scheduler exception: " + e, e);
-      // We re-throw the exception here in an effort to NACK the status update and trigger an
-      // abort of the driver.  Previously we directly issued driver.abort(), but the re-entrancy
-      // guarantees of that are uncertain (and we believe it was not working).  However, this
-      // was difficult to discern since logging is unreliable during JVM shutdown and we would not
-      // see the above log message.
+      // We re-throw the exception here to trigger an abort of the driver.
       throw e;
     }
 
     log.warning("Unhandled status update " + status);
     counters.get("scheduler_status_updates").incrementAndGet();
+
+    // Even though we have not handled this update, we acknowledge it to prevent an unbounded
+    // growth of status update retries from Mesos.
+    driver.acknowledgeStatusUpdate(status);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/aurora/blob/e9d723d9/src/test/java/org/apache/aurora/scheduler/mesos/MesosSchedulerImplTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/mesos/MesosSchedulerImplTest.java b/src/test/java/org/apache/aurora/scheduler/mesos/MesosSchedulerImplTest.java
index 4ef23ea..abdeee4 100644
--- a/src/test/java/org/apache/aurora/scheduler/mesos/MesosSchedulerImplTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/mesos/MesosSchedulerImplTest.java
@@ -44,6 +44,7 @@ import org.apache.aurora.scheduler.storage.Storage.StorageException;
 import org.apache.aurora.scheduler.storage.entities.IHostAttributes;
 import org.apache.aurora.scheduler.storage.testing.StorageTestUtil;
 import org.apache.aurora.scheduler.testing.FakeStatsProvider;
+import org.apache.mesos.Protos;
 import org.apache.mesos.Protos.ExecutorID;
 import org.apache.mesos.Protos.FrameworkID;
 import org.apache.mesos.Protos.MasterInfo;
@@ -246,8 +247,9 @@ public class MesosSchedulerImplTest extends EasyMockTest {
       @Override
       void expectations() {
         eventSink.post(PUBSUB_EVENT);
-        expect(systemLauncher.statusUpdate(STATUS)).andReturn(false);
-        expect(userLauncher.statusUpdate(STATUS)).andReturn(false);
+        expect(systemLauncher.statusUpdate(status)).andReturn(false);
+        expect(userLauncher.statusUpdate(status)).andReturn(false);
+        expect(driver.acknowledgeStatusUpdate(status)).andReturn(Protos.Status.DRIVER_RUNNING);
       }
     }.run();
   }
@@ -260,12 +262,13 @@ public class MesosSchedulerImplTest extends EasyMockTest {
     @Override
     void expectations() {
       eventSink.post(new TaskStatusReceived(
-          STATUS.getState(),
+          status.getState(),
           Optional.fromNullable(status.getSource()),
           Optional.fromNullable(status.getReason()),
           Optional.of(1000000L)
       ));
       expect(systemLauncher.statusUpdate(status)).andReturn(true);
+      expect(driver.acknowledgeStatusUpdate(status)).andReturn(Protos.Status.DRIVER_RUNNING);
     }
   }
 
@@ -290,8 +293,9 @@ public class MesosSchedulerImplTest extends EasyMockTest {
       @Override
       void expectations() {
         eventSink.post(PUBSUB_EVENT);
-        expect(systemLauncher.statusUpdate(STATUS)).andReturn(false);
-        expect(userLauncher.statusUpdate(STATUS)).andReturn(true);
+        expect(systemLauncher.statusUpdate(status)).andReturn(false);
+        expect(userLauncher.statusUpdate(status)).andReturn(true);
+        expect(driver.acknowledgeStatusUpdate(status)).andReturn(Protos.Status.DRIVER_RUNNING);
       }
     }.run();
   }
@@ -302,8 +306,8 @@ public class MesosSchedulerImplTest extends EasyMockTest {
       @Override
       void expectations() {
         eventSink.post(PUBSUB_EVENT);
-        expect(systemLauncher.statusUpdate(STATUS)).andReturn(false);
-        expect(userLauncher.statusUpdate(STATUS)).andThrow(new StorageException("Injected."));
+        expect(systemLauncher.statusUpdate(status)).andReturn(false);
+        expect(userLauncher.statusUpdate(status)).andThrow(new StorageException("Injected."));
       }
     }.run();
   }