Repository: incubator-slider
Updated Branches:
  refs/heads/develop 4197c8bb8 -> fa73aee3a


SLIDER-773 Addendum which renames AddoPackageMetainfoParser (Thomas Liu)


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

Branch: refs/heads/develop
Commit: fa73aee3a38ac9cf803bbf168f45723698ef0789
Parents: 4197c8b
Author: tedyu <[email protected]>
Authored: Mon Apr 13 09:35:11 2015 -0700
Committer: tedyu <[email protected]>
Committed: Mon Apr 13 09:35:11 2015 -0700

----------------------------------------------------------------------
 .../providers/agent/AgentProviderService.java   | 17 ++++---
 .../slider/providers/agent/AgentUtils.java      |  4 +-
 .../providers/agent/ComponentInstanceState.java | 53 ++++++++------------
 .../metadata/AbstractMetainfoParser.java        | 14 +++++-
 .../metadata/AddoPackageMetainfoParser.java     | 53 --------------------
 .../metadata/AddonPackageMetainfoParser.java    | 53 ++++++++++++++++++++
 .../agent/application/metadata/Metainfo.java    |  7 +--
 7 files changed, 102 insertions(+), 99 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/fa73aee3/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
 
b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
index 832d149..a076606 100644
--- 
a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
+++ 
b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
@@ -303,11 +303,10 @@ public class AgentProviderService extends 
AbstractProviderService implements
               Metainfo addonMetaInfo = getApplicationMetainfo(fileSystem,
                   addonAppDefPath, true);
               addonMetaInfo.validate();
-              log.debug("this addon pkg metainfo: {}", 
addonMetaInfo.toString());
               packageMetainfo.put(addonMetaInfo.getApplicationPackage()
                   .getName(), addonMetaInfo);
             }
-            log.debug("metainfo map for master and addon is: {}",
+            log.info("metainfo map for master and addon is: {}",
                 packageMetainfo.toString());
           }
         }
@@ -873,7 +872,9 @@ public class AgentProviderService extends 
AbstractProviderService implements
     }
     
     Command command = componentStatus.getNextCommand(doUpgrade);
-    log.debug("for comp " + roleName + " pkg " + 
componentStatus.getNextPkgToInstall() + " issuing " + command.toString());
+    log.info("for comp " + roleName + " pkg "
+        + componentStatus.getNextPkgToInstall() + " issuing "
+        + command.toString());
 
     try {
       if (Command.NOP != command) {
@@ -1200,13 +1201,14 @@ public class AgentProviderService extends 
AbstractProviderService implements
 
   @VisibleForTesting
   protected Metainfo getApplicationMetainfo(SliderFileSystem fileSystem,
-                                            String appDef, boolean 
addonPackage) throws IOException, BadConfigException {
+      String appDef, boolean addonPackage) throws IOException,
+      BadConfigException {
     return AgentUtils.getApplicationMetainfo(fileSystem, appDef, addonPackage);
   }
 
   @VisibleForTesting
   protected Metainfo getApplicationMetainfo(SliderFileSystem fileSystem,
-                                            String appDef) throws IOException, 
BadConfigException {
+      String appDef) throws IOException, BadConfigException {
     return AgentUtils.getApplicationMetainfo(fileSystem, appDef, false);
   }
 
@@ -1819,7 +1821,10 @@ public class AgentProviderService extends 
AbstractProviderService implements
    * @param containerId
    * @param response
    * @param scriptPath
-   * @param pkg TODO
+   * @param pkg
+   *          - when this field is null, it indicates the command is for the
+   *          master package; while not null, for the package named by this
+   *          field
    * @throws SliderException
    */
   @VisibleForTesting

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/fa73aee3/slider-core/src/main/java/org/apache/slider/providers/agent/AgentUtils.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentUtils.java 
b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentUtils.java
index 1cbc550..071194a 100644
--- 
a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentUtils.java
+++ 
b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentUtils.java
@@ -22,7 +22,7 @@ import org.apache.slider.common.tools.SliderFileSystem;
 import org.apache.slider.common.tools.SliderUtils;
 import org.apache.slider.core.exceptions.BadConfigException;
 import 
org.apache.slider.providers.agent.application.metadata.AbstractMetainfoParser;
-import 
org.apache.slider.providers.agent.application.metadata.AddoPackageMetainfoParser;
+import 
org.apache.slider.providers.agent.application.metadata.AddonPackageMetainfoParser;
 import org.apache.slider.providers.agent.application.metadata.DefaultConfig;
 import 
org.apache.slider.providers.agent.application.metadata.DefaultConfigParser;
 import org.apache.slider.providers.agent.application.metadata.Metainfo;
@@ -49,7 +49,7 @@ public class AgentUtils {
     Metainfo metainfo = null;
     AbstractMetainfoParser metainfoParser = null;
     if(metainfoForAddon){
-      metainfoParser = new AddoPackageMetainfoParser();
+      metainfoParser = new AddonPackageMetainfoParser();
     } else {
       metainfoParser = new MetainfoParser();
     }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/fa73aee3/slider-core/src/main/java/org/apache/slider/providers/agent/ComponentInstanceState.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/providers/agent/ComponentInstanceState.java
 
b/slider-core/src/main/java/org/apache/slider/providers/agent/ComponentInstanceState.java
index fe051cf..bed8e54 100644
--- 
a/slider-core/src/main/java/org/apache/slider/providers/agent/ComponentInstanceState.java
+++ 
b/slider-core/src/main/java/org/apache/slider/providers/agent/ComponentInstanceState.java
@@ -128,10 +128,10 @@ public class ComponentInstanceState {
     if (expected == Command.INSTALL_ADDON){
       //for add on packages. the pkg must be nextPkgToInstall
       State currentState = pkgStatuses.get(nextPkgToInstall);
-      log.debug("commandissued: component: {} is in {}", componentName, 
currentState);
+      log.debug("command issued: component: {} is in {}", componentName, 
currentState);
       State nextState = currentState.getNextState(command);
       pkgStatuses.put(nextPkgToInstall, nextState);
-      log.debug("commandissued: component: {} is now in {}", componentName, 
nextState);
+      log.debug("command issued: component: {} is now in {}", componentName, 
nextState);
     } else {
       //for master package
       state = state.getNextState(command);
@@ -142,8 +142,7 @@ public class ComponentInstanceState {
     // if the heartbeat is for a package 
     // update that package's state in the component status
     // and don't bother with the master pkg
-    if (pkg != null && !pkg.isEmpty()
-        && !pkg.equals(Component.MASTER_PACKAGE_NAME)) {
+    if (pkg != null && !pkg.isEmpty() && 
!pkg.equals(Component.MASTER_PACKAGE_NAME)) {
       log.debug("this result is for component: {} pkg: {}", componentName, 
pkg);
       State previousPkgState = pkgStatuses.get(pkg);
       log.debug("currently component: {} pkg: {} is in state: {}", 
componentName, pkg, previousPkgState.toString());
@@ -152,24 +151,7 @@ public class ComponentInstanceState {
       log.debug("component: {} pkg: {} next state: {}", componentName, pkg, 
nextPkgState);
     } else {
       log.debug("this result is for component: {} master package", 
componentName);
-      if (!this.state.couldHaveIssued(command)) {
-        throw new IllegalStateException("Invalid command " + command + " for 
state " + this.state);
-      }
-
-      try {
-        if (result == CommandResult.FAILED) {
-          failuresSeen++;
-        } else if (result == CommandResult.COMPLETED) {
-          failuresSeen = 0;
-        }
-        state = state.getNextState(result);
-      } catch (IllegalArgumentException e) {
-        String message = String.format(INVALID_TRANSITION_ERROR,
-            result.toString(), command.toString(), componentName,
-            state.toString());
-        log.warn(message);
-        throw new IllegalStateException(message);
-      }
+      applyCommandResult(result, command);
     }
   }
 
@@ -215,30 +197,35 @@ public class ComponentInstanceState {
       return Command.NOP;
     }
 
-    log.debug("start checking for component: {} ", componentName);
+    log.debug("in getNextCommand, checking for component: {} ", componentName);
     // if the master pkg is just installed, check if any add on pkg need to be
     // installed
+    nextPkgToInstall = null;
     if (state == State.INSTALLED) {
-      // first check if any pkg is install in progress, if so, wait
       for (String pkg : pkgStatuses.keySet()) {
         State pkgState = pkgStatuses.get(pkg);
         log.debug("in getNextCommand, pkg: {} is in {}", pkg, pkgState);
         if (pkgState == State.INSTALLING) {
+          // first check if any pkg is install in progress, if so, wait
+          // so we don't need to do anything, just return NOP
           log.debug("in getNextCommand, pkg: {} we are issuing NOP", pkg);
           nextPkgToInstall = pkg;
           return Command.NOP;
-        }
-      }
-      // then check if any pkg is in init, if so, install it
-      for (String pkg : pkgStatuses.keySet()) {
-        State pkgState = pkgStatuses.get(pkg);
-        log.debug("in getNextCommand, pkg: {} is in {}", pkg, pkgState);
-        if (pkgState == State.INIT) {
-          log.debug("in getNextCommand, pkg: {} we are issuing install addon", 
pkg);
+        } else if (pkgState == State.INIT) {
+          //temporarily storing pkg here
+          //in case no pkg in 'installing' state
+          //will return the package to install
           nextPkgToInstall = pkg;
-          return Command.INSTALL_ADDON;
         }
       }
+      // when we reach here, no pkg is in 'installing' state
+      if (nextPkgToInstall != null) {
+        // nextPkgToInstall != null means some pkg is in INIT state 
+        // issue 'install' to the pkg we have stored in nextPkgToInstall
+        log.debug("in getNextCommand, pkg: {} we are issuing install addon",
+            nextPkgToInstall);
+        return Command.INSTALL_ADDON;
+      }
     }
     nextPkgToInstall = null;
     return this.state.getSupportedCommand(isInUpgradeMode);

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/fa73aee3/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/AbstractMetainfoParser.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/AbstractMetainfoParser.java
 
b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/AbstractMetainfoParser.java
index 557284e..ca7b286 100644
--- 
a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/AbstractMetainfoParser.java
+++ 
b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/AbstractMetainfoParser.java
@@ -31,7 +31,8 @@ import java.io.InputStream;
 import java.io.StringWriter;
 
 /**
- *
+ * This abstract class provide common functionality to parse metainfo.json for
+ * either master package or add on packages.
  */
 public abstract class AbstractMetainfoParser {
   protected final GsonBuilder gsonBuilder = new GsonBuilder();
@@ -112,6 +113,15 @@ public abstract class AbstractMetainfoParser {
 
     return null;
   }
-  
+
+  /**
+   * Compose the schema for the metainfo
+   *
+   * @param Digester - The Digester object we passed in to compose the schema
+   *
+   * @return
+   *
+   * @throws IOException
+   */
   abstract protected void composeSchema(Digester digester);
 }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/fa73aee3/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/AddoPackageMetainfoParser.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/AddoPackageMetainfoParser.java
 
b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/AddoPackageMetainfoParser.java
deleted file mode 100644
index 4fcadf5..0000000
--- 
a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/AddoPackageMetainfoParser.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.slider.providers.agent.application.metadata;
-
-import org.apache.commons.digester.Digester;
-
-/**
- *
- */
-public class AddoPackageMetainfoParser extends AbstractMetainfoParser {
-  
-  protected void composeSchema(Digester digester){
-    digester.addObjectCreate("metainfo", Metainfo.class);
-    digester.addBeanPropertySetter("metainfo/schemaVersion");
-
-    digester.addObjectCreate("*/applicationPackage", ApplicationPackage.class);
-    digester.addBeanPropertySetter("*/applicationPackage/name");
-    digester.addBeanPropertySetter("*/applicationPackage/comment");
-    digester.addBeanPropertySetter("*/applicationPackage/version");
-
-    digester.addObjectCreate("*/component", ComponentsInAddonPackage.class);
-    digester.addBeanPropertySetter("*/component/name");
-    digester.addSetNext("*/component", "addComponent");
-
-    digester.addObjectCreate("*/commandScript", CommandScript.class);
-    digester.addBeanPropertySetter("*/commandScript/script");
-    digester.addBeanPropertySetter("*/commandScript/scriptType");
-    digester.addBeanPropertySetter("*/commandScript/timeout");
-    digester.addSetNext("*/commandScript", "addCommandScript");
-
-    digester.addObjectCreate("*/configFile", ConfigFile.class);
-    digester.addBeanPropertySetter("*/configFile/type");
-    digester.addBeanPropertySetter("*/configFile/fileName");
-    digester.addBeanPropertySetter("*/configFile/dictionaryName");
-    digester.addSetNext("*/configFile", "addConfigFile");
-
-    digester.addSetRoot("*/applicationPackage", "setApplicationPackage");
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/fa73aee3/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/AddonPackageMetainfoParser.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/AddonPackageMetainfoParser.java
 
b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/AddonPackageMetainfoParser.java
new file mode 100644
index 0000000..c025658
--- /dev/null
+++ 
b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/AddonPackageMetainfoParser.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.slider.providers.agent.application.metadata;
+
+import org.apache.commons.digester.Digester;
+
+/**
+ *
+ */
+public class AddonPackageMetainfoParser extends AbstractMetainfoParser {
+  
+  protected void composeSchema(Digester digester){
+    digester.addObjectCreate("metainfo", Metainfo.class);
+    digester.addBeanPropertySetter("metainfo/schemaVersion");
+
+    digester.addObjectCreate("*/applicationPackage", ApplicationPackage.class);
+    digester.addBeanPropertySetter("*/applicationPackage/name");
+    digester.addBeanPropertySetter("*/applicationPackage/comment");
+    digester.addBeanPropertySetter("*/applicationPackage/version");
+
+    digester.addObjectCreate("*/component", ComponentsInAddonPackage.class);
+    digester.addBeanPropertySetter("*/component/name");
+    digester.addSetNext("*/component", "addComponent");
+
+    digester.addObjectCreate("*/commandScript", CommandScript.class);
+    digester.addBeanPropertySetter("*/commandScript/script");
+    digester.addBeanPropertySetter("*/commandScript/scriptType");
+    digester.addBeanPropertySetter("*/commandScript/timeout");
+    digester.addSetNext("*/commandScript", "addCommandScript");
+
+    digester.addObjectCreate("*/configFile", ConfigFile.class);
+    digester.addBeanPropertySetter("*/configFile/type");
+    digester.addBeanPropertySetter("*/configFile/fileName");
+    digester.addBeanPropertySetter("*/configFile/dictionaryName");
+    digester.addSetNext("*/configFile", "addConfigFile");
+
+    digester.addSetRoot("*/applicationPackage", "setApplicationPackage");
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/fa73aee3/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Metainfo.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Metainfo.java
 
b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Metainfo.java
index 88359e5..696e6f3 100644
--- 
a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Metainfo.java
+++ 
b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Metainfo.java
@@ -72,12 +72,13 @@ public class Metainfo {
   }
 
   public void validate() throws SliderException {
-    if (!VERSION_TWO_ONE.equals(schemaVersion) ||
+    if (!VERSION_TWO_ONE.equals(schemaVersion) &&
         !VERSION_TWO_ZERO.equals(schemaVersion)) {
       throw new SliderException("Unsupported version " + getSchemaVersion());
     }
-
-    application.validate(schemaVersion);
+    if(application != null){
+      application.validate(schemaVersion);
+    }
     if(applicationPackage != null){
       applicationPackage.validate(schemaVersion);
     }

Reply via email to