You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by zm...@apache.org on 2015/10/26 22:04:04 UTC

aurora git commit: Add listener to trigger scheduler shutdown on service failure.

Repository: aurora
Updated Branches:
  refs/heads/master ed2cfb7da -> e6f940b24


Add listener to trigger scheduler shutdown on service failure.

Bugs closed: AURORA-1511

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


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

Branch: refs/heads/master
Commit: e6f940b245b903c30c1c05cc18769919e5915ba5
Parents: ed2cfb7
Author: Zameer Manji <zm...@apache.org>
Authored: Mon Oct 26 14:03:52 2015 -0700
Committer: Zameer Manji <zm...@apache.org>
Committed: Mon Oct 26 14:03:52 2015 -0700

----------------------------------------------------------------------
 config/legacy_untested_classes.txt              |  3 ++-
 src/main/java/org/apache/aurora/GuavaUtils.java | 20 ++++++++++++++++++++
 .../scheduler/SchedulerServicesModule.java      | 19 +++++++++++++++----
 3 files changed, 37 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aurora/blob/e6f940b2/config/legacy_untested_classes.txt
----------------------------------------------------------------------
diff --git a/config/legacy_untested_classes.txt b/config/legacy_untested_classes.txt
index 0f1e6be..70d1dd0 100644
--- a/config/legacy_untested_classes.txt
+++ b/config/legacy_untested_classes.txt
@@ -1,3 +1,4 @@
+org/apache/aurora/GuavaUtils$LifecycleShutdownListener
 org/apache/aurora/Protobufs$1
 org/apache/aurora/auth/CapabilityValidator$AuditCheck
 org/apache/aurora/auth/UnsecureAuthModule$UnsecureCapabilityValidator
@@ -67,7 +68,7 @@ org/apache/aurora/scheduler/storage/mem/MemTaskStore$Task
 org/apache/aurora/scheduler/storage/mem/Util
 org/apache/aurora/scheduler/storage/mem/Util$1
 org/apache/aurora/scheduler/testing/FakeStatsProvider$3
+org/apache/aurora/scheduler/zookeeper/guice/client/ZooKeeperClientModule$1
 org/apache/aurora/scheduler/zookeeper/guice/client/ZooKeeperClientModule$LocalClientProvider
 org/apache/aurora/scheduler/zookeeper/guice/client/ZooKeeperClientModule$TestServerService
-org/apache/aurora/scheduler/zookeeper/guice/client/ZooKeeperClientModule$1
 org/apache/aurora/scheduler/zookeeper/guice/client/flagged/FlaggedClientConfig

http://git-wip-us.apache.org/repos/asf/aurora/blob/e6f940b2/src/main/java/org/apache/aurora/GuavaUtils.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/GuavaUtils.java b/src/main/java/org/apache/aurora/GuavaUtils.java
index e3e90e3..5cdd9a9 100644
--- a/src/main/java/org/apache/aurora/GuavaUtils.java
+++ b/src/main/java/org/apache/aurora/GuavaUtils.java
@@ -15,6 +15,7 @@ package org.apache.aurora;
 
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
+import java.util.logging.Logger;
 import java.util.stream.Collector;
 
 import com.google.common.collect.ImmutableList;
@@ -23,6 +24,9 @@ import com.google.common.collect.ImmutableSet;
 import com.google.common.util.concurrent.Service;
 import com.google.common.util.concurrent.Service.State;
 import com.google.common.util.concurrent.ServiceManager;
+import com.google.inject.Inject;
+
+import org.apache.aurora.common.application.Lifecycle;
 
 import static java.util.stream.Collector.Characteristics.UNORDERED;
 
@@ -34,6 +38,22 @@ public final class GuavaUtils {
     // Utility class.
   }
 
+  public static class LifecycleShutdownListener extends ServiceManager.Listener {
+    private final Lifecycle lifecycle;
+    private static final Logger LOG = Logger.getLogger(LifecycleShutdownListener.class.getName());
+
+    @Inject
+    LifecycleShutdownListener(Lifecycle lifecycle) {
+      this.lifecycle = lifecycle;
+    }
+
+    @Override
+    public void failure(Service service) {
+      LOG.severe("Service: " + service + " failed unexpectedly. Triggering shutdown.");
+      lifecycle.shutdown();
+    }
+  }
+
   /**
    * Collector to create a Guava ImmutableSet.
    */

http://git-wip-us.apache.org/repos/asf/aurora/blob/e6f940b2/src/main/java/org/apache/aurora/scheduler/SchedulerServicesModule.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/SchedulerServicesModule.java b/src/main/java/org/apache/aurora/scheduler/SchedulerServicesModule.java
index 7b110b9..a28b59f 100644
--- a/src/main/java/org/apache/aurora/scheduler/SchedulerServicesModule.java
+++ b/src/main/java/org/apache/aurora/scheduler/SchedulerServicesModule.java
@@ -26,6 +26,7 @@ import com.google.inject.binder.LinkedBindingBuilder;
 import com.google.inject.multibindings.Multibinder;
 
 import org.apache.aurora.GuavaUtils;
+import org.apache.aurora.GuavaUtils.LifecycleShutdownListener;
 import org.apache.aurora.GuavaUtils.ServiceManagerIface;
 import org.apache.aurora.scheduler.SchedulerLifecycle.SchedulerActive;
 
@@ -68,14 +69,24 @@ public class SchedulerServicesModule extends AbstractModule {
   @Provides
   @Singleton
   @AppStartup
-  ServiceManagerIface provideAppStartupServiceManager(@AppStartup Set<Service> services) {
-    return GuavaUtils.serviceManager(new ServiceManager(services));
+  ServiceManagerIface provideAppStartupServiceManager(
+      @AppStartup Set<Service> services,
+      LifecycleShutdownListener listener) {
+
+    ServiceManager manager = new ServiceManager(services);
+    manager.addListener(listener);
+    return GuavaUtils.serviceManager(manager);
   }
 
   @Provides
   @Singleton
   @SchedulerActive
-  ServiceManagerIface provideSchedulerActiveServiceManager(@SchedulerActive Set<Service> services) {
-    return GuavaUtils.serviceManager(new ServiceManager(services));
+  ServiceManagerIface provideSchedulerActiveServiceManager(
+      @SchedulerActive Set<Service> services,
+      LifecycleShutdownListener listener) {
+
+    ServiceManager manager = new ServiceManager(services);
+    manager.addListener(listener);
+    return GuavaUtils.serviceManager(manager);
   }
 }