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 2014/03/11 18:59:51 UTC

git commit: Part 1 of converting from Packages to Metadata.

Repository: incubator-aurora
Updated Branches:
  refs/heads/master 6fd220423 -> c90c87464


Part 1 of converting from Packages to Metadata.

Bugs closed: AURORA-158

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


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

Branch: refs/heads/master
Commit: c90c87464a3bf326fe6863e111238de480f56a59
Parents: 6fd2204
Author: Maxim Khutornenko <ma...@apache.org>
Authored: Tue Mar 11 10:59:24 2014 -0700
Committer: Maxim Khutornenko <ma...@apache.org>
Committed: Tue Mar 11 10:59:24 2014 -0700

----------------------------------------------------------------------
 .../aurora/scheduler/http/SchedulerzJob.java    |  9 ++----
 .../aurora/scheduler/http/SchedulerzRole.java   | 20 +++---------
 .../scheduler/http/TransformationUtils.java     | 32 ++++++++++++++++++++
 .../local/IsolatedSchedulerModule.java          |  6 ++--
 .../aurora/scheduler/http/schedulerzrole.st     |  4 +--
 .../thrift/org/apache/aurora/gen/api.thrift     | 10 ++++--
 .../configuration/ConfigurationManagerTest.java |  2 +-
 .../org/apache/aurora/gen/api.thrift.md5        |  2 +-
 8 files changed, 55 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/c90c8746/src/main/java/org/apache/aurora/scheduler/http/SchedulerzJob.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/http/SchedulerzJob.java b/src/main/java/org/apache/aurora/scheduler/http/SchedulerzJob.java
index c14e195..2ccc6f3 100644
--- a/src/main/java/org/apache/aurora/scheduler/http/SchedulerzJob.java
+++ b/src/main/java/org/apache/aurora/scheduler/http/SchedulerzJob.java
@@ -268,12 +268,9 @@ public class SchedulerzJob extends JerseyTemplateServlet {
             details.put("ports",
                 Joiner.on(", ").join(ImmutableSortedSet.copyOf(task.getRequestedPorts())));
           }
-          if (!task.getPackages().isEmpty()) {
-            List<String> packages = Ordering.natural().sortedCopy(
-                Iterables.transform(task.getPackages(), TransformationUtils.PACKAGE_TOSTRING));
-            details.put(
-                "packages",
-                Joiner.on(',').join(packages));
+          Optional<String> metadata = TransformationUtils.getMetadata(task);
+          if (metadata.isPresent()) {
+            details.put("metadata", metadata.get());
           }
           details.put("contact", task.isSetContactEmail() ? task.getContactEmail() : "none");
           return new SchedulingDetails(details.build());

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/c90c8746/src/main/java/org/apache/aurora/scheduler/http/SchedulerzRole.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/http/SchedulerzRole.java b/src/main/java/org/apache/aurora/scheduler/http/SchedulerzRole.java
index 1151b03..b3f3124 100644
--- a/src/main/java/org/apache/aurora/scheduler/http/SchedulerzRole.java
+++ b/src/main/java/org/apache/aurora/scheduler/http/SchedulerzRole.java
@@ -18,7 +18,6 @@ package org.apache.aurora.scheduler.http;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import javax.inject.Inject;
 import javax.ws.rs.GET;
@@ -31,16 +30,12 @@ import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 
 import com.google.common.base.Function;
-import com.google.common.base.Joiner;
 import com.google.common.base.Optional;
 import com.google.common.base.Predicate;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Multimap;
-import com.google.common.collect.Sets;
 import com.twitter.common.base.Closure;
 
 import org.antlr.stringtemplate.StringTemplate;
@@ -184,7 +179,7 @@ public class SchedulerzRole extends JerseyTemplateServlet {
                 .put("cronSchedule", job.getCronSchedule())
                 .put("nextRun", cronPredictor.predictNextRun(job.getCronSchedule()).getTime())
                 .put("cronCollisionPolicy", cronCollisionPolicy(job))
-                .put("packages", getPackages(job))
+                .put("metadata", getMetadata(job))
                 .build();
           }
         });
@@ -194,16 +189,9 @@ public class SchedulerzRole extends JerseyTemplateServlet {
     return CronJobManager.orDefault(jobConfiguration.getCronCollisionPolicy());
   }
 
-  private static String getPackages(IJobConfiguration job) {
-    Set<String> packages = Sets.newHashSet();
-
-    // Insert all packages for all tasks in the set to eliminate duplicates
-    ITaskConfig task = job.getTaskConfig();
-    if (!task.getPackages().isEmpty()) {
-      packages.addAll(Lists.newArrayList(
-          Iterables.transform(task.getPackages(), TransformationUtils.PACKAGE_TOSTRING)));
-    }
-    return Joiner.on(',').join(packages);
+  private static String getMetadata(IJobConfiguration job) {
+    Optional<String> metadata = TransformationUtils.getMetadata(job.getTaskConfig());
+    return metadata.isPresent() ? metadata.get() : "";
   }
 
   private List<Job> fetchJobsBy(

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/c90c8746/src/main/java/org/apache/aurora/scheduler/http/TransformationUtils.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/http/TransformationUtils.java b/src/main/java/org/apache/aurora/scheduler/http/TransformationUtils.java
index b6ee04e..bfd28a0 100644
--- a/src/main/java/org/apache/aurora/scheduler/http/TransformationUtils.java
+++ b/src/main/java/org/apache/aurora/scheduler/http/TransformationUtils.java
@@ -19,11 +19,16 @@ import java.util.Collection;
 
 import com.google.common.base.Function;
 import com.google.common.base.Joiner;
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
+import com.google.common.collect.Ordering;
 import com.google.common.collect.Range;
 
 import org.apache.aurora.scheduler.base.Numbers;
+import org.apache.aurora.scheduler.storage.entities.IMetadata;
 import org.apache.aurora.scheduler.storage.entities.IPackage;
+import org.apache.aurora.scheduler.storage.entities.ITaskConfig;
 
 /**
  * Utility class to hold common object to string transformation helper functions.
@@ -37,6 +42,14 @@ final class TransformationUtils {
         }
       };
 
+  public static final Function<IMetadata, String> METADATA_TOSTRING =
+      new com.twitter.common.base.Function<IMetadata, String>() {
+        @Override
+        public String apply(IMetadata item) {
+          return item.getKey() + ": " + item.getValue();
+        }
+      };
+
   public static final Function<Range<Integer>, String> RANGE_TOSTRING =
       new Function<Range<Integer>, String>() {
         @Override
@@ -59,4 +72,23 @@ final class TransformationUtils {
   private TransformationUtils() {
     // Utility class
   }
+
+  /**
+   * Gets an optional task metadata.
+   *
+   * @param task Task to get metadata from.
+   * @return Present if task metadata exists, absent otherwise.
+   */
+  public static Optional<String> getMetadata(ITaskConfig task) {
+    if (task.isSetPackagesDEPRECATED()) {
+      Iterable<String> packages = ImmutableSet.copyOf(
+          Iterables.transform(task.getPackagesDEPRECATED(), TransformationUtils.PACKAGE_TOSTRING));
+      return Optional.of(Joiner.on(", ").join(Ordering.natural().sortedCopy(packages)));
+    } else if (task.isSetMetadata()) {
+      Iterable<String> metadata = ImmutableSet.copyOf(
+          Iterables.transform(task.getMetadata(), TransformationUtils.METADATA_TOSTRING));
+      return Optional.of(Joiner.on(", ").join(Ordering.natural().sortedCopy(metadata)));
+    }
+    return Optional.absent();
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/c90c8746/src/main/java/org/apache/aurora/scheduler/local/IsolatedSchedulerModule.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/local/IsolatedSchedulerModule.java b/src/main/java/org/apache/aurora/scheduler/local/IsolatedSchedulerModule.java
index fe2965d..b931baa 100644
--- a/src/main/java/org/apache/aurora/scheduler/local/IsolatedSchedulerModule.java
+++ b/src/main/java/org/apache/aurora/scheduler/local/IsolatedSchedulerModule.java
@@ -49,7 +49,7 @@ import org.apache.aurora.gen.AuroraAdmin;
 import org.apache.aurora.gen.ExecutorConfig;
 import org.apache.aurora.gen.Identity;
 import org.apache.aurora.gen.JobConfiguration;
-import org.apache.aurora.gen.Package;
+import org.apache.aurora.gen.Metadata;
 import org.apache.aurora.gen.ResourceAggregate;
 import org.apache.aurora.gen.Response;
 import org.apache.aurora.gen.SessionKey;
@@ -277,7 +277,9 @@ public class IsolatedSchedulerModule extends AbstractModule {
               .setNumCpus(1.0)
               .setDiskMb(1024)
               .setRamMb(1024)
-              .setPackages(ImmutableSet.of(new Package(owner.getRole(), "package", 15)))
+              .setMetadata(ImmutableSet.of(
+                  new Metadata("role", owner.getRole()),
+                  new Metadata("package", "15")))
               .setExecutorConfig(new ExecutorConfig("aurora", "opaque")));
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/c90c8746/src/main/resources/org/apache/aurora/scheduler/http/schedulerzrole.st
----------------------------------------------------------------------
diff --git a/src/main/resources/org/apache/aurora/scheduler/http/schedulerzrole.st b/src/main/resources/org/apache/aurora/scheduler/http/schedulerzrole.st
index d568a7e..39c1d95 100644
--- a/src/main/resources/org/apache/aurora/scheduler/http/schedulerzrole.st
+++ b/src/main/resources/org/apache/aurora/scheduler/http/schedulerzrole.st
@@ -134,7 +134,7 @@
               <th>Schedule
               <th>Next Run
               <th>Collision policy
-              <th>Packages
+              <th>Metadata
             </thead>
             <tbody>
               $cronJobs:{ job |
@@ -145,7 +145,7 @@
                 <td>$job.cronSchedule$
                 <td><script>document.write(printDate($job.nextRun$));</script>
                 <td>$job.cronCollisionPolicy$
-                <td>$job.packages$
+                <td>$job.metadata$
               </tr>
               }$
             </tbody>

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/c90c8746/src/main/thrift/org/apache/aurora/gen/api.thrift
----------------------------------------------------------------------
diff --git a/src/main/thrift/org/apache/aurora/gen/api.thrift b/src/main/thrift/org/apache/aurora/gen/api.thrift
index 5c5142c..f6c444d 100644
--- a/src/main/thrift/org/apache/aurora/gen/api.thrift
+++ b/src/main/thrift/org/apache/aurora/gen/api.thrift
@@ -110,6 +110,12 @@ struct Package {
   3: i32 version
 }
 
+// Arbitrary key-value metadata to be included into TaskConfig.
+struct Metadata {
+  1: string key
+  2: string value
+}
+
 // A unique identifier for a Job.
 struct JobKey {
   1: string role        // Mesos role (Unix service account), for example "mesos"
@@ -170,9 +176,9 @@ struct TaskConfig {
                                              // Wildcards are supported for dynamic link
                                              // crafting based on host, ports, instance, etc.
  23: optional string contactEmail
- 24: optional set<Package> packages          // Used only to display package information in the
-                                             // scheduler UI.
+ 24: optional set<Package> packagesDEPRECATED // TODO(maxim): Drop when fully migrated to metadata.
  25: optional ExecutorConfig executorConfig  // Executor configuration
+ 27: optional set<Metadata> metadata         // Used to display additional details in the UI.
 }
 
 // Defines the policy for launching a new cron job when one is already running.

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/c90c8746/src/test/java/org/apache/aurora/scheduler/configuration/ConfigurationManagerTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/configuration/ConfigurationManagerTest.java b/src/test/java/org/apache/aurora/scheduler/configuration/ConfigurationManagerTest.java
index 4beb2cf..05e80e8 100644
--- a/src/test/java/org/apache/aurora/scheduler/configuration/ConfigurationManagerTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/configuration/ConfigurationManagerTest.java
@@ -58,7 +58,7 @@ public class ConfigurationManagerTest {
               .setContactEmail("foo@twitter.com")
               .setProduction(false)
               .setDiskMb(1)
-              .setPackages(null)
+              .setMetadata(null)
               .setNumCpus(1.0)
               .setRamMb(1)
               .setMaxTaskFailures(0)

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/c90c8746/src/test/resources/org/apache/aurora/gen/api.thrift.md5
----------------------------------------------------------------------
diff --git a/src/test/resources/org/apache/aurora/gen/api.thrift.md5 b/src/test/resources/org/apache/aurora/gen/api.thrift.md5
index 250dd6b..8b6f0a1 100644
--- a/src/test/resources/org/apache/aurora/gen/api.thrift.md5
+++ b/src/test/resources/org/apache/aurora/gen/api.thrift.md5
@@ -1 +1 @@
-0f9ef34166894f7e8099b1c355bb81f9
+81e3efd49d0b177759414564a4903a3d