You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apex.apache.org by vr...@apache.org on 2015/10/25 20:37:54 UTC

[11/36] incubator-apex-core git commit: APEX-199 #resolve Added platform version check when launching app package

APEX-199 #resolve Added platform version check when launching app package


Project: http://git-wip-us.apache.org/repos/asf/incubator-apex-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-apex-core/commit/3e361866
Tree: http://git-wip-us.apache.org/repos/asf/incubator-apex-core/tree/3e361866
Diff: http://git-wip-us.apache.org/repos/asf/incubator-apex-core/diff/3e361866

Branch: refs/heads/feature-module
Commit: 3e3618668d672252a7b884fd80fb9da8c90378b9
Parents: 722fd67
Author: David Yan <da...@datatorrent.com>
Authored: Thu Oct 15 18:50:27 2015 -0700
Committer: David Yan <da...@datatorrent.com>
Committed: Thu Oct 15 18:50:27 2015 -0700

----------------------------------------------------------------------
 .../java/com/datatorrent/stram/cli/DTCli.java    | 18 ++++++++++++++++--
 .../com/datatorrent/stram/util/VersionInfo.java  | 19 +++++++++++++++++++
 .../datatorrent/stram/util/VersionInfoTest.java  | 12 ++++++++++++
 3 files changed, 47 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-apex-core/blob/3e361866/engine/src/main/java/com/datatorrent/stram/cli/DTCli.java
----------------------------------------------------------------------
diff --git a/engine/src/main/java/com/datatorrent/stram/cli/DTCli.java b/engine/src/main/java/com/datatorrent/stram/cli/DTCli.java
index e126f73..89f92f0 100644
--- a/engine/src/main/java/com/datatorrent/stram/cli/DTCli.java
+++ b/engine/src/main/java/com/datatorrent/stram/cli/DTCli.java
@@ -1888,7 +1888,10 @@ public class DTCli
 
           if (ap != null) {
             try {
-              checkCompatible(ap, cp);
+              if (!commandLineInfo.force) {
+                checkPlatformCompatible(ap);
+                checkConfigPackageCompatible(ap, cp);
+              }
               launchAppPackage(ap, cp, commandLineInfo, reader);
               return;
             } finally {
@@ -3426,7 +3429,7 @@ public class DTCli
 
   }
 
-  private void checkCompatible(AppPackage ap, ConfigPackage cp)
+  private void checkConfigPackageCompatible(AppPackage ap, ConfigPackage cp)
   {
     if (cp == null) {
       return;
@@ -3445,6 +3448,14 @@ public class DTCli
     }
   }
 
+  private void checkPlatformCompatible(AppPackage ap)
+  {
+    String apVersion = ap.getDtEngineVersion();
+    if (!VersionInfo.isCompatible(apVersion, VersionInfo.getVersion())) {
+      throw new CliException("This App Package is compiled with Apache Apex Core API version " + apVersion + ", which is incompatible with this Apex Core version " + VersionInfo.getVersion());
+    }
+  }
+
   private void launchAppPackage(AppPackage ap, ConfigPackage cp, LaunchCommandLineInfo commandLineInfo, ConsoleReader reader) throws Exception
   {
     new LaunchCommand().execute(getLaunchAppPackageArgs(ap, cp, commandLineInfo, reader), reader);
@@ -3848,6 +3859,7 @@ public class DTCli
     final Option originalAppID = add(OptionBuilder.withArgName("application id").hasArg().withDescription("Specify original application identifier for restart.").create("originalAppId"));
     final Option exactMatch = add(new Option("exactMatch", "Only consider applications with exact app name"));
     final Option queue = add(OptionBuilder.withArgName("queue name").hasArg().withDescription("Specify the queue to launch the application").create("queue"));
+    final Option force = add(new Option("force", "Force launch the application. Do not check for compatibility"));
 
     private Option add(Option opt)
     {
@@ -3888,6 +3900,7 @@ public class DTCli
     result.args = line.getArgs();
     result.origAppId = line.getOptionValue(LAUNCH_OPTIONS.originalAppID.getOpt());
     result.exactMatch = line.hasOption("exactMatch");
+    result.force = line.hasOption("force");
     return result;
   }
 
@@ -3904,6 +3917,7 @@ public class DTCli
     String archives;
     String origAppId;
     boolean exactMatch;
+    boolean force;
     String[] args;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-apex-core/blob/3e361866/engine/src/main/java/com/datatorrent/stram/util/VersionInfo.java
----------------------------------------------------------------------
diff --git a/engine/src/main/java/com/datatorrent/stram/util/VersionInfo.java b/engine/src/main/java/com/datatorrent/stram/util/VersionInfo.java
index cd1bc3b..fc29b01 100644
--- a/engine/src/main/java/com/datatorrent/stram/util/VersionInfo.java
+++ b/engine/src/main/java/com/datatorrent/stram/util/VersionInfo.java
@@ -155,6 +155,25 @@ public class VersionInfo {
     }
   }
 
+  public static boolean isCompatible(String thisVersion, String requiredVersion)
+  {
+    String[] thisVersionComponent = normalizeVersion(thisVersion).split("\\.");
+    String[] requiredVersionComponent = normalizeVersion(requiredVersion).split("\\.");
+
+    // major version check
+    if (!thisVersionComponent[0].equals(requiredVersionComponent[0])) {
+      return false;
+    }
+
+    // minor version check
+    if (Integer.parseInt(thisVersionComponent[1]) < Integer.parseInt(requiredVersionComponent[1])) {
+      return false;
+    }
+
+    // patch version doesn't matter
+    return true;
+  }
+
   private static String normalizeVersion(String ver)
   {
     for (int i = 0; i < ver.length(); i++) {

http://git-wip-us.apache.org/repos/asf/incubator-apex-core/blob/3e361866/engine/src/test/java/com/datatorrent/stram/util/VersionInfoTest.java
----------------------------------------------------------------------
diff --git a/engine/src/test/java/com/datatorrent/stram/util/VersionInfoTest.java b/engine/src/test/java/com/datatorrent/stram/util/VersionInfoTest.java
index a7a2a1a..60d11a9 100644
--- a/engine/src/test/java/com/datatorrent/stram/util/VersionInfoTest.java
+++ b/engine/src/test/java/com/datatorrent/stram/util/VersionInfoTest.java
@@ -42,4 +42,16 @@ public class VersionInfoTest
     Assert.assertTrue(c < 0);
   }
 
+  @Test
+  public void testCompatibleVersion()
+  {
+    Assert.assertFalse(VersionInfo.isCompatible("1.0", "1.1"));
+    Assert.assertTrue(VersionInfo.isCompatible("1.10", "1.2"));
+    Assert.assertTrue(VersionInfo.isCompatible("1.10.0", "1.10.34"));
+    Assert.assertTrue(VersionInfo.isCompatible("1.10.55", "1.10.3"));
+    Assert.assertTrue(VersionInfo.isCompatible("1.10.55", "1.10.55"));
+    Assert.assertFalse(VersionInfo.isCompatible("1.10.55", "2.10.55"));
+    Assert.assertFalse(VersionInfo.isCompatible("2.10.55", "1.10.55"));
+  }
+
 }