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 2016/02/24 02:03:11 UTC

aurora git commit: AURORA-1616: [part 1] refactor tier management initialization to make it pluggable in tests. Also, renamed tiers-example.json to tiers.json.

Repository: aurora
Updated Branches:
  refs/heads/master 0df94f6e7 -> 7e32c4381


AURORA-1616: [part 1] refactor tier management initialization to
make it pluggable in tests. Also, renamed tiers-example.json to tiers.json.

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


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

Branch: refs/heads/master
Commit: 7e32c43814eff53b8cff974efc476b6557aeb7d5
Parents: 0df94f6
Author: Amol Deshmukh <am...@apache.org>
Authored: Tue Feb 23 17:02:55 2016 -0800
Committer: Maxim Khutornenko <ma...@apache.org>
Committed: Tue Feb 23 17:02:55 2016 -0800

----------------------------------------------------------------------
 docs/deploying-aurora-scheduler.md              |  2 +-
 .../upstart/aurora-scheduler-kerberos.conf      |  2 +-
 examples/vagrant/upstart/aurora-scheduler.conf  |  2 +-
 .../aurora/scheduler/SchedulerModule.java       | 46 ----------
 .../apache/aurora/scheduler/TierManager.java    |  3 +-
 .../org/apache/aurora/scheduler/TierModule.java | 89 ++++++++++++++++++++
 .../aurora/scheduler/app/SchedulerMain.java     |  4 +-
 .../aurora/scheduler/SchedulerModuleTest.java   |  2 +-
 .../aurora/scheduler/TierManagerTest.java       |  2 +-
 .../aurora/scheduler/app/SchedulerIT.java       |  3 +
 .../scheduler/app/local/LocalSchedulerMain.java |  2 +
 .../apache/aurora/scheduler/tiers-example.json  |  9 --
 .../org/apache/aurora/scheduler/tiers.json      |  9 ++
 13 files changed, 113 insertions(+), 62 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aurora/blob/7e32c438/docs/deploying-aurora-scheduler.md
----------------------------------------------------------------------
diff --git a/docs/deploying-aurora-scheduler.md b/docs/deploying-aurora-scheduler.md
index 5f89ca9..883e0f3 100644
--- a/docs/deploying-aurora-scheduler.md
+++ b/docs/deploying-aurora-scheduler.md
@@ -250,7 +250,7 @@ Specify a tier configuration file path:
 
     -tier_config=path/to/tiers/config.json
 
-Example [tier configuration file](../src/test/resources/org/apache/aurora/scheduler/tiers-example.json).
+Example [tier configuration file](../src/test/resources/org/apache/aurora/scheduler/tiers.json).
 
 ### Maintaining an Aurora Installation
 

http://git-wip-us.apache.org/repos/asf/aurora/blob/7e32c438/examples/vagrant/upstart/aurora-scheduler-kerberos.conf
----------------------------------------------------------------------
diff --git a/examples/vagrant/upstart/aurora-scheduler-kerberos.conf b/examples/vagrant/upstart/aurora-scheduler-kerberos.conf
index 53db93c..d57ef37 100644
--- a/examples/vagrant/upstart/aurora-scheduler-kerberos.conf
+++ b/examples/vagrant/upstart/aurora-scheduler-kerberos.conf
@@ -53,4 +53,4 @@ exec bin/aurora-scheduler \
   -kerberos_server_keytab=/home/vagrant/krb5-1.13.1/build/testdir/HTTP-aurora.local.keytab \
   -kerberos_server_principal=HTTP/aurora.local@KRBTEST.COM \
   -enable_h2_console=true \
-  -tier_config=/home/vagrant/aurora/src/test/resources/org/apache/aurora/scheduler/tiers-example.json
+  -tier_config=/home/vagrant/aurora/src/test/resources/org/apache/aurora/scheduler/tiers.json

http://git-wip-us.apache.org/repos/asf/aurora/blob/7e32c438/examples/vagrant/upstart/aurora-scheduler.conf
----------------------------------------------------------------------
diff --git a/examples/vagrant/upstart/aurora-scheduler.conf b/examples/vagrant/upstart/aurora-scheduler.conf
index 70e56b0..54fcde6 100644
--- a/examples/vagrant/upstart/aurora-scheduler.conf
+++ b/examples/vagrant/upstart/aurora-scheduler.conf
@@ -46,6 +46,6 @@ exec bin/aurora-scheduler \
   -use_beta_db_task_store=true \
   -shiro_ini_path=etc/shiro.example.ini \
   -enable_h2_console=true \
-  -tier_config=/home/vagrant/aurora/src/test/resources/org/apache/aurora/scheduler/tiers-example.json \
+  -tier_config=/home/vagrant/aurora/src/test/resources/org/apache/aurora/scheduler/tiers.json \
   -mesos_role=aurora-role \
   -receive_revocable_resources=true

http://git-wip-us.apache.org/repos/asf/aurora/blob/7e32c438/src/main/java/org/apache/aurora/scheduler/SchedulerModule.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/SchedulerModule.java b/src/main/java/org/apache/aurora/scheduler/SchedulerModule.java
index ddc0d05..4a7ef0b 100644
--- a/src/main/java/org/apache/aurora/scheduler/SchedulerModule.java
+++ b/src/main/java/org/apache/aurora/scheduler/SchedulerModule.java
@@ -13,41 +13,29 @@
  */
 package org.apache.aurora.scheduler;
 
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ScheduledExecutorService;
-
 import javax.inject.Singleton;
 
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Optional;
-import com.google.common.base.Throwables;
-import com.google.common.io.Files;
 import com.google.inject.AbstractModule;
 import com.google.inject.PrivateModule;
 import com.google.inject.TypeLiteral;
 
 import org.apache.aurora.common.args.Arg;
 import org.apache.aurora.common.args.CmdLine;
-import org.apache.aurora.common.args.constraints.CanRead;
 import org.apache.aurora.common.args.constraints.Positive;
 import org.apache.aurora.common.quantity.Amount;
 import org.apache.aurora.common.quantity.Time;
 import org.apache.aurora.scheduler.SchedulerLifecycle.LeadingOptions;
 import org.apache.aurora.scheduler.TaskIdGenerator.TaskIdGeneratorImpl;
-import org.apache.aurora.scheduler.TierManager.TierManagerImpl;
 import org.apache.aurora.scheduler.base.AsyncUtil;
 import org.apache.aurora.scheduler.events.PubsubEventModule;
 import org.apache.mesos.Protos;
-import org.codehaus.jackson.map.ObjectMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static org.apache.aurora.scheduler.SchedulerServicesModule.addSchedulerActiveServiceBinding;
-import static org.apache.aurora.scheduler.TierManager.TierManagerImpl.TierConfig;
 
 /**
  * Binding module for top-level scheduling logic.
@@ -71,11 +59,6 @@ public class SchedulerModule extends AbstractModule {
       help = "The maximum number of status updates that can be processed in a batch.")
   private static final Arg<Integer> MAX_STATUS_UPDATE_BATCH_SIZE = Arg.create(1000);
 
-  @CanRead
-  @CmdLine(name = "tier_config",
-      help = "Configuration file defining supported task tiers, task traits and behaviors.")
-  private static final Arg<File> TIER_CONFIG_FILE = Arg.create();
-
   @Override
   protected void configure() {
     bind(TaskIdGenerator.class).to(TaskIdGeneratorImpl.class);
@@ -109,36 +92,7 @@ public class SchedulerModule extends AbstractModule {
 
     bind(TaskStatusHandler.class).to(TaskStatusHandlerImpl.class);
     bind(TaskStatusHandlerImpl.class).in(Singleton.class);
-
-    bind(TierConfig.class).toInstance(parseTierConfig(readTierFile()));
-    bind(TierManager.class).to(TierManagerImpl.class);
-    bind(TierManagerImpl.class).in(Singleton.class);
     addSchedulerActiveServiceBinding(binder()).to(TaskStatusHandlerImpl.class);
   }
 
-  private static Optional<String> readTierFile() {
-    if (TIER_CONFIG_FILE.hasAppliedValue()) {
-      try {
-        return Optional.of(Files.toString(TIER_CONFIG_FILE.get(), StandardCharsets.UTF_8));
-      } catch (IOException e) {
-        LOG.error("Error loading tier configuration file.");
-        throw Throwables.propagate(e);
-      }
-    }
-
-    return Optional.<String>absent();
-  }
-
-  @VisibleForTesting
-  static TierConfig parseTierConfig(Optional<String> config) {
-    Optional<TierConfig> map = config.transform(input -> {
-      try {
-        return new ObjectMapper().readValue(input, TierConfig.class);
-      } catch (IOException e) {
-        LOG.error("Error parsing tier configuration file.");
-        throw Throwables.propagate(e);
-      }
-    });
-    return map.or(TierConfig.EMPTY);
-  }
 }

http://git-wip-us.apache.org/repos/asf/aurora/blob/7e32c438/src/main/java/org/apache/aurora/scheduler/TierManager.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/TierManager.java b/src/main/java/org/apache/aurora/scheduler/TierManager.java
index 7367df4..fce6e51 100644
--- a/src/main/java/org/apache/aurora/scheduler/TierManager.java
+++ b/src/main/java/org/apache/aurora/scheduler/TierManager.java
@@ -51,8 +51,9 @@ public interface TierManager {
 
       private final Map<String, TierInfo> tiers;
 
+      @VisibleForTesting
       @JsonCreator
-      TierConfig(@JsonProperty("tiers") Map<String, TierInfo> tiers) {
+      public TierConfig(@JsonProperty("tiers") Map<String, TierInfo> tiers) {
         this.tiers = ImmutableMap.copyOf(tiers);
       }
 

http://git-wip-us.apache.org/repos/asf/aurora/blob/7e32c438/src/main/java/org/apache/aurora/scheduler/TierModule.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/TierModule.java b/src/main/java/org/apache/aurora/scheduler/TierModule.java
new file mode 100644
index 0000000..b5f065e
--- /dev/null
+++ b/src/main/java/org/apache/aurora/scheduler/TierModule.java
@@ -0,0 +1,89 @@
+/**
+ * Licensed 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.
+ */
+package org.apache.aurora.scheduler;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Optional;
+import com.google.common.base.Throwables;
+import com.google.common.io.Files;
+import com.google.inject.AbstractModule;
+
+import org.apache.aurora.common.args.Arg;
+import org.apache.aurora.common.args.CmdLine;
+import org.apache.aurora.common.args.constraints.CanRead;
+import org.apache.aurora.scheduler.TierManager.TierManagerImpl;
+import org.apache.aurora.scheduler.TierManager.TierManagerImpl.TierConfig;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static java.util.Objects.requireNonNull;
+
+/**
+ * Binding module for tier management.
+ */
+public class TierModule extends AbstractModule {
+  private static final Logger LOG = LoggerFactory.getLogger(TierModule.class);
+
+  @CanRead
+  @CmdLine(name = "tier_config",
+      help = "Configuration file defining supported task tiers, task traits and behaviors.")
+  private static final Arg<File> TIER_CONFIG_FILE = Arg.create();
+
+  private final TierConfig tierConfig;
+
+  public TierModule() {
+    this(parseTierConfig(readTierFile()));
+  }
+
+  @VisibleForTesting
+  public TierModule(TierConfig tierConfig) {
+    this.tierConfig = requireNonNull(tierConfig);
+  }
+
+  @Override
+  protected void configure() {
+    bind(TierManager.class).toInstance(new TierManagerImpl(tierConfig));
+  }
+
+  static Optional<String> readTierFile() {
+    if (TIER_CONFIG_FILE.hasAppliedValue()) {
+      try {
+        return Optional.of(Files.toString(TIER_CONFIG_FILE.get(), StandardCharsets.UTF_8));
+      } catch (IOException e) {
+        LOG.error("Error loading tier configuration file.");
+        throw Throwables.propagate(e);
+      }
+    }
+
+    return Optional.<String>absent();
+  }
+
+  @VisibleForTesting
+  static TierConfig parseTierConfig(Optional<String> config) {
+    Optional<TierConfig> map = config.transform(input -> {
+      try {
+        return new ObjectMapper().readValue(input, TierConfig.class);
+      } catch (IOException e) {
+        LOG.error("Error parsing tier configuration file.");
+        throw Throwables.propagate(e);
+      }
+    });
+    return map.or(TierConfig.EMPTY);
+  }
+}

http://git-wip-us.apache.org/repos/asf/aurora/blob/7e32c438/src/main/java/org/apache/aurora/scheduler/app/SchedulerMain.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/app/SchedulerMain.java b/src/main/java/org/apache/aurora/scheduler/app/SchedulerMain.java
index cd9cb09..60b66e8 100644
--- a/src/main/java/org/apache/aurora/scheduler/app/SchedulerMain.java
+++ b/src/main/java/org/apache/aurora/scheduler/app/SchedulerMain.java
@@ -48,6 +48,7 @@ import org.apache.aurora.common.zookeeper.SingletonService.LeadershipListener;
 import org.apache.aurora.gen.ServerInfo;
 import org.apache.aurora.scheduler.AppStartup;
 import org.apache.aurora.scheduler.SchedulerLifecycle;
+import org.apache.aurora.scheduler.TierModule;
 import org.apache.aurora.scheduler.configuration.executor.ExecutorModule;
 import org.apache.aurora.scheduler.cron.quartz.CronModule;
 import org.apache.aurora.scheduler.http.HttpService;
@@ -201,7 +202,8 @@ public class SchedulerMain {
             new CommandLineDriverSettingsModule(),
             new LibMesosLoadingModule(),
             new MesosLogStreamModule(FlaggedClientConfig.create()),
-            new LogStorageModule())
+            new LogStorageModule(),
+            new TierModule())
         .build();
     flagConfiguredMain(Modules.combine(modules));
   }

http://git-wip-us.apache.org/repos/asf/aurora/blob/7e32c438/src/test/java/org/apache/aurora/scheduler/SchedulerModuleTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/SchedulerModuleTest.java b/src/test/java/org/apache/aurora/scheduler/SchedulerModuleTest.java
index 9dd0569..aa6e035 100644
--- a/src/test/java/org/apache/aurora/scheduler/SchedulerModuleTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/SchedulerModuleTest.java
@@ -18,7 +18,7 @@ import com.google.common.collect.ImmutableMap;
 
 import org.junit.Test;
 
-import static org.apache.aurora.scheduler.SchedulerModule.parseTierConfig;
+import static org.apache.aurora.scheduler.TierModule.parseTierConfig;
 import static org.apache.aurora.scheduler.base.TaskTestUtil.REVOCABLE_TIER;
 import static org.junit.Assert.assertEquals;
 

http://git-wip-us.apache.org/repos/asf/aurora/blob/7e32c438/src/test/java/org/apache/aurora/scheduler/TierManagerTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/TierManagerTest.java b/src/test/java/org/apache/aurora/scheduler/TierManagerTest.java
index 350b90b..4da829f 100644
--- a/src/test/java/org/apache/aurora/scheduler/TierManagerTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/TierManagerTest.java
@@ -21,8 +21,8 @@ import org.apache.aurora.scheduler.TierManager.TierManagerImpl.TierConfig;
 import org.apache.aurora.scheduler.storage.entities.ITaskConfig;
 import org.junit.Test;
 
-import static org.apache.aurora.scheduler.SchedulerModule.parseTierConfig;
 import static org.apache.aurora.scheduler.TierInfo.DEFAULT;
+import static org.apache.aurora.scheduler.TierModule.parseTierConfig;
 import static org.apache.aurora.scheduler.base.TaskTestUtil.REVOCABLE_TIER;
 import static org.junit.Assert.assertEquals;
 

http://git-wip-us.apache.org/repos/asf/aurora/blob/7e32c438/src/test/java/org/apache/aurora/scheduler/app/SchedulerIT.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/app/SchedulerIT.java b/src/test/java/org/apache/aurora/scheduler/app/SchedulerIT.java
index 39916f5..7ee31fd 100644
--- a/src/test/java/org/apache/aurora/scheduler/app/SchedulerIT.java
+++ b/src/test/java/org/apache/aurora/scheduler/app/SchedulerIT.java
@@ -61,6 +61,8 @@ import org.apache.aurora.gen.storage.Transaction;
 import org.apache.aurora.gen.storage.storageConstants;
 import org.apache.aurora.scheduler.AppStartup;
 import org.apache.aurora.scheduler.ResourceSlot;
+import org.apache.aurora.scheduler.TierManager.TierManagerImpl.TierConfig;
+import org.apache.aurora.scheduler.TierModule;
 import org.apache.aurora.scheduler.base.TaskTestUtil;
 import org.apache.aurora.scheduler.configuration.executor.ExecutorSettings;
 import org.apache.aurora.scheduler.log.Log;
@@ -200,6 +202,7 @@ public class SchedulerIT extends BaseZooKeeperTest {
     Injector injector = Guice.createInjector(
         ImmutableList.<Module>builder()
             .add(SchedulerMain.getUniversalModule())
+            .add(new TierModule(TierConfig.EMPTY))
             .add(new LogStorageModule())
             .add(new ZooKeeperClientModule(zkClientConfig))
             .add(new ServiceDiscoveryModule(SERVERSET_PATH, credentials))

http://git-wip-us.apache.org/repos/asf/aurora/blob/7e32c438/src/test/java/org/apache/aurora/scheduler/app/local/LocalSchedulerMain.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/app/local/LocalSchedulerMain.java b/src/test/java/org/apache/aurora/scheduler/app/local/LocalSchedulerMain.java
index 4716b66..fb27657 100644
--- a/src/test/java/org/apache/aurora/scheduler/app/local/LocalSchedulerMain.java
+++ b/src/test/java/org/apache/aurora/scheduler/app/local/LocalSchedulerMain.java
@@ -70,6 +70,8 @@ public final class LocalSchedulerMain {
         .add("-shiro_ini_path="
             + ResourceUtils.CLASSPATH_PREFIX
             + "org/apache/aurora/scheduler/http/api/security/shiro-example.ini")
+        .add("-tier_config="
+            + ResourceUtils.CLASSPATH_PREFIX + "org/apache/aurora/scheduler/tiers.json")
         .add("-enable_h2_console=true")
         .build();
     SchedulerMain.applyStaticArgumentValues(arguments.toArray(new String[] {}));

http://git-wip-us.apache.org/repos/asf/aurora/blob/7e32c438/src/test/resources/org/apache/aurora/scheduler/tiers-example.json
----------------------------------------------------------------------
diff --git a/src/test/resources/org/apache/aurora/scheduler/tiers-example.json b/src/test/resources/org/apache/aurora/scheduler/tiers-example.json
deleted file mode 100644
index 2140773..0000000
--- a/src/test/resources/org/apache/aurora/scheduler/tiers-example.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  "tiers":
-  {
-    "revocable":
-    {
-      "revocable": true
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/7e32c438/src/test/resources/org/apache/aurora/scheduler/tiers.json
----------------------------------------------------------------------
diff --git a/src/test/resources/org/apache/aurora/scheduler/tiers.json b/src/test/resources/org/apache/aurora/scheduler/tiers.json
new file mode 100644
index 0000000..2140773
--- /dev/null
+++ b/src/test/resources/org/apache/aurora/scheduler/tiers.json
@@ -0,0 +1,9 @@
+{
+  "tiers":
+  {
+    "revocable":
+    {
+      "revocable": true
+    }
+  }
+}