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); }
