You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@slider.apache.org by sm...@apache.org on 2015/03/01 09:34:55 UTC
[1/2] incubator-slider git commit: Cleaning up metainfo
Repository: incubator-slider
Updated Branches:
refs/heads/feature/packaging_improvements f3cab4445 -> 5b1826e1b
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Export.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Export.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Export.java
deleted file mode 100644
index 7331144..0000000
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Export.java
+++ /dev/null
@@ -1,57 +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.json;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Represents package description.
- */
-public class Export {
- protected static final Logger
- log = LoggerFactory.getLogger(Export.class);
-
-
- private String name;
- private String value;
-
- /**
- * Creator.
- */
- public Export() {
- }
-
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getName() {
- return name;
- }
-
- public void setValue(String value) {
- this.value = value;
- }
-
- public String getValue() {
- return value;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ExportGroup.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ExportGroup.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ExportGroup.java
deleted file mode 100644
index e95497d..0000000
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ExportGroup.java
+++ /dev/null
@@ -1,57 +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.json;
-
-import org.codehaus.jackson.annotate.JsonProperty;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Represents package description.
- */
-public class ExportGroup {
- protected static final Logger
- log = LoggerFactory.getLogger(ExportGroup.class);
-
-
- private String name;
- private List<Export> exports = new ArrayList<Export>();
-
- /**
- * Creator.
- */
- public ExportGroup() {
- }
-
- @JsonProperty("exports")
- public List<Export> getExports() {
- return this.exports;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getName() {
- return name;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/MetaInfo.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/MetaInfo.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/MetaInfo.java
deleted file mode 100644
index ff81fb9..0000000
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/MetaInfo.java
+++ /dev/null
@@ -1,178 +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.json;
-
-import org.apache.slider.core.exceptions.BadConfigException;
-import org.apache.slider.providers.agent.application.metadata.Metainfo;
-import org.codehaus.jackson.annotate.JsonIgnoreProperties;
-import org.codehaus.jackson.map.annotate.JsonSerialize;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Represents the metadata associated with the application.
- */
-@JsonIgnoreProperties(ignoreUnknown = true)
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
-public class MetaInfo {
- protected static final Logger
- log = LoggerFactory.getLogger(MetaInfo.class);
-
- private static final String UTF_8 = "UTF-8";
-
- /**
- * version
- */
- private String schemaVersion = "2.1";
-
- private Application application;
-
-
- /**
- * Creator.
- */
- public MetaInfo() {
- }
-
- public void setApplication(Application application) {
- this.application = application;
- }
-
- public Application getApplication() {
- return application;
- }
-
- public void setSchemaVersion(String version) {
- schemaVersion = version;
- }
-
- public String getSchemaVersion() {
- return schemaVersion;
- }
-
- public static MetaInfo upConverted(Metainfo fromVersion2dot0) throws BadConfigException {
- if (fromVersion2dot0 == null) {
- return null;
- }
-
- MetaInfo metaInfo = new MetaInfo();
-
- if (fromVersion2dot0.getApplication() != null) {
- Application app = new Application();
- metaInfo.setApplication(app);
-
- app.setComment(fromVersion2dot0.getApplication().getComment());
- app.setExportedConfigs(fromVersion2dot0.getApplication().getExportedConfigs());
- app.setName(fromVersion2dot0.getApplication().getName());
- app.setVersion(fromVersion2dot0.getApplication().getVersion());
-
- // command order
- if (fromVersion2dot0.getApplication().getCommandOrder() != null) {
- for (org.apache.slider.providers.agent.application.metadata.CommandOrder xmlCo :
- fromVersion2dot0.getApplication().getCommandOrder()) {
- CommandOrder co = new CommandOrder();
- co.setCommand(xmlCo.getCommand());
- co.setRequires(xmlCo.getRequires());
- app.getCommandOrders().add(co);
- }
- }
-
- // packages
- if (fromVersion2dot0.getApplication().getOSSpecifics() != null) {
- for (org.apache.slider.providers.agent.application.metadata.OSSpecific xmlOSS :
- fromVersion2dot0.getApplication().getOSSpecifics()) {
- for (org.apache.slider.providers.agent.application.metadata.OSPackage xmlOSP : xmlOSS.getPackages()) {
- Package pkg = new Package();
- pkg.setName(xmlOSP.getName());
- pkg.setType(xmlOSP.getType());
- app.getPackages().add(pkg);
- }
- }
- }
-
- // export
- if (fromVersion2dot0.getApplication().getExportGroups() != null) {
- for (org.apache.slider.providers.agent.application.metadata.ExportGroup xmlEg :
- fromVersion2dot0.getApplication().getExportGroups()) {
- ExportGroup eg = new ExportGroup();
- eg.setName(xmlEg.getName());
- app.getExportGroups().add(eg);
- for (org.apache.slider.providers.agent.application.metadata.Export xmlEx :
- xmlEg.getExports()) {
- Export exp = new Export();
- exp.setName(xmlEx.getName());
- exp.setValue(xmlEx.getValue());
- eg.getExports().add(exp);
- }
- }
- }
-
- // config file
- if (fromVersion2dot0.getApplication().getConfigFiles() != null) {
- for (org.apache.slider.providers.agent.application.metadata.ConfigFile xmlConf :
- fromVersion2dot0.getApplication().getConfigFiles()) {
- ConfigFile conf = new ConfigFile();
- conf.setDictionaryName(xmlConf.getDictionaryName());
- conf.setFileName(xmlConf.getFileName());
- conf.setType(xmlConf.getType());
- app.getConfigFiles().add(conf);
- }
- }
-
- // component
- if (fromVersion2dot0.getApplication().getComponents() != null) {
- for (org.apache.slider.providers.agent.application.metadata.Component xmlComp :
- fromVersion2dot0.getApplication().getComponents()) {
- Component comp = new Component();
- comp.setAppExports(xmlComp.getAppExports());
- comp.setAutoStartOnFailure(xmlComp.getRequiresAutoRestart());
- comp.setCategory(xmlComp.getCategory());
- comp.setCompExports(xmlComp.getCompExports());
- comp.setMaxInstanceCount(xmlComp.getMaxInstanceCountInt());
- comp.setMinInstanceCount(xmlComp.getMinInstanceCountInt());
- comp.setName(xmlComp.getName());
- comp.setPublishConfig(xmlComp.getPublishConfig());
- if(xmlComp.getCommandScript() != null) {
- CommandScript commandScript = new CommandScript();
- commandScript.setScript(xmlComp.getCommandScript().getScript());
- commandScript.setScriptType(xmlComp.getCommandScript().getScriptType());
- commandScript.setTimeout(xmlComp.getCommandScript().getTimeout());
- comp.setCommandScript(commandScript);
- }
- app.getComponents().add(comp);
- }
- }
-
- }
- return metaInfo;
- }
-
- public Component getApplicationComponent(String roleName) {
- if (application == null) {
- log.error("Malformed app definition: Expect application as the top level element for metainfo");
- } else {
- for (Component component : application.getComponents()) {
- if (component.getName().equals(roleName)) {
- return component;
- }
- }
- }
- return null;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/MetaInfoParser.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/MetaInfoParser.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/MetaInfoParser.java
deleted file mode 100644
index f821b82..0000000
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/MetaInfoParser.java
+++ /dev/null
@@ -1,85 +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.json;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import org.apache.commons.io.IOUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringWriter;
-
-/**
- * Represents the metadata associated with the application.
- */
-public class MetaInfoParser {
- protected static final Logger
- log = LoggerFactory.getLogger(MetaInfoParser.class);
-
- private final GsonBuilder gsonBuilder = new GsonBuilder();
- private Gson gson;
-
- /**
- * Creator.
- */
- public MetaInfoParser() {
- gson = gsonBuilder.create();
- }
-
-
- /**
- * Convert to a JSON string
- *
- * @return a JSON string description
- *
- * @throws IOException Problems mapping/writing the object
- */
- public String toJsonString(MetaInfo metaInfo) throws IOException {
- return gson.toJson(metaInfo);
- }
-
- /**
- * Convert from JSON
- *
- * @param json input
- *
- * @return the parsed JSON
- *
- * @throws IOException IO
- */
- public MetaInfo fromJsonString(String json)
- throws IOException {
- return gson.fromJson(json, MetaInfo.class);
- }
-
- /**
- * Parse metainfo from an IOStream
- * @param is
- * @return
- * @throws IOException
- */
- public MetaInfo fromInputStream(InputStream is) throws IOException {
- StringWriter writer = new StringWriter();
- IOUtils.copy(is, writer);
- return fromJsonString(writer.toString());
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Package.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Package.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Package.java
deleted file mode 100644
index b9bddd6..0000000
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Package.java
+++ /dev/null
@@ -1,54 +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.json;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Represents package description.
- */
-public class Package {
- protected static final Logger
- log = LoggerFactory.getLogger(Package.class);
-
-
- private String name;
- private String type;
-
- public Package() {
- }
-
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getName() {
- return name;
- }
-
- public String getType() {
- return type;
- }
-
- public void setType(String type) {
- this.type = type;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/Container.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/Container.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/Container.java
deleted file mode 100644
index ef58920..0000000
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/Container.java
+++ /dev/null
@@ -1,82 +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.server.appmaster.web.rest.agent;
-
-import org.codehaus.jackson.annotate.JsonIgnoreProperties;
-import org.codehaus.jackson.annotate.JsonProperty;
-import org.codehaus.jackson.map.annotate.JsonSerialize;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Represents a docker container
- */
-@JsonIgnoreProperties(ignoreUnknown = true)
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
-public class Container {
- protected static final Logger
- log = LoggerFactory.getLogger(Container.class);
-
- private String name;
- private String image;
- private String options;
- private List<ContainerMount> mounts = new ArrayList<>();
- private List<ContainerPort> ports = new ArrayList<>();
-
-
- public Container() {
- }
-
- @JsonProperty("mounts")
- public List<ContainerMount> getMounts() {
- return this.mounts;
- }
-
- @JsonProperty("ports")
- public List<ContainerPort> getPorts() {
- return this.ports;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getImage() {
- return image;
- }
-
- public void setImage(String image) {
- this.image = image;
- }
-
- public String getOptions() {
- return options;
- }
-
- public void setOptions(String options) {
- this.options = options;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/ContainerMount.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/ContainerMount.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/ContainerMount.java
deleted file mode 100644
index c2670c7..0000000
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/ContainerMount.java
+++ /dev/null
@@ -1,58 +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.server.appmaster.web.rest.agent;
-
-import org.codehaus.jackson.annotate.JsonIgnoreProperties;
-import org.codehaus.jackson.map.annotate.JsonSerialize;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Represents a docker container mount
- */
-@JsonIgnoreProperties(ignoreUnknown = true)
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
-public class ContainerMount {
- protected static final Logger
- log = LoggerFactory.getLogger(ContainerMount.class);
-
-
- // TODO: Rename
- private String containerMount;
- private String hostMount;
-
- public ContainerMount() {
- }
-
- public String getContainerMount() {
- return containerMount;
- }
-
- public void setContainerMount(String containerMount) {
- this.containerMount = containerMount;
- }
-
- public String getHostMount() {
- return hostMount;
- }
-
- public void setHostMount(String hostMount) {
- this.hostMount = hostMount;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/ContainerPort.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/ContainerPort.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/ContainerPort.java
deleted file mode 100644
index a36194c..0000000
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/ContainerPort.java
+++ /dev/null
@@ -1,57 +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.server.appmaster.web.rest.agent;
-
-import org.codehaus.jackson.annotate.JsonIgnoreProperties;
-import org.codehaus.jackson.map.annotate.JsonSerialize;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Represents a docker container port
- */
-@JsonIgnoreProperties(ignoreUnknown = true)
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
-public class ContainerPort {
- protected static final Logger
- log = LoggerFactory.getLogger(ContainerPort.class);
-
-
- private String containerPort;
- private String hostPort;
-
- public ContainerPort() {
- }
-
- public String getContainerPort() {
- return containerPort;
- }
-
- public void setContainerPort(String containerPort) {
- this.containerPort = containerPort;
- }
-
- public String getHostPort() {
- return hostPort;
- }
-
- public void setHostPort(String hostPort) {
- this.hostPort = hostPort;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/ExecutionCommand.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/ExecutionCommand.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/ExecutionCommand.java
index 054bc46..9208707 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/ExecutionCommand.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/ExecutionCommand.java
@@ -18,8 +18,11 @@ package org.apache.slider.server.appmaster.web.rest.agent;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.slider.providers.agent.application.metadata.json.Component;
-import org.apache.slider.providers.agent.application.metadata.json.MetaInfo;
+import org.apache.slider.providers.agent.application.metadata.Component;
+import org.apache.slider.providers.agent.application.metadata.DockerContainer;
+import org.apache.slider.providers.agent.application.metadata.DockerContainerMount;
+import org.apache.slider.providers.agent.application.metadata.DockerContainerPort;
+import org.apache.slider.providers.agent.application.metadata.Metainfo;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.annotate.JsonSerialize;
@@ -54,14 +57,14 @@ public class ExecutionCommand {
private String serviceName;
private String componentName;
private String componentType;
- private List<Container> containers = new ArrayList<>();
+ private List<DockerContainer> containers = new ArrayList<>();
public ExecutionCommand(AgentCommandType commandType) {
this.commandType = commandType;
}
@JsonProperty("containers")
- public List<Container> getContainers() {
+ public List<DockerContainer> getContainers() {
return containers;
}
@@ -220,26 +223,26 @@ public class ExecutionCommand {
return builder.toString();
}
- public void addContainerDetails(String componentName, MetaInfo metaInfo) {
+ public void addContainerDetails(String componentName, Metainfo metaInfo) {
Component component = metaInfo.getApplicationComponent(componentName);
this.setComponentType(component.getType());
log.info("Adding container details for {}", componentName);
- for(org.apache.slider.providers.agent.application.metadata.json.Container metaContainer: component.getContainers()) {
- Container container = new Container();
+ for(DockerContainer metaContainer: component.getDockerContainers()) {
+ DockerContainer container = new DockerContainer();
container.setImage(metaContainer.getImage());
container.setName(metaContainer.getName());
container.setOptions(metaContainer.getOptions());
if(metaContainer.getMounts().size() > 0) {
- for(org.apache.slider.providers.agent.application.metadata.json.ContainerMount metaContMount : metaContainer.getMounts()) {
- ContainerMount contMnt = new ContainerMount();
+ for(DockerContainerMount metaContMount : metaContainer.getMounts()) {
+ DockerContainerMount contMnt = new DockerContainerMount();
contMnt.setContainerMount(metaContMount.getContainerMount());
contMnt.setHostMount(metaContMount.getHostMount());
container.getMounts().add(contMnt);
}
}
if(metaContainer.getPorts().size() > 0) {
- for(org.apache.slider.providers.agent.application.metadata.json.ContainerPort metaCntPort : metaContainer.getPorts()) {
- ContainerPort cntPort = new ContainerPort();
+ for(DockerContainerPort metaCntPort : metaContainer.getPorts()) {
+ DockerContainerPort cntPort = new DockerContainerPort();
cntPort.setContainerPort(metaCntPort.getContainerPort());
cntPort.setHostPort(metaCntPort.getHostPort());
container.getPorts().add(cntPort);
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/test/groovy/org/apache/slider/common/tools/TestWindowsSupport.groovy
----------------------------------------------------------------------
diff --git a/slider-core/src/test/groovy/org/apache/slider/common/tools/TestWindowsSupport.groovy b/slider-core/src/test/groovy/org/apache/slider/common/tools/TestWindowsSupport.groovy
index c3f52e7..d96886a 100644
--- a/slider-core/src/test/groovy/org/apache/slider/common/tools/TestWindowsSupport.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/common/tools/TestWindowsSupport.groovy
@@ -97,7 +97,7 @@ class TestWindowsSupport extends YarnMiniClusterTestBase {
assumeWindows()
SliderFileSystem sfs = new SliderFileSystem(new Configuration())
try {
- def metainfo = AgentUtils.getApplicationMetaInfo(sfs, windowsFile)
+ def metainfo = AgentUtils.getApplicationMetainfo(sfs, windowsFile)
} catch (FileNotFoundException fnfe) {
// expected
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentClientProvider2.java
----------------------------------------------------------------------
diff --git a/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentClientProvider2.java b/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentClientProvider2.java
index 466b300..92efafd 100644
--- a/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentClientProvider2.java
+++ b/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentClientProvider2.java
@@ -30,9 +30,9 @@ import org.apache.slider.core.conf.ConfTree;
import org.apache.slider.core.exceptions.BadCommandArgumentsException;
import org.apache.slider.core.exceptions.SliderException;
import org.apache.slider.providers.ProviderUtils;
-import org.apache.slider.providers.agent.application.metadata.json.Application;
-import org.apache.slider.providers.agent.application.metadata.json.MetaInfo;
-import org.apache.slider.providers.agent.application.metadata.json.Package;
+import org.apache.slider.providers.agent.application.metadata.Application;
+import org.apache.slider.providers.agent.application.metadata.Metainfo;
+import org.apache.slider.providers.agent.application.metadata.Package;
import org.codehaus.jettison.json.JSONObject;
import org.junit.Assert;
import org.junit.BeforeClass;
@@ -120,7 +120,7 @@ public class TestAgentClientProvider2 {
global.put("d", "{app_install_dir}/d");
inputConfig.put("global", global);
- MetaInfo metainfo = new MetaInfo();
+ Metainfo metainfo = new Metainfo();
Application app = new Application();
metainfo.setApplication(app);
Package pkg = new Package();
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java
----------------------------------------------------------------------
diff --git a/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java b/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java
index 7746867..95b7d56 100644
--- a/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java
+++ b/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java
@@ -48,17 +48,16 @@ import org.apache.slider.core.registry.docstore.ExportEntry;
import org.apache.slider.core.registry.docstore.PublishedExports;
import org.apache.slider.core.registry.docstore.PublishedExportsSet;
import org.apache.slider.providers.ProviderRole;
-import org.apache.slider.providers.agent.application.metadata.json.Application;
-import org.apache.slider.providers.agent.application.metadata.json.CommandOrder;
-import org.apache.slider.providers.agent.application.metadata.json.CommandScript;
-import org.apache.slider.providers.agent.application.metadata.json.Component;
+import org.apache.slider.providers.agent.application.metadata.Application;
+import org.apache.slider.providers.agent.application.metadata.CommandOrder;
+import org.apache.slider.providers.agent.application.metadata.CommandScript;
+import org.apache.slider.providers.agent.application.metadata.Component;
import org.apache.slider.providers.agent.application.metadata.ComponentExport;
-import org.apache.slider.providers.agent.application.metadata.json.ConfigFile;
+import org.apache.slider.providers.agent.application.metadata.ConfigFile;
import org.apache.slider.providers.agent.application.metadata.DefaultConfig;
-import org.apache.slider.providers.agent.application.metadata.json.Export;
-import org.apache.slider.providers.agent.application.metadata.json.ExportGroup;
-import org.apache.slider.providers.agent.application.metadata.json.MetaInfo;
-import org.apache.slider.providers.agent.application.metadata.json.MetaInfoParser;
+import org.apache.slider.providers.agent.application.metadata.Export;
+import org.apache.slider.providers.agent.application.metadata.ExportGroup;
+import org.apache.slider.providers.agent.application.metadata.Metainfo;
import org.apache.slider.providers.agent.application.metadata.MetainfoParser;
import org.apache.slider.providers.agent.application.metadata.PropertyInfo;
import org.apache.slider.server.appmaster.model.mock.MockRegistryOperations;
@@ -304,8 +303,13 @@ public class TestAgentProviderService {
CommandScript cs = new CommandScript();
cs.setScript("scripts/hbase_master.py");
doReturn(cs).when(mockAps).getScriptPathFromMetainfo(anyString());
- MetaInfo metainfo = new MetaInfo();
+ Metainfo metainfo = new Metainfo();
metainfo.setApplication(new Application());
+
+ Component hm = new Component();
+ hm.setName("HBASE_MASTER");
+ metainfo.getApplication().addComponent(hm);
+
doReturn(metainfo).when(mockAps).getApplicationMetainfo(any(SliderFileSystem.class), anyString());
Configuration conf = new Configuration();
@@ -451,7 +455,7 @@ public class TestAgentProviderService {
cs.setScript("scripts/hbase_master.py");
doReturn(cs).when(mockAps)
.getScriptPathFromMetainfo(anyString());
- MetaInfo metainfo = new MetaInfo();
+ Metainfo metainfo = new Metainfo();
Application application = new Application();
metainfo.setApplication(application);
doReturn(metainfo).when(mockAps).getApplicationMetainfo(
@@ -470,7 +474,7 @@ public class TestAgentProviderService {
}
doNothing().when(mockAps).processAllocatedPorts(anyString(), anyString(),
- anyString(), anyMap());
+ anyString(), anyMap());
expect(access.isApplicationLive()).andReturn(true).anyTimes();
ClusterDescription desc = new ClusterDescription();
desc.setOption(OptionKeys.ZOOKEEPER_QUORUM, "host1:2181");
@@ -496,14 +500,14 @@ public class TestAgentProviderService {
ProviderRole providerRole = new ProviderRole(role, 1);
providerRoleMap.put(1, providerRole);
mockAps.rebuildContainerDetails(containers, "mockcontainer_1",
- providerRoleMap);
+ providerRoleMap);
return mockAps;
}
@Test
public void testThreeInstallFailures() throws IOException, SliderException {
InputStream metainfo_1 = new ByteArrayInputStream(metainfo_1_str.getBytes());
- MetaInfo metainfo = MetaInfo.upConverted(new MetainfoParser().parse(metainfo_1));
+ Metainfo metainfo = new MetainfoParser().fromXmlStream(metainfo_1);
ConfTree tree = new ConfTree();
tree.global.put(InternalKeys.INTERNAL_APPLICATION_IMAGE_PATH, ".");
@@ -544,7 +548,7 @@ public class TestAgentProviderService {
doReturn(access).when(mockAps).getAmState();
doReturn(metainfo).when(mockAps).getApplicationMetainfo(any(SliderFileSystem.class), anyString());
doReturn(new HashMap<String, DefaultConfig>()).when(mockAps).
- initializeDefaultConfigs(any(SliderFileSystem.class), anyString(), any(MetaInfo.class));
+ initializeDefaultConfigs(any(SliderFileSystem.class), anyString(), any(Metainfo.class));
try {
@@ -631,14 +635,23 @@ public class TestAgentProviderService {
}
@Test
- public void testAgentStateStarted() throws Exception, SliderException {
+ public void testAgentStateStarted() throws Exception {
AggregateConf instanceDefinition = prepareConfForAgentStateTests();
AgentProviderService mockAps = prepareProviderServiceForAgentStateTests();
+
+ Metainfo metainfo = new Metainfo();
+ Application application = new Application();
+ Component hbaseMaster = new Component();
+ hbaseMaster.setName("HBASE_MASTER");
+ application.addComponent(hbaseMaster);
+ metainfo.setApplication(application);
+ doReturn(metainfo).when(mockAps).getMetaInfo();
+
Register reg = new Register();
reg.setResponseId(0);
reg.setLabel("mockcontainer_1___HBASE_MASTER");
Map<String,String> ports = new HashMap<String,String>();
- ports.put("a","100");
+ ports.put("a", "100");
reg.setAllocatedPorts(ports);
// Simulating agent in STARTED state
@@ -688,12 +701,15 @@ public class TestAgentProviderService {
AggregateConf instanceDefinition = prepareConfForAgentStateTests();
AgentProviderService mockAps = prepareProviderServiceForAgentStateTests();
- MetaInfo metainfo = new MetaInfo();
+ Metainfo metainfo = new Metainfo();
Application application = new Application();
CommandOrder cmdOrder = new CommandOrder();
cmdOrder.setCommand("HBASE_MASTER-START");
cmdOrder.setRequires("HBASE_MASTER-INSTALLED");
application.getCommandOrders().add(cmdOrder);
+ Component hbaseMaster = new Component();
+ hbaseMaster.setName("HBASE_MASTER");
+ application.addComponent(hbaseMaster);
metainfo.setApplication(application);
doReturn(metainfo).when(mockAps).getApplicationMetainfo(
any(SliderFileSystem.class), anyString());
@@ -808,11 +824,49 @@ public class TestAgentProviderService {
aps.close();
}
+ @Test
+ public void testComponentSpecificPublishes() throws Exception {
+ InputStream metainfo_1 = new ByteArrayInputStream(metainfo_1_str.getBytes());
+ Metainfo metainfo = new MetainfoParser().fromXmlStream(metainfo_1);
+ AgentProviderService aps = createAgentProviderService(new Configuration());
+ AgentProviderService mockAps = Mockito.spy(aps);
+ doNothing().when(mockAps).publishApplicationInstanceData(anyString(), anyString(), anyCollection());
+ doReturn(metainfo).when(mockAps).getMetaInfo();
+
+ Map<String, String> ports = new HashMap<String, String>();
+ ports.put("global.listen_port", "10010");
+ mockAps.processAndPublishComponentSpecificData(ports,
+ "cid1",
+ "host1",
+ "HBASE_REGIONSERVER");
+ ArgumentCaptor<Collection> entriesCaptor = ArgumentCaptor.
+ forClass(Collection.class);
+ ArgumentCaptor<String> publishNameCaptor = ArgumentCaptor.
+ forClass(String.class);
+ Mockito.verify(mockAps, Mockito.times(1)).publishApplicationInstanceData(
+ anyString(),
+ publishNameCaptor.capture(),
+ entriesCaptor.capture());
+ assert entriesCaptor.getAllValues().size() == 1;
+ for (Collection coll : entriesCaptor.getAllValues()) {
+ Set<Map.Entry<String, String>> entrySet = (Set<Map.Entry<String, String>>) coll;
+ for (Map.Entry entry : entrySet) {
+ log.info("{}:{}", entry.getKey(), entry.getValue().toString());
+ if (entry.getKey().equals("PropertyA")) {
+ assert entry.getValue().toString().equals("host1:10010");
+ }
+ }
+ }
+ assert publishNameCaptor.getAllValues().size() == 1;
+ for (String coll : publishNameCaptor.getAllValues()) {
+ assert coll.equals("ComponentInstanceData");
+ }
+ }
@Test
public void testComponentSpecificPublishes2() throws Exception {
InputStream metainfo_1 = new ByteArrayInputStream(metainfo_1_str.getBytes());
- MetaInfo metainfo = MetaInfo.upConverted(new MetainfoParser().parse(metainfo_1));
+ Metainfo metainfo = new MetainfoParser().fromXmlStream(metainfo_1);
AgentProviderService aps = createAgentProviderService(new Configuration());
AgentProviderService mockAps = Mockito.spy(aps);
doNothing().when(mockAps).publishApplicationInstanceData(anyString(), anyString(), anyCollection());
@@ -897,7 +951,7 @@ public class TestAgentProviderService {
@Test
public void testProcessConfig() throws Exception {
InputStream metainfo_1 = new ByteArrayInputStream(metainfo_1_str.getBytes());
- MetaInfo metainfo = MetaInfo.upConverted(new MetainfoParser().parse(metainfo_1));
+ Metainfo metainfo = new MetainfoParser().fromXmlStream(metainfo_1);
Assert.assertNotNull(metainfo.getApplication());
AgentProviderService aps = createAgentProviderService(new Configuration());
HeartBeat hb = new HeartBeat();
@@ -982,7 +1036,7 @@ public class TestAgentProviderService {
@Test
public void testMetaInfoParsing() throws Exception {
InputStream metainfo_1 = new ByteArrayInputStream(metainfo_1_str.getBytes());
- MetaInfo metainfo = MetaInfo.upConverted(new MetainfoParser().parse(metainfo_1));
+ Metainfo metainfo = new MetainfoParser().fromXmlStream(metainfo_1);
Assert.assertNotNull(metainfo.getApplication());
Application application = metainfo.getApplication();
log.info("Service: " + application.toString());
@@ -993,10 +1047,10 @@ public class TestAgentProviderService {
int found = 0;
for (Component component : components) {
if (component.getName().equals("HBASE_MASTER")) {
- Assert.assertEquals(component.getAutoStartOnFailure(), Boolean.TRUE);
- Assert.assertEquals(component.getAutoStartOnFailure(), Boolean.TRUE);
- Assert.assertEquals(component.getMinInstanceCount(), 1);
- Assert.assertEquals(component.getMaxInstanceCount(), 2);
+ Assert.assertEquals("true", component.getAutoStartOnFailure());
+ Assert.assertEquals(Boolean.TRUE, component.getAutoStartOnFailureBoolean());
+ Assert.assertEquals(component.getMinInstanceCountInt(), 1);
+ Assert.assertEquals(component.getMaxInstanceCountInt(), 2);
Assert.assertEquals(component.getCommandScript().getScript(), "scripts/hbase_master.py");
Assert.assertEquals(component.getCategory(), "MASTER");
Assert.assertEquals(component.getAppExports(), "QuickLinks-JMX_Endpoint,QuickLinks-Master_Status");
@@ -1004,8 +1058,8 @@ public class TestAgentProviderService {
found++;
}
if (component.getName().equals("HBASE_REGIONSERVER")) {
- Assert.assertEquals(component.getAutoStartOnFailure(), "Falsee");
- Assert.assertEquals(component.getAutoStartOnFailure(), Boolean.FALSE);
+ Assert.assertEquals("Falsee", component.getAutoStartOnFailure());
+ Assert.assertEquals(Boolean.FALSE, component.getAutoStartOnFailureBoolean());
Assert.assertEquals(component.getMinInstanceCount(), "1");
Assert.assertNull(component.getMaxInstanceCount());
Assert.assertEquals(component.getCommandScript().getScript(), "scripts/hbase_regionserver.py");
@@ -1084,16 +1138,16 @@ public class TestAgentProviderService {
+ " </comment>\n";
metainfo_1 = new ByteArrayInputStream(metainfo_1_str_bad.getBytes());
- metainfo = MetaInfo.upConverted(new MetainfoParser().parse(metainfo_1));
+ metainfo = new MetainfoParser().fromXmlStream(metainfo_1);
Assert.assertNull(metainfo);
}
@Test
public void testMetaInfoRelatedOperations() throws Exception {
InputStream metainfo_1 = new ByteArrayInputStream(metainfo_1_str.getBytes());
- MetaInfo metainfo = MetaInfo.upConverted(new MetainfoParser().parse(metainfo_1));
+ Metainfo metainfo = new MetainfoParser().fromXmlStream(metainfo_1);
InputStream metainfo_2 = new ByteArrayInputStream(metainfo_2_str.getBytes());
- MetaInfo metainfo2 = MetaInfo.upConverted(new MetainfoParser().parse(metainfo_2));
+ Metainfo metainfo2 = new MetainfoParser().fromXmlStream(metainfo_2);
String role_hm = "HBASE_MASTER";
String role_hrs = "HBASE_REGIONSERVER";
@@ -1122,7 +1176,7 @@ public class TestAgentProviderService {
// App has two components HBASE_MASTER and HBASE_REGIONSERVER
// Start of HBASE_RS depends on the start of HBASE_MASTER
InputStream metainfo_1 = new ByteArrayInputStream(metainfo_1_str.getBytes());
- MetaInfo metainfo = MetaInfo.upConverted(new MetainfoParser().parse(metainfo_1));
+ Metainfo metainfo = new MetainfoParser().fromXmlStream(metainfo_1);
ConfTree tree = new ConfTree();
tree.global.put(InternalKeys.INTERNAL_APPLICATION_IMAGE_PATH, ".");
@@ -1165,7 +1219,7 @@ public class TestAgentProviderService {
doReturn(access).when(mockAps).getAmState();
doReturn(metainfo).when(mockAps).getApplicationMetainfo(any(SliderFileSystem.class), anyString());
doReturn(new HashMap<String, DefaultConfig>()).when(mockAps).
- initializeDefaultConfigs(any(SliderFileSystem.class), anyString(), any(MetaInfo.class));
+ initializeDefaultConfigs(any(SliderFileSystem.class), anyString(), any(Metainfo.class));
try {
@@ -1495,7 +1549,7 @@ public class TestAgentProviderService {
@Test
public void testAddInstallCommand() throws Exception {
InputStream metainfo_1 = new ByteArrayInputStream(metainfo_1_str.getBytes());
- MetaInfo metainfo = MetaInfo.upConverted(new MetainfoParser().parse(metainfo_1));
+ Metainfo metainfo = new MetainfoParser().fromXmlStream(metainfo_1);
AgentProviderService aps = createAgentProviderService(new Configuration());
HeartBeatResponse hbr = new HeartBeatResponse();
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/test/java/org/apache/slider/providers/agent/TestComponentCommandOrder.java
----------------------------------------------------------------------
diff --git a/slider-core/src/test/java/org/apache/slider/providers/agent/TestComponentCommandOrder.java b/slider-core/src/test/java/org/apache/slider/providers/agent/TestComponentCommandOrder.java
index bac1158..c123fbb 100644
--- a/slider-core/src/test/java/org/apache/slider/providers/agent/TestComponentCommandOrder.java
+++ b/slider-core/src/test/java/org/apache/slider/providers/agent/TestComponentCommandOrder.java
@@ -18,7 +18,7 @@
package org.apache.slider.providers.agent;
-import org.apache.slider.providers.agent.application.metadata.json.CommandOrder;
+import org.apache.slider.providers.agent.application.metadata.CommandOrder;
import org.apache.slider.server.appmaster.model.mock.MockContainerId;
import org.junit.Assert;
import org.junit.Test;
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/test/java/org/apache/slider/providers/agent/application/metadata/TestMetainfoParser.java
----------------------------------------------------------------------
diff --git a/slider-core/src/test/java/org/apache/slider/providers/agent/application/metadata/TestMetainfoParser.java b/slider-core/src/test/java/org/apache/slider/providers/agent/application/metadata/TestMetainfoParser.java
index 1177e9d..7930c8b 100644
--- a/slider-core/src/test/java/org/apache/slider/providers/agent/application/metadata/TestMetainfoParser.java
+++ b/slider-core/src/test/java/org/apache/slider/providers/agent/application/metadata/TestMetainfoParser.java
@@ -45,7 +45,7 @@ public class TestMetainfoParser {
InputStream resStream = this.getClass().getResourceAsStream(
METAINFO_XML);
MetainfoParser parser = new MetainfoParser();
- Metainfo metainfo = parser.parse(resStream);
+ Metainfo metainfo = parser.fromXmlStream(resStream);
Assert.assertNotNull(metainfo);
Assert.assertNotNull(metainfo.getApplication());
Application application = metainfo.getApplication();
@@ -67,4 +67,106 @@ public class TestMetainfoParser {
assert found;
Assert.assertEquals(0, application.getConfigFiles().size());
}
+
+ @Test
+ public void testJsonParse() throws IOException {
+ String metaInfo1_json = "{\n"
+ + "\"schemaVersion\":\"2.2\",\n"
+ + "\"application\":{\n"
+ + "\"name\": \"MEMCACHED\","
+ + "\"exportGroups\": ["
+ + "{"
+ + "\"name\": \"Servers\","
+ + "\"exports\": ["
+ + "{"
+ + "\"name\": \"host_port\","
+ + "\"value\": \"${MEMCACHED_HOST}:${site.global.port}\""
+ + "}"
+ + "]"
+ + "}"
+ + "],"
+ + "\"components\": ["
+ + "{"
+ + "\"name\": \"MEMCACHED\","
+ + "\"compExports\": \"Servers-host_port\","
+ + "\"commands\": ["
+ + "{"
+ + "\"exec\": \"java -classpath /usr/myapps/memcached/*:/usr/lib/hadoop/lib/* com.thimbleware.jmemcached.Main\""
+ + "}"
+ + "]"
+ + "},"
+ + "{"
+ + "\"name\": \"MEMCACHED2\","
+ + "\"commands\": ["
+ + "{"
+ + "\"exec\": \"scripts/config.py\","
+ + "\"type\": \"PYTHON\","
+ + "\"name\": \"CONFIGURE\""
+ + "}"
+ + "],"
+ + "\"dockerContainers\": ["
+ + "{"
+ + "\"name\": \"redis\","
+ + "\"image\": \"dockerhub/redis\","
+ + "\"options\": \"-net=bridge\","
+ + "\"mounts\": ["
+ + "{"
+ + "\"containerMount\": \"/tmp/conf\","
+ + "\"hostMount\": \"{$conf:@//site/global/app_root}/conf\""
+ + "}"
+ + "]"
+ + "}"
+ + "]"
+ + "}"
+ + "]"
+ + "}"
+ + "}";
+
+ MetainfoParser parser = new MetainfoParser();
+ Metainfo mInfo = parser.fromJsonString(metaInfo1_json);
+ Assert.assertEquals("2.2", mInfo.getSchemaVersion());
+
+ Application app = mInfo.getApplication();
+ Assert.assertNotNull(app);
+
+ Assert.assertEquals("MEMCACHED", app.getName());
+ List<ExportGroup> egs = app.getExportGroups();
+ Assert.assertEquals(1, egs.size());
+ ExportGroup eg = egs.get(0);
+ Assert.assertEquals("Servers", eg.getName());
+ List<Export> exports = eg.getExports();
+ Assert.assertEquals(1, exports.size());
+ Export export = exports.get(0);
+ Assert.assertEquals("host_port", export.getName());
+ Assert.assertEquals("${MEMCACHED_HOST}:${site.global.port}", export.getValue());
+
+ List<Component> components = app.getComponents();
+ Assert.assertEquals(2, components.size());
+
+ Component c1 = mInfo.getApplicationComponent("MEMCACHED");
+ Assert.assertNotNull(c1);
+ Assert.assertEquals("MEMCACHED", c1.getName());
+ Assert.assertEquals("Servers-host_port", c1.getCompExports());
+ Assert.assertEquals(1, c1.getCommands().size());
+ ComponentCommand cmd = c1.getCommands().get(0);
+ Assert.assertEquals("START", cmd.getName());
+ Assert.assertEquals("SHELL", cmd.getType());
+ Assert.assertEquals("java -classpath /usr/myapps/memcached/*:/usr/lib/hadoop/lib/* com.thimbleware.jmemcached.Main",
+ cmd.getExec());
+
+ Component c2 = mInfo.getApplicationComponent("MEMCACHED2");
+ Assert.assertNotNull(c2);
+ Assert.assertEquals("MEMCACHED2", c2.getName());
+ Assert.assertEquals(1, c2.getCommands().size());
+ cmd = c2.getCommands().get(0);
+ Assert.assertEquals("CONFIGURE", cmd.getName());
+ Assert.assertEquals("PYTHON", cmd.getType());
+ Assert.assertEquals("scripts/config.py", cmd.getExec());
+ Assert.assertEquals(1, c2.getDockerContainers().size());
+ DockerContainer cont = c2.getDockerContainers().get(0);
+ Assert.assertEquals("redis", cont.getName());
+ Assert.assertEquals(1, cont.getMounts().size());
+ DockerContainerMount mount = cont.getMounts().get(0);
+ Assert.assertEquals("{$conf:@//site/global/app_root}/conf", mount.getHostMount());
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/test/java/org/apache/slider/providers/agent/application/metadata/json/TestMetaInfoParser.java
----------------------------------------------------------------------
diff --git a/slider-core/src/test/java/org/apache/slider/providers/agent/application/metadata/json/TestMetaInfoParser.java b/slider-core/src/test/java/org/apache/slider/providers/agent/application/metadata/json/TestMetaInfoParser.java
deleted file mode 100644
index 83a87a4..0000000
--- a/slider-core/src/test/java/org/apache/slider/providers/agent/application/metadata/json/TestMetaInfoParser.java
+++ /dev/null
@@ -1,134 +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.json;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.util.List;
-
-/**
- *
- */
-public class TestMetaInfoParser {
- protected static final Logger log =
- LoggerFactory.getLogger(TestMetaInfoParser.class);
-
- @Test
- public void testParse() throws IOException {
- String metaInfo1_json = "{\n"
- + "\"schemaVersion\":\"2.2\",\n"
- + "\"application\":{\n"
- + "\"name\": \"MEMCACHED\","
- + "\"exportGroups\": ["
- + "{"
- + "\"name\": \"Servers\","
- + "\"exports\": ["
- + "{"
- + "\"name\": \"host_port\","
- + "\"value\": \"${MEMCACHED_HOST}:${site.global.port}\""
- + "}"
- + "]"
- + "}"
- + "],"
- + "\"components\": ["
- + "{"
- + "\"name\": \"MEMCACHED\","
- + "\"compExports\": \"Servers-host_port\","
- + "\"commands\": ["
- + "{"
- + "\"exec\": \"java -classpath /usr/myapps/memcached/*:/usr/lib/hadoop/lib/* com.thimbleware.jmemcached.Main\""
- + "}"
- + "]"
- + "},"
- + "{"
- + "\"name\": \"MEMCACHED2\","
- + "\"commands\": ["
- + "{"
- + "\"exec\": \"scripts/config.py\","
- + "\"type\": \"PYTHON\","
- + "\"name\": \"CONFIGURE\""
- + "}"
- + "],"
- + "\"containers\": ["
- + "{"
- + "\"name\": \"redis\","
- + "\"image\": \"dockerhub/redis\","
- + "\"options\": \"-net=bridge\","
- + "\"mounts\": ["
- + "{"
- + "\"containerMount\": \"/tmp/conf\","
- + "\"hostMount\": \"{$conf:@//site/global/app_root}/conf\""
- + "}"
- + "]"
- + "}"
- + "]"
- + "}"
- + "]"
- + "}"
- + "}";
-
- MetaInfoParser parser = new MetaInfoParser();
- MetaInfo mInfo = parser.fromJsonString(metaInfo1_json);
- Assert.assertEquals("2.2", mInfo.getSchemaVersion());
-
- Application app = mInfo.getApplication();
- Assert.assertNotNull(app);
-
- Assert.assertEquals("MEMCACHED", app.getName());
- List<ExportGroup> egs = app.getExportGroups();
- Assert.assertEquals(1, egs.size());
- ExportGroup eg = egs.get(0);
- Assert.assertEquals("Servers", eg.getName());
- List<Export> exports = eg.getExports();
- Assert.assertEquals(1, exports.size());
- Export export = exports.get(0);
- Assert.assertEquals("host_port", export.getName());
- Assert.assertEquals("${MEMCACHED_HOST}:${site.global.port}", export.getValue());
-
- List<Component> components = app.getComponents();
- Assert.assertEquals(2, components.size());
-
- Component c1 = app.getApplicationComponent("MEMCACHED");
- Assert.assertNotNull(c1);
- Assert.assertEquals("MEMCACHED", c1.getName());
- Assert.assertEquals("Servers-host_port", c1.getCompExports());
- Assert.assertEquals(1, c1.getCommands().size());
- ComponentCommand cmd = c1.getCommands().get(0);
- Assert.assertEquals("START", cmd.getName());
- Assert.assertEquals("SHELL", cmd.getType());
- Assert.assertEquals("java -classpath /usr/myapps/memcached/*:/usr/lib/hadoop/lib/* com.thimbleware.jmemcached.Main", cmd.getExec());
-
- Component c2 = app.getApplicationComponent("MEMCACHED2");
- Assert.assertNotNull(c2);
- Assert.assertEquals("MEMCACHED2", c2.getName());
- Assert.assertEquals(1, c2.getCommands().size());
- cmd = c2.getCommands().get(0);
- Assert.assertEquals("CONFIGURE", cmd.getName());
- Assert.assertEquals("PYTHON", cmd.getType());
- Assert.assertEquals("scripts/config.py", cmd.getExec());
- Assert.assertEquals(1, c2.getContainers().size());
- Container cont = c2.getContainers().get(0);
- Assert.assertEquals("redis", cont.getName());
- Assert.assertEquals(1, cont.getMounts().size());
- ContainerMount mount = cont.getMounts().get(0);
- Assert.assertEquals("{$conf:@//site/global/app_root}/conf", mount.getHostMount());
- }
-}
[2/2] incubator-slider git commit: Cleaning up metainfo
Posted by sm...@apache.org.
Cleaning up metainfo
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/5b1826e1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/5b1826e1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/5b1826e1
Branch: refs/heads/feature/packaging_improvements
Commit: 5b1826e1b030383ea5e552ef3268334cc654ecff
Parents: f3cab44
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Sun Mar 1 00:34:35 2015 -0800
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Sun Mar 1 00:34:35 2015 -0800
----------------------------------------------------------------------
.../providers/agent/AgentClientProvider.java | 40 +++--
.../providers/agent/AgentProviderService.java | 110 +++++++++---
.../slider/providers/agent/AgentUtils.java | 22 +--
.../providers/agent/ComponentCommandOrder.java | 2 +-
.../agent/application/metadata/Application.java | 94 ++++++++--
.../application/metadata/CommandOrder.java | 9 +-
.../application/metadata/CommandScript.java | 11 +-
.../agent/application/metadata/Component.java | 97 ++++++++--
.../application/metadata/ComponentCommand.java | 72 ++++++++
.../agent/application/metadata/ConfigFile.java | 8 +-
.../application/metadata/DockerContainer.java | 91 ++++++++++
.../metadata/DockerContainerMount.java | 59 ++++++
.../metadata/DockerContainerPort.java | 59 ++++++
.../agent/application/metadata/Export.java | 9 +-
.../agent/application/metadata/ExportGroup.java | 11 +-
.../agent/application/metadata/Metainfo.java | 32 ++--
.../application/metadata/MetainfoParser.java | 62 ++++++-
.../agent/application/metadata/OSPackage.java | 9 +-
.../agent/application/metadata/OSSpecific.java | 11 +-
.../agent/application/metadata/Package.java | 60 +++++++
.../agent/application/metadata/Validate.java | 27 +++
.../application/metadata/json/Application.java | 123 -------------
.../application/metadata/json/CommandOrder.java | 57 ------
.../metadata/json/CommandScript.java | 66 -------
.../application/metadata/json/Component.java | 144 ---------------
.../metadata/json/ComponentCommand.java | 79 --------
.../application/metadata/json/ConfigFile.java | 53 ------
.../application/metadata/json/Container.java | 79 --------
.../metadata/json/ContainerMount.java | 53 ------
.../metadata/json/ContainerPort.java | 53 ------
.../agent/application/metadata/json/Export.java | 57 ------
.../application/metadata/json/ExportGroup.java | 57 ------
.../application/metadata/json/MetaInfo.java | 178 -------------------
.../metadata/json/MetaInfoParser.java | 85 ---------
.../application/metadata/json/Package.java | 54 ------
.../appmaster/web/rest/agent/Container.java | 82 ---------
.../web/rest/agent/ContainerMount.java | 58 ------
.../appmaster/web/rest/agent/ContainerPort.java | 57 ------
.../web/rest/agent/ExecutionCommand.java | 25 +--
.../common/tools/TestWindowsSupport.groovy | 2 +-
.../agent/TestAgentClientProvider2.java | 8 +-
.../agent/TestAgentProviderService.java | 120 +++++++++----
.../agent/TestComponentCommandOrder.java | 2 +-
.../metadata/TestMetainfoParser.java | 104 ++++++++++-
.../metadata/json/TestMetaInfoParser.java | 134 --------------
45 files changed, 1003 insertions(+), 1622 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java
index 42ac47d..9978b0a 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java
@@ -40,10 +40,10 @@ import org.apache.slider.core.launch.AbstractLauncher;
import org.apache.slider.providers.AbstractClientProvider;
import org.apache.slider.providers.ProviderRole;
import org.apache.slider.providers.ProviderUtils;
-import org.apache.slider.providers.agent.application.metadata.json.Application;
-import org.apache.slider.providers.agent.application.metadata.json.Component;
-import org.apache.slider.providers.agent.application.metadata.json.MetaInfo;
-import org.apache.slider.providers.agent.application.metadata.json.MetaInfoParser;
+import org.apache.slider.providers.agent.application.metadata.Application;
+import org.apache.slider.providers.agent.application.metadata.Component;
+import org.apache.slider.providers.agent.application.metadata.Metainfo;
+import org.apache.slider.providers.agent.application.metadata.MetainfoParser;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.slf4j.Logger;
@@ -164,10 +164,10 @@ public class AgentClientProvider extends AbstractClientProvider
names.remove(SliderKeys.COMPONENT_AM);
Map<Integer, String> priorityMap = new HashMap<Integer, String>();
- MetaInfo metaInfo = null;
+ Metainfo metaInfo = null;
if (fs != null) {
try {
- metaInfo = AgentUtils.getApplicationMetaInfo(fs, appDef);
+ metaInfo = AgentUtils.getApplicationMetainfo(fs, appDef);
} catch (IOException ioe) {
// Ignore missing metainfo file for now
log.info("Missing metainfo {}", ioe.getMessage());
@@ -218,8 +218,8 @@ public class AgentClientProvider extends AbstractClientProvider
MapOperations componentConfig = resources.getMandatoryComponent(name);
int count =
componentConfig.getMandatoryOptionInt(ResourceKeys.COMPONENT_INSTANCES);
- int definedMinCount = componentDef.getMinInstanceCount();
- int definedMaxCount = componentDef.getMaxInstanceCount();
+ int definedMinCount = componentDef.getMinInstanceCountInt();
+ int definedMaxCount = componentDef.getMaxInstanceCountInt();
if (count < definedMinCount || count > definedMaxCount) {
throw new BadConfigException("Component %s, %s value %d out of range. "
+ "Expected minimum is %d and maximum is %d",
@@ -265,9 +265,9 @@ public class AgentClientProvider extends AbstractClientProvider
public Set<String> getApplicationTags(SliderFileSystem fileSystem,
String appDef) throws SliderException {
Set<String> tags;
- MetaInfo metainfo;
+ Metainfo metainfo;
try {
- metainfo = AgentUtils.getApplicationMetaInfo(fileSystem, appDef);
+ metainfo = AgentUtils.getApplicationMetainfo(fileSystem, appDef);
} catch (IOException e) {
log.error("Error retrieving metainfo from {}", appDef, e);
throw new SliderException("Error retrieving metainfo", e);
@@ -306,7 +306,7 @@ public class AgentClientProvider extends AbstractClientProvider
File cmdDir = new File(tmpDir, "command");
cmdDir.mkdir();
- MetaInfo metaInfo = null;
+ Metainfo metaInfo = null;
JSONObject defaultConfig = null;
try {
// expand app package into /app_pkg
@@ -326,7 +326,19 @@ public class AgentClientProvider extends AbstractClientProvider
while (offset < size) {
offset += zipInputStream.read(content, offset, size - offset);
}
- metaInfo = new MetaInfoParser().fromInputStream(new ByteArrayInputStream(content));
+ metaInfo = new MetainfoParser().fromXmlStream(new ByteArrayInputStream(content));
+ }
+ } else if ("metainfo.json".equals(zipEntry.getName())) {
+ int size = (int) zipEntry.getSize();
+ if (size != -1) {
+ log.info("Reading {} of size {}", zipEntry.getName(),
+ zipEntry.getSize());
+ byte[] content = new byte[size];
+ int offset = 0;
+ while (offset < size) {
+ offset += zipInputStream.read(content, offset, size - offset);
+ }
+ metaInfo = new MetainfoParser().fromJsonStream(new ByteArrayInputStream(content));
}
} else if ("clientInstallConfig-default.json".equals(zipEntry.getName())) {
int size = (int) zipEntry.getSize();
@@ -361,7 +373,7 @@ public class AgentClientProvider extends AbstractClientProvider
}
if (metaInfo == null) {
- throw new SliderException("Not a valid app package. Could not read metainfo.xml.");
+ throw new SliderException("Not a valid app package. Could not read metainfo.");
}
expandAgentTar(agentPkgDir);
@@ -502,7 +514,7 @@ public class AgentClientProvider extends AbstractClientProvider
protected JSONObject getCommandJson(JSONObject defaultConfig,
JSONObject inputConfig,
- MetaInfo metainfo,
+ Metainfo metainfo,
File clientInstallPath) throws SliderException {
try {
JSONObject pkgList = new JSONObject();
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/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 b98795a..b624221 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
@@ -66,16 +66,19 @@ import org.apache.slider.providers.AbstractProviderService;
import org.apache.slider.providers.ProviderCore;
import org.apache.slider.providers.ProviderRole;
import org.apache.slider.providers.ProviderUtils;
-import org.apache.slider.providers.agent.application.metadata.json.Application;
-import org.apache.slider.providers.agent.application.metadata.json.CommandScript;
-import org.apache.slider.providers.agent.application.metadata.json.Component;
-import org.apache.slider.providers.agent.application.metadata.json.ComponentCommand;
-import org.apache.slider.providers.agent.application.metadata.json.ConfigFile;
+import org.apache.slider.providers.agent.application.metadata.Application;
+import org.apache.slider.providers.agent.application.metadata.CommandScript;
+import org.apache.slider.providers.agent.application.metadata.Component;
+import org.apache.slider.providers.agent.application.metadata.ComponentCommand;
+import org.apache.slider.providers.agent.application.metadata.ComponentExport;
+import org.apache.slider.providers.agent.application.metadata.ConfigFile;
import org.apache.slider.providers.agent.application.metadata.DefaultConfig;
-import org.apache.slider.providers.agent.application.metadata.json.Export;
-import org.apache.slider.providers.agent.application.metadata.json.ExportGroup;
-import org.apache.slider.providers.agent.application.metadata.json.MetaInfo;
-import org.apache.slider.providers.agent.application.metadata.json.Package;
+import org.apache.slider.providers.agent.application.metadata.Export;
+import org.apache.slider.providers.agent.application.metadata.ExportGroup;
+import org.apache.slider.providers.agent.application.metadata.Metainfo;
+import org.apache.slider.providers.agent.application.metadata.OSPackage;
+import org.apache.slider.providers.agent.application.metadata.OSSpecific;
+import org.apache.slider.providers.agent.application.metadata.Package;
import org.apache.slider.providers.agent.application.metadata.PropertyInfo;
import org.apache.slider.server.appmaster.actions.ProviderReportedContainerLoss;
import org.apache.slider.server.appmaster.actions.RegisterComponentInstance;
@@ -155,7 +158,7 @@ public class AgentProviderService extends AbstractProviderService implements
private int heartbeatMonitorInterval = 0;
private AgentClientProvider clientProvider;
private AtomicInteger taskId = new AtomicInteger(0);
- private volatile MetaInfo metaInfo = null;
+ private volatile Metainfo metaInfo = null;
private Map<String, DefaultConfig> defaultConfigs = null;
private ComponentCommandOrder commandOrder = null;
private HeartbeatMonitor monitor;
@@ -240,8 +243,8 @@ public class AgentProviderService extends AbstractProviderService implements
MapOperations componentConfig = resources.getMandatoryComponent(name);
int count =
componentConfig.getMandatoryOptionInt(ResourceKeys.COMPONENT_INSTANCES);
- int definedMinCount = componentDef.getMinInstanceCount();
- int definedMaxCount = componentDef.getMaxInstanceCount();
+ int definedMinCount = componentDef.getMinInstanceCountInt();
+ int definedMaxCount = componentDef.getMaxInstanceCountInt();
if (count < definedMinCount || count > definedMaxCount) {
throw new BadConfigException("Component %s, %s value %d out of range. "
+ "Expected minimum is %d and maximum is %d",
@@ -272,8 +275,7 @@ public class AgentProviderService extends AbstractProviderService implements
throw new SliderException(
"metainfo.xml is required in app package.");
}
- commandOrder = new ComponentCommandOrder(metaInfo.getApplication()
- .getCommandOrders());
+ commandOrder = new ComponentCommandOrder(metaInfo.getApplication().getCommandOrders());
defaultConfigs = initializeDefaultConfigs(fileSystem, appDef, metaInfo);
monitor = new HeartbeatMonitor(this, getHeartbeatMonitorInterval());
monitor.start();
@@ -891,6 +893,7 @@ public class AgentProviderService extends AbstractProviderService implements
}
}
+ processAndPublishComponentSpecificData(ports, containerId, fqdn, roleName);
processAndPublishComponentSpecificExports(ports, containerId, fqdn, roleName);
// and update registration entries
@@ -1043,7 +1046,7 @@ public class AgentProviderService extends AbstractProviderService implements
}
@VisibleForTesting
- protected MetaInfo getMetaInfo() {
+ protected Metainfo getMetaInfo() {
return this.metaInfo;
}
@@ -1053,9 +1056,9 @@ public class AgentProviderService extends AbstractProviderService implements
}
@VisibleForTesting
- protected MetaInfo getApplicationMetainfo(SliderFileSystem fileSystem,
+ protected Metainfo getApplicationMetainfo(SliderFileSystem fileSystem,
String appDef) throws IOException, BadConfigException {
- return AgentUtils.getApplicationMetaInfo(fileSystem, appDef);
+ return AgentUtils.getApplicationMetainfo(fileSystem, appDef);
}
@VisibleForTesting
@@ -1075,7 +1078,7 @@ public class AgentProviderService extends AbstractProviderService implements
* @throws IOException
*/
protected Map<String, DefaultConfig> initializeDefaultConfigs(SliderFileSystem fileSystem,
- String appDef, MetaInfo metainfo) throws IOException {
+ String appDef, Metainfo metainfo) throws IOException {
Map<String, DefaultConfig> defaultConfigMap = new HashMap<>();
if (SliderUtils.isNotEmpty(metainfo.getApplication().getConfigFiles())) {
for (ConfigFile configFile : metainfo.getApplication().getConfigFiles()) {
@@ -1392,6 +1395,56 @@ public class AgentProviderService extends AbstractProviderService implements
}
}
+ /** Publish component instance specific data if the component demands it */
+ protected void processAndPublishComponentSpecificData(Map<String, String> ports,
+ String containerId,
+ String hostFqdn,
+ String componentName) {
+ String portVarFormat = "${site.%s}";
+ String hostNamePattern = "${THIS_HOST}";
+ Map<String, String> toPublish = new HashMap<String, String>();
+
+ Application application = getMetaInfo().getApplication();
+ for (Component component : application.getComponents()) {
+ if (component.getName().equals(componentName)) {
+ if (component.getComponentExports().size() > 0) {
+
+ for (ComponentExport export : component.getComponentExports()) {
+ String templateToExport = export.getValue();
+ for (String portName : ports.keySet()) {
+ boolean publishData = false;
+ String portValPattern = String.format(portVarFormat, portName);
+ if (templateToExport.contains(portValPattern)) {
+ templateToExport = templateToExport.replace(portValPattern, ports.get(portName));
+ publishData = true;
+ }
+ if (templateToExport.contains(hostNamePattern)) {
+ templateToExport = templateToExport.replace(hostNamePattern, hostFqdn);
+ publishData = true;
+ }
+ if (publishData) {
+ toPublish.put(export.getName(), templateToExport);
+ log.info("Publishing {} for name {} and container {}",
+ templateToExport, export.getName(), containerId);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (toPublish.size() > 0) {
+ Map<String, String> perContainerData = null;
+ if (!getComponentInstanceData().containsKey(containerId)) {
+ perContainerData = new ConcurrentHashMap<String, String>();
+ } else {
+ perContainerData = getComponentInstanceData().get(containerId);
+ }
+ perContainerData.putAll(toPublish);
+ getComponentInstanceData().put(containerId, perContainerData);
+ publishComponentInstanceData();
+ }
+ }
/** Publish component instance specific data if the component demands it */
protected void processAndPublishComponentSpecificExports(Map<String, String> ports,
@@ -1564,7 +1617,7 @@ public class AgentProviderService extends AbstractProviderService implements
protected boolean isMarkedAutoRestart(String roleName) {
Component component = getApplicationComponent(roleName);
if (component != null) {
- return component.getAutoStartOnFailure();
+ return component.getAutoStartOnFailureBoolean();
}
return false;
}
@@ -1692,9 +1745,22 @@ public class AgentProviderService extends AbstractProviderService implements
String pkgListFormatString = "[%s]";
List<String> packages = new ArrayList();
if (application != null) {
- List<Package> appPackages = application.getPackages();
- for (Package appPackage : appPackages){
- packages.add(String.format(pkgFormatString, appPackage.getType(), appPackage.getName()));
+ if (application.getPackages().size() > 0) {
+ List<Package> appPackages = application.getPackages();
+ for (Package appPackage : appPackages) {
+ packages.add(String.format(pkgFormatString, appPackage.getType(), appPackage.getName()));
+ }
+ } else {
+ List<OSSpecific> osSpecifics = application.getOSSpecifics();
+ if (osSpecifics != null && osSpecifics.size() > 0) {
+ for (OSSpecific osSpecific : osSpecifics) {
+ if (osSpecific.getOsType().equals("any")) {
+ for (OSPackage osPackage : osSpecific.getPackages()) {
+ packages.add(String.format(pkgFormatString, osPackage.getType(), osPackage.getName()));
+ }
+ }
+ }
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/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 2795692..6fe1161 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
@@ -16,7 +16,6 @@
*/
package org.apache.slider.providers.agent;
-import org.apache.commons.io.IOUtils;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.slider.common.tools.SliderFileSystem;
@@ -26,16 +25,12 @@ 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;
import org.apache.slider.providers.agent.application.metadata.MetainfoParser;
-import org.apache.slider.providers.agent.application.metadata.json.MetaInfo;
-import org.apache.slider.providers.agent.application.metadata.json.MetaInfoParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.FileNotFoundException;
-import java.io.File;
import java.io.IOException;
import java.io.InputStream;
-import java.io.StringWriter;
/**
*
@@ -43,33 +38,32 @@ import java.io.StringWriter;
public class AgentUtils {
private static final Logger log = LoggerFactory.getLogger(AgentUtils.class);
- public static MetaInfo getApplicationMetaInfo(SliderFileSystem fileSystem,
- String appDef) throws IOException, BadConfigException {
+ public static Metainfo getApplicationMetainfo(SliderFileSystem fileSystem,
+ String appDef) throws IOException, BadConfigException {
log.info("Reading metainfo at {}", appDef);
FileSystem fs = fileSystem.getFileSystem();
Path appPath = new Path(appDef);
- MetaInfo metaInfo = null;
+ Metainfo metainfo = null;
+ MetainfoParser metainfoParser = new MetainfoParser();
InputStream metainfoJsonStream = SliderUtils.getApplicationResourceInputStream(
fs, appPath, "metainfo.json");
if (metainfoJsonStream == null) {
InputStream metainfoXMLStream = SliderUtils.getApplicationResourceInputStream(
fs, appPath, "metainfo.xml");
if (metainfoXMLStream != null) {
- Metainfo metaInfoFromXML = new MetainfoParser().parse(metainfoXMLStream);
- metaInfo = MetaInfo.upConverted(metaInfoFromXML);
+ metainfo = metainfoParser.fromXmlStream(metainfoXMLStream);
}
} else {
- MetaInfoParser parser = new MetaInfoParser();
- metaInfo = parser.fromInputStream(metainfoJsonStream);
+ metainfo = metainfoParser.fromJsonStream(metainfoJsonStream);
}
- if (metaInfo == null) {
+ if (metainfo == null) {
log.error("metainfo is unavailable at {}.", appDef);
throw new FileNotFoundException("metainfo.xml/json is required in app package. " +
appPath);
}
- return metaInfo;
+ return metainfo;
}
static DefaultConfig getDefaultConfig(SliderFileSystem fileSystem,
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/ComponentCommandOrder.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/ComponentCommandOrder.java b/slider-core/src/main/java/org/apache/slider/providers/agent/ComponentCommandOrder.java
index 8e41b6b..194d6ff 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/ComponentCommandOrder.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/ComponentCommandOrder.java
@@ -18,7 +18,7 @@
package org.apache.slider.providers.agent;
-import org.apache.slider.providers.agent.application.metadata.json.CommandOrder;
+import org.apache.slider.providers.agent.application.metadata.CommandOrder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Application.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Application.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Application.java
index bc43d4b..cd5555f 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Application.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Application.java
@@ -16,29 +16,31 @@
*/
package org.apache.slider.providers.agent.application.metadata;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.apache.slider.common.tools.SliderUtils;
+import org.apache.slider.core.exceptions.BadCommandArgumentsException;
+import org.apache.slider.core.exceptions.SliderException;
+import org.codehaus.jackson.annotate.JsonProperty;
+
import java.util.ArrayList;
import java.util.List;
/**
* Application type defined in the metainfo
*/
-public class Application {
+public class Application implements Validate {
String name;
String comment;
String version;
String exportedConfigs;
- List<Component> components;
- List<ExportGroup> exportGroups;
- List<OSSpecific> osSpecifics;
- List<CommandOrder> commandOrders;
- List<ConfigFile> configFiles;
+ List<Component> components = new ArrayList<>();
+ List<ExportGroup> exportGroups = new ArrayList<>();
+ List<OSSpecific> osSpecifics = new ArrayList<>();
+ List<CommandOrder> commandOrders = new ArrayList<>();
+ List<ConfigFile> configFiles = new ArrayList<>();
+ List<Package> packages = new ArrayList<>();
public Application() {
- exportGroups = new ArrayList<ExportGroup>();
- components = new ArrayList<Component>();
- osSpecifics = new ArrayList<OSSpecific>();
- commandOrders = new ArrayList<CommandOrder>();
- configFiles = new ArrayList<ConfigFile>();
}
public String getName() {
@@ -73,18 +75,20 @@ public class Application {
this.exportedConfigs = exportedConfigs;
}
- public List<ConfigFile> getConfigFiles() {
- return configFiles;
- }
-
public void addConfigFile(ConfigFile configFile) {
this.configFiles.add(configFile);
}
+ @JsonProperty("configFiles")
+ public List<ConfigFile> getConfigFiles() {
+ return configFiles;
+ }
+
public void addComponent(Component component) {
components.add(component);
}
+ @JsonProperty("components")
public List<Component> getComponents() {
return components;
}
@@ -93,6 +97,7 @@ public class Application {
exportGroups.add(exportGroup);
}
+ @JsonProperty("exportGroups")
public List<ExportGroup> getExportGroups() {
return exportGroups;
}
@@ -101,6 +106,7 @@ public class Application {
osSpecifics.add(osSpecific);
}
+ @JsonIgnore
public List<OSSpecific> getOSSpecifics() {
return osSpecifics;
}
@@ -109,10 +115,16 @@ public class Application {
commandOrders.add(commandOrder);
}
- public List<CommandOrder> getCommandOrder() {
+ @JsonProperty("commandOrders")
+ public List<CommandOrder> getCommandOrders() {
return commandOrders;
}
+ @JsonProperty("packages")
+ public List<Package> getPackages() {
+ return packages;
+ }
+
@Override
public String toString() {
final StringBuilder sb =
@@ -128,4 +140,54 @@ public class Application {
sb.append('}');
return sb.toString();
}
+
+ public void validate(String version) throws SliderException {
+ if(SliderUtils.isUnset(version)) {
+ throw new BadCommandArgumentsException("schema version cannot be null");
+ }
+
+ Metainfo.checkNonNull(getName(), "name", "application");
+
+ Metainfo.checkNonNull(getVersion(), "version", "application");
+
+ if(getComponents().size() == 0) {
+ throw new SliderException("application must contain at least one component");
+ }
+
+ if(version.equals(Metainfo.VERSION_TWO_ZERO)) {
+ if(getPackages().size() > 0) {
+ throw new SliderException("packages is not supported in version " + version);
+ }
+ }
+
+ if(version.equals(Metainfo.VERSION_TWO_ONE)) {
+ if(getOSSpecifics().size() > 0) {
+ throw new SliderException("osSpecifics is not supported in version " + version);
+ }
+ }
+
+ for(CommandOrder co : getCommandOrders()) {
+ co.validate(version);
+ }
+
+ for(Component comp : getComponents()) {
+ comp.validate(version);
+ }
+
+ for(ConfigFile cf : getConfigFiles()) {
+ cf.validate(version);
+ }
+
+ for(ExportGroup eg : getExportGroups()) {
+ eg.validate(version);
+ }
+
+ for(Package pkg : getPackages()) {
+ pkg.validate(version);
+ }
+
+ for(OSSpecific os : getOSSpecifics()) {
+ os.validate(version);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandOrder.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandOrder.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandOrder.java
index 825a104..40d8cc6 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandOrder.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandOrder.java
@@ -16,10 +16,12 @@
*/
package org.apache.slider.providers.agent.application.metadata;
+import org.apache.slider.core.exceptions.SliderException;
+
/**
*
*/
-public class CommandOrder {
+public class CommandOrder implements Validate {
String command;
String requires;
@@ -51,4 +53,9 @@ public class CommandOrder {
sb.append('}');
return sb.toString();
}
+
+ public void validate(String version) throws SliderException {
+ Metainfo.checkNonNull(getCommand(), "command", "package");
+ Metainfo.checkNonNull(getRequires(), "requires", "package");
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandScript.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandScript.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandScript.java
index 612322f..9915ba1 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandScript.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandScript.java
@@ -16,10 +16,12 @@
*/
package org.apache.slider.providers.agent.application.metadata;
+import org.apache.slider.core.exceptions.SliderException;
+
/**
- *
+ * CommandScript that implements all component commands
*/
-public class CommandScript {
+public class CommandScript implements Validate {
String script;
String scriptType;
long timeout;
@@ -62,4 +64,9 @@ public class CommandScript {
sb.append('}');
return sb.toString();
}
+
+ public void validate(String version) throws SliderException {
+ Metainfo.checkNonNull(getScript(), "script", "commandScript");
+ Metainfo.checkNonNull(getScriptType(), "scriptType", "commandScript");
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java
index 418868c..9ed07e6 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java
@@ -19,6 +19,7 @@ package org.apache.slider.providers.agent.application.metadata;
import org.apache.slider.common.tools.SliderUtils;
import org.apache.slider.core.exceptions.BadConfigException;
import org.apache.slider.core.exceptions.SliderException;
+import org.codehaus.jackson.annotate.JsonProperty;
import java.util.ArrayList;
import java.util.List;
@@ -26,21 +27,29 @@ import java.util.List;
/**
*
*/
-public class Component {
+public class Component implements Validate {
+
+ public static String TYPE_STANDARD = "STANDARD";
+ public static String TYPE_DOCKER = "DOCKER";
+ public static String CATEGORY_MASTER = "MASTER";
+ public static String CATEGORY_SLAVE = "SLAVE";
+ public static String CATEGORY_CLIENT = "CLIENT";
+
String name;
- String category;
- String publishConfig;
- String minInstanceCount;
+ String category = CATEGORY_MASTER;
+ String publishConfig = Boolean.FALSE.toString();
+ String minInstanceCount = "1";
String maxInstanceCount;
- String autoStartOnFailure;
+ String autoStartOnFailure = Boolean.FALSE.toString();
String appExports;
String compExports;
CommandScript commandScript;
- List<ComponentExport> componentExports;
+ String type = TYPE_STANDARD;
+ List<ComponentExport> componentExports = new ArrayList<>();
+ List<ComponentCommand> commands = new ArrayList<>();
+ List<DockerContainer> dockerContainers = new ArrayList<>();
public Component() {
- publishConfig = Boolean.FALSE.toString();
- componentExports = new ArrayList<ComponentExport>();
}
public String getName() {
@@ -51,6 +60,14 @@ public class Component {
this.name = name;
}
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
public String getCategory() {
return category;
}
@@ -95,6 +112,14 @@ public class Component {
return minInstanceCount;
}
+ public Boolean getAutoStartOnFailureBoolean() {
+ if (SliderUtils.isUnset(getAutoStartOnFailure())) {
+ return Boolean.FALSE;
+ }
+
+ return Boolean.parseBoolean(getAutoStartOnFailure());
+ }
+
public int getMinInstanceCountInt() throws BadConfigException {
if (SliderUtils.isUnset(minInstanceCount)) {
return 0;
@@ -151,6 +176,16 @@ public class Component {
return Boolean.parseBoolean(this.autoStartOnFailure);
}
+ @JsonProperty("commands")
+ public List<ComponentCommand> getCommands() {
+ return this.commands;
+ }
+
+ @JsonProperty("dockerContainers")
+ public List<DockerContainer> getDockerContainers() {
+ return this.dockerContainers;
+ }
+
@Override
public String toString() {
final StringBuilder sb =
@@ -162,9 +197,47 @@ public class Component {
return sb.toString();
}
- class AutoRestartSettings {
- private boolean requiresAutoRestart;
- private int maxFailures;
- private int inThisManyMinutes;
+ public void validate(String version) throws SliderException {
+ Metainfo.checkNonNull(getName(), "name", "component");
+ Metainfo.checkNonNull(getCategory(), "category", "component");
+ if (!getCategory().equals(CATEGORY_MASTER)
+ && !getCategory().equals(CATEGORY_SLAVE)
+ && !getCategory().equals(CATEGORY_CLIENT)) {
+ throw new SliderException("Invalid category for the component " + getCategory());
+ }
+
+ Metainfo.checkNonNull(getType(), "type", "component");
+ if (!getType().equals(TYPE_DOCKER)
+ && !getType().equals(TYPE_STANDARD)) {
+ throw new SliderException("Invalid type for the component " + getType());
+ }
+
+ if (version.equals(Metainfo.VERSION_TWO_ZERO)) {
+ if (getType().equals(TYPE_DOCKER)) {
+ throw new SliderException(TYPE_DOCKER + " is not supported in version " + Metainfo.VERSION_TWO_ZERO);
+ }
+
+ if (getCommands().size() > 0) {
+ throw new SliderException("commands are not supported in version " + Metainfo.VERSION_TWO_ZERO);
+ }
+
+ if (getDockerContainers().size() > 0) {
+ throw new SliderException("containers are not supported in version " + Metainfo.VERSION_TWO_ZERO);
+ }
+ }
+
+ if (commandScript != null) {
+ commandScript.validate(version);
+ }
+
+ if (version.equals(Metainfo.VERSION_TWO_ONE)) {
+ for (DockerContainer dc : getDockerContainers()) {
+ dc.validate(version);
+ }
+
+ for (ComponentCommand cc : getCommands()) {
+ cc.validate(version);
+ }
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ComponentCommand.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ComponentCommand.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ComponentCommand.java
new file mode 100644
index 0000000..2724dbd
--- /dev/null
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ComponentCommand.java
@@ -0,0 +1,72 @@
+/*
+ * 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.slider.core.exceptions.SliderException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Represents the metadata associated with the application.
+ */
+public class ComponentCommand implements Validate {
+ protected static final Logger
+ log = LoggerFactory.getLogger(ComponentCommand.class);
+
+
+ private String exec;
+ private String name = "START";
+ private String type = "SHELL";
+
+ /**
+ * Creator.
+ */
+ public ComponentCommand() {
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setExec(String exec) {
+ this.exec = exec;
+ }
+
+ public String getExec() {
+ return exec;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void validate(String version) throws SliderException {
+ Metainfo.checkNonNull(getName(), "name", "componentCommand");
+
+ Metainfo.checkNonNull(getType(), "version", "application");
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ConfigFile.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ConfigFile.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ConfigFile.java
index b9dfb4e..cb47512 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ConfigFile.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ConfigFile.java
@@ -16,10 +16,12 @@
*/
package org.apache.slider.providers.agent.application.metadata;
+import org.apache.slider.core.exceptions.SliderException;
+
/**
*
*/
-public class ConfigFile {
+public class ConfigFile implements Validate {
String type;
String fileName;
String dictionaryName;
@@ -50,4 +52,8 @@ public class ConfigFile {
public void setDictionaryName(String dictionaryName) {
this.dictionaryName = dictionaryName;
}
+
+ public void validate(String version) throws SliderException {
+
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainer.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainer.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainer.java
new file mode 100644
index 0000000..3117f3b
--- /dev/null
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainer.java
@@ -0,0 +1,91 @@
+/*
+ * 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.slider.core.exceptions.SliderException;
+import org.codehaus.jackson.annotate.JsonProperty;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Represents a docker container
+ */
+public class DockerContainer implements Validate {
+ protected static final Logger
+ log = LoggerFactory.getLogger(DockerContainer.class);
+
+
+ private String name;
+ private String image;
+ private String options;
+ private List<DockerContainerMount> mounts = new ArrayList<>();
+ private List<DockerContainerPort> ports = new ArrayList<>();
+
+
+ public DockerContainer() {
+ }
+
+ @JsonProperty("mounts")
+ public List<DockerContainerMount> getMounts() {
+ return this.mounts;
+ }
+
+ @JsonProperty("ports")
+ public List<DockerContainerPort> getPorts() {
+ return this.ports;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getImage() {
+ return image;
+ }
+
+ public void setImage(String image) {
+ this.image = image;
+ }
+
+ public String getOptions() {
+ return options;
+ }
+
+ public void setOptions(String options) {
+ this.options = options;
+ }
+
+ public void validate(String version) throws SliderException {
+ Metainfo.checkNonNull(getName(), "name", "dockerContainer");
+ Metainfo.checkNonNull(getImage(), "image", "dockerContainer");
+ for (DockerContainerMount dcm : getMounts()) {
+ dcm.validate(version);
+ }
+ for (DockerContainerPort dcp : getPorts()) {
+ dcp.validate(version);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainerMount.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainerMount.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainerMount.java
new file mode 100644
index 0000000..760e15e
--- /dev/null
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainerMount.java
@@ -0,0 +1,59 @@
+/*
+ * 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.slider.core.exceptions.SliderException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Represents a docker container mount
+ */
+public class DockerContainerMount implements Validate {
+ protected static final Logger
+ log = LoggerFactory.getLogger(DockerContainerMount.class);
+
+
+ private String containerMount;
+ private String hostMount;
+
+ public DockerContainerMount() {
+ }
+
+ public String getContainerMount() {
+ return containerMount;
+ }
+
+ public void setContainerMount(String containerMount) {
+ this.containerMount = containerMount;
+ }
+
+ public String getHostMount() {
+ return hostMount;
+ }
+
+ public void setHostMount(String hostMount) {
+ this.hostMount = hostMount;
+ }
+
+ public void validate(String version) throws SliderException {
+ Metainfo.checkNonNull(getContainerMount(), "containerMount", "dockerContainerMount");
+ Metainfo.checkNonNull(getHostMount(), "hostMount", "dockerContainerMount");
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainerPort.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainerPort.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainerPort.java
new file mode 100644
index 0000000..7e717f1
--- /dev/null
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainerPort.java
@@ -0,0 +1,59 @@
+/*
+ * 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.slider.core.exceptions.SliderException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Represents a docker container port
+ */
+public class DockerContainerPort implements Validate {
+ protected static final Logger
+ log = LoggerFactory.getLogger(DockerContainerPort.class);
+
+
+ private String containerPort;
+ private String hostPort;
+
+ public DockerContainerPort() {
+ }
+
+ public String getContainerPort() {
+ return containerPort;
+ }
+
+ public void setContainerPort(String containerPort) {
+ this.containerPort = containerPort;
+ }
+
+ public String getHostPort() {
+ return hostPort;
+ }
+
+ public void setHostPort(String hostPort) {
+ this.hostPort = hostPort;
+ }
+
+ public void validate(String version) throws SliderException {
+ Metainfo.checkNonNull(getContainerPort(), "containerPort", "dockerContainerPort");
+ Metainfo.checkNonNull(getHostPort(), "hostPort", "dockerContainerPort");
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Export.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Export.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Export.java
index 17326a3..5e0fb24 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Export.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Export.java
@@ -16,10 +16,12 @@
*/
package org.apache.slider.providers.agent.application.metadata;
+import org.apache.slider.core.exceptions.SliderException;
+
/**
*
*/
-public class Export {
+public class Export implements Validate {
String name;
String value;
@@ -51,4 +53,9 @@ public class Export {
sb.append('}');
return sb.toString();
}
+
+ public void validate(String version) throws SliderException {
+ Metainfo.checkNonNull(getName(), "name", "export");
+ Metainfo.checkNonNull(getValue(), "value", "export");
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ExportGroup.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ExportGroup.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ExportGroup.java
index d2e20a4..3d9f34c 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ExportGroup.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ExportGroup.java
@@ -16,13 +16,15 @@
*/
package org.apache.slider.providers.agent.application.metadata;
+import org.apache.slider.core.exceptions.SliderException;
+
import java.util.ArrayList;
import java.util.List;
/**
*
*/
-public class ExportGroup {
+public class ExportGroup implements Validate {
String name;
List<Export> exports;
@@ -59,4 +61,11 @@ public class ExportGroup {
sb.append('}');
return sb.toString();
}
+
+ public void validate(String version) throws SliderException {
+ Metainfo.checkNonNull(getName(), "name", "exportGroup");
+ for(Export exp : getExports()) {
+ exp.validate(version);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/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 ea23678..f89846e 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
@@ -16,7 +16,8 @@
*/
package org.apache.slider.providers.agent.application.metadata;
-import org.apache.slider.providers.agent.application.metadata.json.MetaInfo;
+import org.apache.slider.common.tools.SliderUtils;
+import org.apache.slider.core.exceptions.SliderException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -26,19 +27,11 @@ import org.slf4j.LoggerFactory;
public class Metainfo {
protected static final Logger log =
LoggerFactory.getLogger(Metainfo.class);
+ public static String VERSION_TWO_ZERO = "2.0";
+ public static String VERSION_TWO_ONE = "2.1";
String schemaVersion;
Application application;
- MetaInfo jsonEncoded;
-
- public Metainfo() {
- }
-
- // TODO: Temporary code - the plan is to move to the json parsed MetaInfo
- public Metainfo(MetaInfo jsonEncoded) {
- jsonEncoded = jsonEncoded;
- // initialize the class
- }
public String getSchemaVersion() {
return schemaVersion;
@@ -58,7 +51,7 @@ public class Metainfo {
public Component getApplicationComponent(String roleName) {
if (application == null) {
- log.error("Malformed app definition: Expect application as the top level element for metainfo.xml");
+ log.error("Malformed app definition: Expect application as the top level element for metainfo");
} else {
for (Component component : application.getComponents()) {
if (component.getName().equals(roleName)) {
@@ -69,7 +62,18 @@ public class Metainfo {
return null;
}
- public static Metainfo fromJsonObject(MetaInfo jsonEncoded) {
- return new Metainfo(jsonEncoded);
+ public void validate() throws SliderException {
+ if (!VERSION_TWO_ONE.equals(schemaVersion) ||
+ !VERSION_TWO_ZERO.equals(schemaVersion)) {
+ throw new SliderException("Unsupported version " + getSchemaVersion());
+ }
+
+ application.validate(schemaVersion);
+ }
+
+ public static void checkNonNull(String value, String field, String type) throws SliderException {
+ if (SliderUtils.isUnset(value)) {
+ throw new SliderException(type + "." + field + " cannot be null");
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/MetainfoParser.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/MetainfoParser.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/MetainfoParser.java
index 1d8403f..12af586 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/MetainfoParser.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/MetainfoParser.java
@@ -16,18 +16,78 @@
*/
package org.apache.slider.providers.agent.application.metadata;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
import org.apache.commons.digester.Digester;
+import org.apache.commons.io.IOUtils;
import org.xml.sax.SAXException;
import java.io.IOException;
import java.io.InputStream;
+import java.io.StringWriter;
/**
*
*/
public class MetainfoParser {
+ private final GsonBuilder gsonBuilder = new GsonBuilder();
+ private final Gson gson;
- public Metainfo parse(InputStream metainfoStream) throws IOException {
+ public MetainfoParser() {
+ gson = gsonBuilder.create();
+ }
+
+ /**
+ * Convert to a JSON string
+ *
+ * @return a JSON string description
+ *
+ * @throws IOException Problems mapping/writing the object
+ */
+ public String toJsonString(Metainfo metaInfo) throws IOException {
+ return gson.toJson(metaInfo);
+ }
+
+ /**
+ * Convert from JSON
+ *
+ * @param json input
+ *
+ * @return the parsed JSON
+ *
+ * @throws IOException IO
+ */
+ public Metainfo fromJsonString(String json)
+ throws IOException {
+ return gson.fromJson(json, Metainfo.class);
+ }
+
+ /**
+ * Parse metainfo from an IOStream
+ *
+ * @param is
+ *
+ * @return
+ *
+ * @throws IOException
+ */
+ public Metainfo fromJsonStream(InputStream is) throws IOException {
+ StringWriter writer = new StringWriter();
+ IOUtils.copy(is, writer);
+ return fromJsonString(writer.toString());
+ }
+
+
+ /**
+ * Parse metainfo from an XML formatted IOStream
+ *
+ * @param metainfoStream
+ *
+ * @return
+ *
+ * @throws IOException
+ */
+ public Metainfo fromXmlStream(InputStream metainfoStream) throws IOException {
Digester digester = new Digester();
digester.setValidating(false);
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSPackage.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSPackage.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSPackage.java
index 334f96b..32b4890 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSPackage.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSPackage.java
@@ -16,10 +16,12 @@
*/
package org.apache.slider.providers.agent.application.metadata;
+import org.apache.slider.core.exceptions.SliderException;
+
/**
*
*/
-public class OSPackage {
+public class OSPackage implements Validate {
String type;
String name;
@@ -41,4 +43,9 @@ public class OSPackage {
public void setName(String name) {
this.name = name;
}
+
+ public void validate(String version) throws SliderException {
+ Metainfo.checkNonNull(getName(), "name", "osPackage");
+ Metainfo.checkNonNull(getType(), "type", "osPackage");
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSSpecific.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSSpecific.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSSpecific.java
index 7c36e8e..c06d498 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSSpecific.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSSpecific.java
@@ -16,13 +16,15 @@
*/
package org.apache.slider.providers.agent.application.metadata;
+import org.apache.slider.core.exceptions.SliderException;
+
import java.util.ArrayList;
import java.util.List;
/**
*
*/
-public class OSSpecific {
+public class OSSpecific implements Validate {
String osType;
List<OSPackage> packages;
@@ -45,4 +47,11 @@ public class OSSpecific {
public List<OSPackage> getPackages() {
return packages;
}
+
+ public void validate(String version) throws SliderException {
+ Metainfo.checkNonNull(getOsType(), "osType", "osSpecific");
+ for (OSPackage opkg : getPackages()) {
+ opkg.validate(version);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Package.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Package.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Package.java
new file mode 100644
index 0000000..b88f77d
--- /dev/null
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Package.java
@@ -0,0 +1,60 @@
+/*
+ * 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.slider.core.exceptions.SliderException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Represents package description.
+ */
+public class Package implements Validate {
+ protected static final Logger
+ log = LoggerFactory.getLogger(Package.class);
+
+
+ private String name;
+ private String type;
+
+ public Package() {
+ }
+
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public void validate(String version) throws SliderException {
+ Metainfo.checkNonNull(getName(), "name", "package");
+ Metainfo.checkNonNull(getType(), "type", "package");
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Validate.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Validate.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Validate.java
new file mode 100644
index 0000000..ef03dcd
--- /dev/null
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Validate.java
@@ -0,0 +1,27 @@
+/*
+ * 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.slider.core.exceptions.SliderException;
+
+/**
+ * Implementer provides a validate method
+ */
+public interface Validate {
+
+ public void validate(String version) throws SliderException;
+}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Application.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Application.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Application.java
deleted file mode 100644
index 4dfa18d..0000000
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Application.java
+++ /dev/null
@@ -1,123 +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.json;
-
-import org.codehaus.jackson.JsonParseException;
-import org.codehaus.jackson.annotate.JsonIgnore;
-import org.codehaus.jackson.annotate.JsonIgnoreProperties;
-import org.codehaus.jackson.annotate.JsonProperty;
-import org.codehaus.jackson.map.JsonMappingException;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.map.SerializationConfig;
-import org.codehaus.jackson.map.annotate.JsonSerialize;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Represents the metadata associated with the application.
- */
-public class Application {
- protected static final Logger
- log = LoggerFactory.getLogger(Application.class);
-
-
- private String name;
- private List<Component> components = new ArrayList<>();
- private String comment;
- private String version;
- private String exportedConfigs;
- private List<ExportGroup> exportGroups = new ArrayList<>();
- private List<Package> packages = new ArrayList<>();
- private List<CommandOrder> commandOrders = new ArrayList<>();
- private List<ConfigFile> configFiles = new ArrayList<>();
-
- public Application() {
- }
-
- @JsonProperty("components")
- public List<Component> getComponents() {
- return this.components;
- }
-
- @JsonProperty("exportGroups")
- public List<ExportGroup> getExportGroups() {
- return this.exportGroups;
- }
-
- @JsonProperty("packages")
- public List<Package> getPackages() {
- return this.packages;
- }
-
- @JsonProperty("commandOrders")
- public List<CommandOrder> getCommandOrders() {
- return this.commandOrders;
- }
-
- @JsonProperty("configFiles")
- public List<ConfigFile> getConfigFiles() {
- return this.configFiles;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getName() {
- return name;
- }
-
- @JsonIgnore
- public Component getApplicationComponent(String name) {
- for (Component component : components) {
- if (name.equals(component.getName())) {
- return component;
- }
- }
- return null;
- }
-
- public String getComment() {
- return comment;
- }
-
- public void setComment(String comment) {
- this.comment = comment;
- }
-
- public String getVersion() {
- return version;
- }
-
- public void setVersion(String version) {
- this.version = version;
- }
-
- public String getExportedConfigs() {
- return exportedConfigs;
- }
-
- public void setExportedConfigs(String exportedConfigs) {
- this.exportedConfigs = exportedConfigs;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/CommandOrder.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/CommandOrder.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/CommandOrder.java
deleted file mode 100644
index 1ac12aa..0000000
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/CommandOrder.java
+++ /dev/null
@@ -1,57 +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.json;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Represents package description.
- */
-public class CommandOrder {
- protected static final Logger
- log = LoggerFactory.getLogger(CommandOrder.class);
-
-
- private String command;
- private String requires;
-
- /**
- * Creator.
- */
- public CommandOrder() {
- }
-
-
- public void setCommand(String name) {
- command = command;
- }
-
- public String getCommand() {
- return command;
- }
-
- public void setRequires(String type) {
- requires = requires;
- }
-
- public String getRequires() {
- return requires;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/CommandScript.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/CommandScript.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/CommandScript.java
deleted file mode 100644
index 51869a0..0000000
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/CommandScript.java
+++ /dev/null
@@ -1,66 +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.json;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Represents package description.
- */
-public class CommandScript {
- protected static final Logger
- log = LoggerFactory.getLogger(CommandScript.class);
-
-
- private String script;
- private String scriptType;
- private long timeout;
-
- /**
- * Creator.
- */
- public CommandScript() {
- }
-
-
- public void setScript(String script) {
- this.script = script;
- }
-
- public String getScript() {
- return script;
- }
-
- public String getScriptType() {
- return scriptType;
- }
-
- public void setScriptType(String scriptType) {
- this.scriptType = scriptType;
- }
-
- public long getTimeout() {
- return timeout;
- }
-
- public void setTimeout(long timeout) {
- this.timeout = timeout;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Component.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Component.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Component.java
deleted file mode 100644
index 84147a3..0000000
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Component.java
+++ /dev/null
@@ -1,144 +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.json;
-
-import org.codehaus.jackson.annotate.JsonIgnoreProperties;
-import org.codehaus.jackson.annotate.JsonProperty;
-import org.codehaus.jackson.map.annotate.JsonSerialize;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Represents the metadata associated with the application.
- */
-@JsonIgnoreProperties(ignoreUnknown = true)
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
-public class Component {
- protected static final Logger
- log = LoggerFactory.getLogger(Component.class);
-
- private String name;
- private String compExports;
- private String category = "MASTER";
- private String publishConfig;
- private String type;
- private int minInstanceCount = 1;
- private int maxInstanceCount = Integer.MAX_VALUE;
- private Boolean autoStartOnFailure = false;
- private String appExports;
- private CommandScript commandScript;
- private List<ComponentCommand> commands = new ArrayList<ComponentCommand>();
- private List<Container> containers = new ArrayList<Container>();
-
- public Component() {
- }
-
- @JsonProperty("commands")
- public List<ComponentCommand> getCommands() {
- return this.commands;
- }
-
- @JsonProperty("containers")
- public List<Container> getContainers() {
- return this.containers;
- }
-
- public CommandScript getCommandScript() {
- return commandScript;
- }
-
- public void setCommandScript(CommandScript commandScript) {
- this.commandScript = commandScript;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getName() {
- return name;
- }
-
- public String getCompExports() {
- return compExports;
- }
-
- public void setCompExports(String compExports) {
- this.compExports = compExports;
- }
-
- public String getCategory() {
- return category;
- }
-
- public void setCategory(String category) {
- this.category = category;
- }
-
- public String getPublishConfig() {
- return publishConfig;
- }
-
- public void setPublishConfig(String publishConfig) {
- this.publishConfig = publishConfig;
- }
-
- public int getMinInstanceCount() {
- return minInstanceCount;
- }
-
- public void setMinInstanceCount(int minInstanceCount) {
- this.minInstanceCount = minInstanceCount;
- }
-
- public int getMaxInstanceCount() {
- return maxInstanceCount;
- }
-
- public void setMaxInstanceCount(int maxInstanceCount) {
- this.maxInstanceCount = maxInstanceCount;
- }
-
- public Boolean getAutoStartOnFailure() {
- return autoStartOnFailure;
- }
-
- public void setAutoStartOnFailure(Boolean autoStartOnFailure) {
- this.autoStartOnFailure = autoStartOnFailure;
- }
-
- public String getAppExports() {
- return appExports;
- }
-
- public void setAppExports(String appExports) {
- this.appExports = appExports;
- }
-
- public String getType() {
- return type;
- }
-
- public void setType(String type) {
- this.type = type;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ComponentCommand.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ComponentCommand.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ComponentCommand.java
deleted file mode 100644
index aa7f3c3..0000000
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ComponentCommand.java
+++ /dev/null
@@ -1,79 +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.json;
-
-import org.codehaus.jackson.JsonParseException;
-import org.codehaus.jackson.annotate.JsonIgnore;
-import org.codehaus.jackson.annotate.JsonIgnoreProperties;
-import org.codehaus.jackson.annotate.JsonProperty;
-import org.codehaus.jackson.map.JsonMappingException;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.map.SerializationConfig;
-import org.codehaus.jackson.map.annotate.JsonSerialize;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Represents the metadata associated with the application.
- */
-@JsonIgnoreProperties(ignoreUnknown = true)
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
-public class ComponentCommand {
- protected static final Logger
- log = LoggerFactory.getLogger(ComponentCommand.class);
-
-
- private String exec;
- private String name = "START";
- private String type = "SHELL";
-
- /**
- * Creator.
- */
- public ComponentCommand() {
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getName() {
- return name;
- }
-
- public void setExec(String exec) {
- this.exec = exec;
- }
-
- public String getExec() {
- return exec;
- }
-
- public void setType(String type) {
- this.type = type;
- }
-
- public String getType() {
- return type;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ConfigFile.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ConfigFile.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ConfigFile.java
deleted file mode 100644
index 9a83f35..0000000
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ConfigFile.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.json;
-
-/**
- *
- */
-public class ConfigFile {
- String type;
- String fileName;
- String dictionaryName;
-
- public ConfigFile() {
- }
-
- public String getType() {
- return type;
- }
-
- public void setType(String type) {
- this.type = type;
- }
-
- public String getFileName() {
- return fileName;
- }
-
- public void setFileName(String fileName) {
- this.fileName = fileName;
- }
-
- public String getDictionaryName() {
- return dictionaryName;
- }
-
- public void setDictionaryName(String dictionaryName) {
- this.dictionaryName = dictionaryName;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Container.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Container.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Container.java
deleted file mode 100644
index e95406e..0000000
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Container.java
+++ /dev/null
@@ -1,79 +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.json;
-
-import org.codehaus.jackson.annotate.JsonProperty;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Represents a docker container
- */
-public class Container {
- protected static final Logger
- log = LoggerFactory.getLogger(Container.class);
-
-
- private String name;
- private String image;
- private String options;
- private List<ContainerMount> mounts = new ArrayList<>();
- private List<ContainerPort> ports = new ArrayList<>();
-
-
- public Container() {
- }
-
- @JsonProperty("mounts")
- public List<ContainerMount> getMounts() {
- return this.mounts;
- }
-
- @JsonProperty("ports")
- public List<ContainerPort> getPorts() {
- return this.ports;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getImage() {
- return image;
- }
-
- public void setImage(String image) {
- this.image = image;
- }
-
- public String getOptions() {
- return options;
- }
-
- public void setOptions(String options) {
- this.options = options;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ContainerMount.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ContainerMount.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ContainerMount.java
deleted file mode 100644
index b31b602..0000000
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ContainerMount.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.json;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Represents a docker container mount
- */
-public class ContainerMount {
- protected static final Logger
- log = LoggerFactory.getLogger(ContainerMount.class);
-
-
- private String containerMount;
- private String hostMount;
-
- public ContainerMount() {
- }
-
- public String getContainerMount() {
- return containerMount;
- }
-
- public void setContainerMount(String containerMount) {
- this.containerMount = containerMount;
- }
-
- public String getHostMount() {
- return hostMount;
- }
-
- public void setHostMount(String hostMount) {
- this.hostMount = hostMount;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ContainerPort.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ContainerPort.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ContainerPort.java
deleted file mode 100644
index d2dcb09..0000000
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ContainerPort.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.json;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Represents a docker container port
- */
-public class ContainerPort {
- protected static final Logger
- log = LoggerFactory.getLogger(ContainerPort.class);
-
-
- private String containerPort;
- private String hostPort;
-
- public ContainerPort() {
- }
-
- public String getContainerPort() {
- return containerPort;
- }
-
- public void setContainerPort(String containerPort) {
- this.containerPort = containerPort;
- }
-
- public String getHostPort() {
- return hostPort;
- }
-
- public void setHostPort(String hostPort) {
- this.hostPort = hostPort;
- }
-}