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 2014/10/15 09:19:11 UTC
[4/5] git commit: SLIDER-481. Exports should allow a multiple line
items per export and a more hierarchical structure
SLIDER-481. Exports should allow a multiple line items per export and a more hierarchical structure
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/31e05853
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/31e05853
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/31e05853
Branch: refs/heads/feature/SLIDER-481_allow_dedicated_handling_of_exports
Commit: 31e058531a41d5169ee74b72a060af39a03a30a0
Parents: 34e4487
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Wed Oct 15 00:02:16 2014 -0700
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Wed Oct 15 00:02:16 2014 -0700
----------------------------------------------------------------------
app-packages/memcached/metainfo.xml | 18 +-
.../org/apache/slider/client/SliderClient.java | 102 +
.../apache/slider/client/SliderClient.java.orig | 2913 ++++++++++++++++++
.../common/params/ActionRegistryArgs.java | 19 +-
.../apache/slider/common/params/Arguments.java | 2 +
.../core/registry/docstore/ExportEntry.java | 120 +
.../registry/docstore/PublishedExports.java | 141 +
.../docstore/PublishedExportsOutputter.java | 104 +
.../registry/docstore/PublishedExportsSet.java | 100 +
.../registry/info/CustomRegistryConstants.java | 3 +
.../registry/retrieve/RegistryRetriever.java | 91 +-
.../providers/agent/AgentProviderService.java | 266 +-
.../agent/application/metadata/Component.java | 9 +
.../application/metadata/MetainfoParser.java | 1 +
.../slideram/SliderAMProviderService.java | 6 +
.../appmaster/state/ProviderAppState.java | 7 +
.../state/StateAccessForProviders.java | 7 +
.../server/appmaster/web/rest/RestPaths.java | 1 +
.../web/rest/publisher/PublisherResource.java | 31 +-
.../slider/client/TestClientBadArgs.groovy | 43 +
.../agent/TestAgentProviderService.java | 186 +-
.../framework/AgentCommandTestBase.groovy | 27 +
.../funtest/lifecycle/AppsThroughAgentIT.groovy | 40 +
23 files changed, 4176 insertions(+), 61 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/31e05853/app-packages/memcached/metainfo.xml
----------------------------------------------------------------------
diff --git a/app-packages/memcached/metainfo.xml b/app-packages/memcached/metainfo.xml
index 5801ad2..0984dc9 100644
--- a/app-packages/memcached/metainfo.xml
+++ b/app-packages/memcached/metainfo.xml
@@ -23,17 +23,23 @@
<comment>Memcache is a network accessible key/value storage system, often used as a distributed cache.</comment>
<version>1.0.0</version>
<exportedConfigs>None</exportedConfigs>
+ <exportGroups>
+ <exportGroup>
+ <name>Servers</name>
+ <exports>
+ <export>
+ <name>host_port</name>
+ <value>${MEMCACHED_HOST}:${site.global.listen_port}</value>
+ </export>
+ </exports>
+ </exportGroup>
+ </exportGroups>
<components>
<component>
<name>MEMCACHED</name>
<category>MASTER</category>
- <componentExports>
- <componentExport>
- <name>host_port</name>
- <value>${THIS_HOST}:${site.global.listen_port}</value>
- </componentExport>
- </componentExports>
+ <compExports>Servers-host_port</compExports>
<commandScript>
<script>scripts/memcached.py</script>
<scriptType>PYTHON</scriptType>
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/31e05853/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/client/SliderClient.java b/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
index 50a7097..eeeee26 100644
--- a/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
+++ b/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
@@ -115,6 +115,9 @@ import org.apache.slider.core.registry.docstore.ConfigFormat;
import org.apache.slider.core.registry.docstore.PublishedConfigSet;
import org.apache.slider.core.registry.docstore.PublishedConfiguration;
import org.apache.slider.core.registry.docstore.PublishedConfigurationOutputter;
+import org.apache.slider.core.registry.docstore.PublishedExports;
+import org.apache.slider.core.registry.docstore.PublishedExportsOutputter;
+import org.apache.slider.core.registry.docstore.PublishedExportsSet;
import org.apache.slider.core.registry.retrieve.RegistryRetriever;
import org.apache.slider.core.zk.BlockingZKWatcher;
import org.apache.slider.core.zk.ZKIntegration;
@@ -2285,11 +2288,19 @@ public class SliderClient extends AbstractSliderLaunchedService implements RunSe
} else if (registryArgs.listConf) {
// list the configurations
actionRegistryListConfigsYarn(registryArgs);
+ } else if (registryArgs.listExports) {
+ // list the exports
+ actionRegistryListExports(registryArgs);
} else if (SliderUtils.isSet(registryArgs.getConf)) {
// get a configuration
PublishedConfiguration publishedConfiguration =
actionRegistryGetConfig(registryArgs);
outputConfig(publishedConfiguration, registryArgs);
+ } else if (SliderUtils.isSet(registryArgs.getExport)) {
+ // get a export group
+ PublishedExports publishedExports =
+ actionRegistryGetExport(registryArgs);
+ outputExport(publishedExports, registryArgs);
} else {
// it's an unknown command
log.info(ActionRegistryArgs.USAGE);
@@ -2698,6 +2709,34 @@ public class SliderClient extends AbstractSliderLaunchedService implements RunSe
}
/**
+ * list exports available for an instance
+ *
+ * @param registryArgs registry Arguments
+ * @throws YarnException YARN problems
+ * @throws IOException Network or other problems
+ */
+ public void actionRegistryListExports(ActionRegistryArgs registryArgs)
+ throws YarnException, IOException {
+ ServiceRecord instance = lookupServiceRecord(registryArgs);
+
+ RegistryRetriever retriever = new RegistryRetriever(instance);
+ PublishedExportsSet exports =
+ retriever.getExports(!registryArgs.internal);
+
+ for (String exportName : exports.keys()) {
+ if (!registryArgs.verbose) {
+ log.info("{}", exportName);
+ } else {
+ PublishedExports published =
+ exports.get(exportName);
+ log.info("{} : {}",
+ exportName,
+ published.description);
+ }
+ }
+ }
+
+ /**
* list configs available for an instance
*
* @param registryArgs registry Arguments
@@ -2722,6 +2761,31 @@ public class SliderClient extends AbstractSliderLaunchedService implements RunSe
}
/**
+ * get a specific export group
+ *
+ * @param registryArgs registry Arguments
+ *
+ * @throws YarnException YARN problems
+ * @throws IOException Network or other problems
+ * @throws FileNotFoundException if the config is not found
+ */
+ @VisibleForTesting
+ public PublishedExports actionRegistryGetExport(ActionRegistryArgs registryArgs)
+ throws YarnException, IOException {
+ ServiceRecord instance = lookupServiceRecord(registryArgs);
+
+ RegistryRetriever retriever = new RegistryRetriever(instance);
+ boolean external = !registryArgs.internal;
+ PublishedExportsSet exports =
+ retriever.getExports(external);
+
+ PublishedExports published = retriever.retrieveExports(exports,
+ registryArgs.getExport,
+ external);
+ return published;
+ }
+
+ /**
* write out the config. If a destination is provided and that dir is a
* directory, the entry is written to it with the name provided + extension,
* else it is printed to standard out.
@@ -2761,6 +2825,44 @@ public class SliderClient extends AbstractSliderLaunchedService implements RunSe
}
/**
+ * write out the config
+ * @param published
+ * @param registryArgs
+ * @throws BadCommandArgumentsException
+ * @throws IOException
+ */
+ private void outputExport(PublishedExports published,
+ ActionRegistryArgs registryArgs) throws
+ BadCommandArgumentsException,
+ IOException {
+ // decide whether or not to print
+ String entry = registryArgs.getExport;
+ String format = ConfigFormat.JSON.toString();
+ ConfigFormat configFormat = ConfigFormat.resolve(format);
+ if (configFormat == null || configFormat != ConfigFormat.JSON) {
+ throw new BadCommandArgumentsException(
+ "Unknown/Unsupported format %s . Only JSON is supported.", format);
+ }
+
+ PublishedExportsOutputter outputter =
+ PublishedExportsOutputter.createOutputter(configFormat,
+ published);
+ boolean print = registryArgs.out == null;
+ if (!print) {
+ File destFile;
+ destFile = registryArgs.out;
+ if (destFile.isDirectory()) {
+ // creating it under a directory
+ destFile = new File(destFile, entry + "." + format);
+ }
+ log.info("Destination path: {}", destFile);
+ outputter.save(destFile);
+ } else {
+ print(outputter.asString());
+ }
+ }
+
+ /**
* Look up an instance
* @return instance data
* @throws SliderException other failures