svn commit: r1594527 - /incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/services/registry/RegistryRestResources.java

2014-05-14 Thread stevel
Author: stevel
Date: Wed May 14 09:49:12 2014
New Revision: 1594527

URL: http://svn.apache.org/r1594527
Log:
SLIDER-50  use RestPaths for source of base registry path

Modified:

incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/services/registry/RegistryRestResources.java

Modified: 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/services/registry/RegistryRestResources.java
URL: 
http://svn.apache.org/viewvc/incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/services/registry/RegistryRestResources.java?rev=1594527r1=1594526r2=1594527view=diff
==
--- 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/services/registry/RegistryRestResources.java
 (original)
+++ 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/services/registry/RegistryRestResources.java
 Wed May 14 09:49:12 2014
@@ -49,8 +49,8 @@ import java.util.Random;
 @Singleton
 @Path(RestPaths.SLIDER_PATH_REGISTRY)
 public class RegistryRestResources extends 
DiscoveryResourceServiceInstanceData {
-  public static final String SERVICE_NAME = v1/service/{name};
-  public static final String SERVICE_NAME_ID = v1/service/{name}/{id};
+  public static final String SERVICE_NAME = RestPaths.REGISTRY_SERVICE 
+/{name};
+  public static final String SERVICE_NAME_ID = SERVICE_NAME + /{id};
   protected static final Logger log =
   LoggerFactory.getLogger(RegistryRestResources.class);
   private final SliderRegistryService registry;




svn commit: r1594532 - in /incubator/slider/trunk/slider-core/src: main/java/org/apache/slider/core/registry/docstore/ main/java/org/apache/slider/core/registry/retrieve/ main/java/org/apache/slider/s

2014-05-14 Thread stevel
Author: stevel
Date: Wed May 14 10:20:40 2014
New Revision: 1594532

URL: http://svn.apache.org/r1594532
Log:
SLIDER-50 change URL for published key-val pairs to .filetype, not /filetype

Modified:

incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigSet.java

incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfiguration.java

incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigurationOutputter.java

incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/retrieve/RegistryRetriever.java

incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/appmaster/web/SliderAmIpFilter.java

incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/RestPaths.java

incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java

incubator/slider/trunk/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneRegistryAM.groovy

incubator/slider/trunk/slider-core/src/test/groovy/org/apache/slider/registry/TestConfigSetNaming.groovy

Modified: 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigSet.java
URL: 
http://svn.apache.org/viewvc/incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigSet.java?rev=1594532r1=1594531r2=1594532view=diff
==
--- 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigSet.java
 (original)
+++ 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigSet.java
 Wed May 14 10:20:40 2014
@@ -18,10 +18,12 @@
 
 package org.apache.slider.core.registry.docstore;
 
+import org.apache.slider.server.appmaster.web.rest.RestPaths;
 import org.codehaus.jackson.annotate.JsonIgnoreProperties;
 import org.codehaus.jackson.map.annotate.JsonSerialize;
 
 import java.util.HashMap;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
@@ -35,7 +37,7 @@ import java.util.regex.Pattern;
 @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
 public class PublishedConfigSet {
 
-  public static final String VALID_NAME_PATTERN = [A-Za-z0-9_-]+;
+  public static final String VALID_NAME_PATTERN = 
RestPaths.PUBLISHED_CONFIGURATION_REGEXP;
   public static final String E_INVALID_NAME =
   Invalid configuration name -it must match the pattern  +
   VALID_NAME_PATTERN;
@@ -44,16 +46,25 @@ public class PublishedConfigSet {
   public MapString, PublishedConfiguration configurations =
   new HashMap();
 
+  /**
+   * Put a name -it will be converted to lower case before insertion.
+   * Any existing entry will be overwritten (that includes an entry
+   * with a different case in the original name)
+   * @param name name of entry
+   * @param conf configuration
+   * @throws IllegalArgumentException if not a valid name
+   */
   public void put(String name, PublishedConfiguration conf) {
-validateName(name);
-configurations.put(name, conf);
+String name1 = name.toLowerCase(Locale.ENGLISH);
+validateName(name1);
+configurations.put(name1, conf);
   }
 
   /**
* Validate the name -restricting it to the set defined in 
* {@link #VALID_NAME_PATTERN}
* @param name name to validate
-   * @throws IllegalArgumentException if not
+   * @throws IllegalArgumentException if not a valid name
*/
   public static void validateName(String name) {
 if (!validNames.matcher(name).matches()) {

Modified: 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfiguration.java
URL: 
http://svn.apache.org/viewvc/incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfiguration.java?rev=1594532r1=1594531r2=1594532view=diff
==
--- 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfiguration.java
 (original)
+++ 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfiguration.java
 Wed May 14 10:20:40 2014
@@ -158,4 +158,8 @@ public class PublishedConfiguration {
 sb.append('}');
 return sb.toString();
   }
+  
+  public PublishedConfigurationOutputter creatOutputter(ConfigFormat format) {
+return PublishedConfigurationOutputter.createOutputter(format, this);
+  }
 }

Modified: 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigurationOutputter.java
URL: 

svn commit: r1594535 - /incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java

2014-05-14 Thread stevel
Author: stevel
Date: Wed May 14 10:43:05 2014
New Revision: 1594535

URL: http://svn.apache.org/r1594535
Log:
SLIDER-50 change URL for published key-val pairs to .filetype, not /filetype

Modified:

incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java

Modified: 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java
URL: 
http://svn.apache.org/viewvc/incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java?rev=1594535r1=1594534r2=1594535view=diff
==
--- 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java
 (original)
+++ 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java
 Wed May 14 10:43:05 2014
@@ -79,7 +79,7 @@ public class PublisherResource {
   }
 
   @GET
-  @Path(/{config})
+  @Path(/ + CONFIG)
   @Produces({MediaType.APPLICATION_JSON})
   public PublishedConfiguration getConfigurationInstance(
   @PathParam(config) String config,
@@ -96,7 +96,7 @@ public class PublisherResource {
   }
   
   @GET
-  @Path(/{config}.json)
+  @Path(/ + CONFIG+ .json)
   @Produces({MediaType.APPLICATION_JSON})
   public String getConfigurationContentJson(
   @PathParam(config) String config,
@@ -107,7 +107,7 @@ public class PublisherResource {
   }
 
   @GET
-  @Path(/{config}.xml)
+  @Path(/ + CONFIG + .xml)
   @Produces({MediaType.APPLICATION_XML})
   public String getConfigurationContentXML(
   @PathParam(config) String config,
@@ -118,7 +118,7 @@ public class PublisherResource {
   }
   
   @GET
-  @Path(/{config}.properties)
+  @Path(/ + CONFIG + .properties)
   @Produces({MediaType.APPLICATION_XML})
   public String getConfigurationContentProperties(
   @PathParam(config) String config,




svn commit: r1593316 - /incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/client/SliderClient.java

2014-05-14 Thread stevel
Author: stevel
Date: Thu May  8 16:15:35 2014
New Revision: 1593316

URL: http://svn.apache.org/r1593316
Log:
SLIDER-39 use providerName string to set provider in internal.json

Modified:

incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/client/SliderClient.java

Modified: 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
URL: 
http://svn.apache.org/viewvc/incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/client/SliderClient.java?rev=1593316r1=1593315r2=1593316view=diff
==
--- 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
 (original)
+++ 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
 Thu May  8 16:15:35 2014
@@ -384,9 +384,6 @@ public class SliderClient extends Abstra
   getConfig(),
   clustername);
 
-
-
-
 AggregateConf instanceDefinition = new AggregateConf();
 ConfTreeOperations appConf = instanceDefinition.getAppConfOperations();
 ConfTreeOperations resources = instanceDefinition.getResourceOperations();
@@ -459,7 +456,7 @@ public class SliderClient extends Abstra
 appConf.merge(cmdLineResourceOptions);
 resources.mergeComponents(buildInfo.getResourceCompOptionMap());
 
-builder.init(provider.getName(), instanceDefinition);
+builder.init(providerName, instanceDefinition);
 builder.propagateFilename();
 builder.propagatePrincipals();
 builder.setImageDetails(buildInfo.getImage(), buildInfo.getAppHomeDir());
@@ -508,7 +505,6 @@ public class SliderClient extends Abstra
   throw new BadClusterStateException(Failed to save  + clustername
  + :  + e);
 }
-
   }
   
   public FsPermission getClusterDirectoryPermissions(Configuration conf) {




svn commit: r1594702 - in /incubator/slider/trunk/slider-core/src: main/java/org/apache/slider/providers/agent/AgentProviderService.java test/java/org/apache/slider/providers/agent/TestAgentProviderSe

2014-05-14 Thread jmaron
Author: jmaron
Date: Wed May 14 20:22:42 2014
New Revision: 1594702

URL: http://svn.apache.org/r1594702
Log:
SLIDER-48 reverted some recent changes and accounted for possible NPE

Modified:

incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java

incubator/slider/trunk/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java

Modified: 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
URL: 
http://svn.apache.org/viewvc/incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java?rev=1594702r1=1594701r2=1594702view=diff
==
--- 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
 (original)
+++ 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
 Wed May 14 20:22:42 2014
@@ -23,10 +23,11 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.util.StringUtils;
 import org.apache.hadoop.yarn.api.ApplicationConstants;
 import org.apache.hadoop.yarn.api.records.Container;
-import org.apache.hadoop.yarn.api.records.ContainerId;
 import org.apache.hadoop.yarn.api.records.LocalResource;
 import org.apache.hadoop.yarn.api.records.LocalResourceType;
 import org.apache.slider.api.ClusterDescription;
+import org.apache.slider.api.ClusterDescriptionKeys;
+import org.apache.slider.api.ClusterNode;
 import org.apache.slider.api.OptionKeys;
 import org.apache.slider.api.StatusKeys;
 import org.apache.slider.common.SliderKeys;
@@ -50,7 +51,6 @@ import org.apache.slider.providers.agent
 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.Service;
-import org.apache.slider.server.appmaster.state.RoleInstance;
 import org.apache.slider.server.appmaster.state.StateAccessForProviders;
 import org.apache.slider.server.appmaster.web.rest.agent.AgentCommandType;
 import org.apache.slider.server.appmaster.web.rest.agent.AgentRestOperations;
@@ -74,6 +74,7 @@ import java.net.URI;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
@@ -260,22 +261,11 @@ public class AgentProviderService extend
 getStateAccessor().getPublishedConfigurations().put(name, pubconf);
   }
 
-  protected MapString, MapString, String getRoleClusterNodeMapping() {
-StateAccessForProviders accessor = getStateAccessor();
-assert accessor.isApplicationLive();
-MapContainerId, RoleInstance liveNodes = accessor.getLiveNodes();
-MapString, MapString, String retVal = new HashMap();
-for (ContainerId cid : liveNodes.keySet()) {
-  RoleInstance ri = liveNodes.get(cid);
-  MapString, String containerMap = retVal.get(ri.role);
-  if (containerMap == null) {
-containerMap = new HashMap();
-retVal.put(ri.role, containerMap);
-  }
-  containerMap.put(cid.toString(), ri.host);
-}
-
-return retVal;
+  protected MapString, MapString, ClusterNode getRoleClusterNodeMapping() {
+stateAccessor.refreshClusterStatus();
+return (MapString, MapString, ClusterNode)
+stateAccessor.getClusterStatus().status.get(
+ClusterDescriptionKeys.KEY_CLUSTER_LIVE);
   }
 
   private String getContainerLabel(Container container, String role) {
@@ -459,8 +449,8 @@ public class AgentProviderService extend
 
 // publish export groups if any
 MapString, String replaceTokens = new HashMap();
-for (Map.EntryString, MapString, String entry : 
getRoleClusterNodeMapping().entrySet()) {
-  String hostName = getHostsList(entry.getValue(), 
true).iterator().next();
+for (Map.EntryString, MapString, ClusterNode entry : 
getRoleClusterNodeMapping().entrySet()) {
+  String hostName = getHostsList(entry.getValue().values(), 
true).iterator().next();
   replaceTokens.put(String.format(hostKeyFormat, 
entry.getKey().toUpperCase(Locale.ENGLISH)), hostName);
 }
 
@@ -730,17 +720,18 @@ public class AgentProviderService extend
   }
 
   protected void addRoleRelatedTokens(MapString, String tokens) {
-for (Map.EntryString, MapString, String entry : 
getRoleClusterNodeMapping().entrySet()) {
+for (Map.EntryString, MapString, ClusterNode entry : 
getRoleClusterNodeMapping().entrySet()) {
   String tokenName = entry.getKey().toUpperCase(Locale.ENGLISH) + _HOST;
-  String hosts = StringUtils.join(,, getHostsList(entry.getValue(), 
true));
+  String hosts = StringUtils.join(,, 
getHostsList(entry.getValue().values(), 

svn commit: r1593301 - in /incubator/slider/trunk: slider-core/src/main/java/org/apache/slider/common/tools/ slider-core/src/main/java/org/apache/slider/providers/agent/ slider-core/src/main/java/org/

2014-05-14 Thread stevel
Author: stevel
Date: Thu May  8 14:51:39 2014
New Revision: 1593301

URL: http://svn.apache.org/r1593301
Log:
SLIDER-38 do some minor cleanup of slider code while putting slides together

Modified:

incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java

incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java

incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/appmaster/RoleLaunchService.java

incubator/slider/trunk/slider-providers/hbase/slider-hbase-provider/src/main/java/org/apache/slider/providers/hbase/HBaseKeys.java

incubator/slider/trunk/slider-providers/hbase/slider-hbase-provider/src/main/java/org/apache/slider/providers/hbase/HBaseProviderService.java

incubator/slider/trunk/slider-providers/hbase/slider-hbase-provider/src/test/groovy/org/apache/slider/providers/hbase/HBaseTestUtils.groovy

incubator/slider/trunk/slider-providers/hbase/slider-hbase-provider/src/test/groovy/org/apache/slider/providers/hbase/minicluster/failures/TestKilledAM.groovy

Modified: 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java
URL: 
http://svn.apache.org/viewvc/incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java?rev=1593301r1=1593300r2=1593301view=diff
==
--- 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java
 (original)
+++ 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java
 Thu May  8 14:51:39 2014
@@ -816,7 +816,7 @@ public final class SliderUtils {
   public static MapString, String buildEnvMap(MapString, String roleOpts) {
 MapString, String env = new HashMapString, String();
 if (roleOpts != null) {
-  for (Map.EntryString, String entry:roleOpts.entrySet()) {
+  for (Map.EntryString, String entry: roleOpts.entrySet()) {
 String key = entry.getKey();
 if (key.startsWith(RoleKeys.ENV_PREFIX)) {
   String envName = key.substring(RoleKeys.ENV_PREFIX.length());

Modified: 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
URL: 
http://svn.apache.org/viewvc/incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java?rev=1593301r1=1593300r2=1593301view=diff
==
--- 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
 (original)
+++ 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
 Thu May  8 14:51:39 2014
@@ -156,7 +156,7 @@ public class AgentProviderService extend
 String logDir = ApplicationConstants.Environment.LOG_DIRS.$();
 launcher.setEnv(AGENT_LOG_ROOT, logDir);
 log.info(AGENT_LOG_ROOT set to {}, logDir);
-launcher.setEnv(HADOOP_USER_NAME, System.getenv(HADOOP_USER_NAME));
+launcher.setEnv(HADOOP_USER_NAME, System.getenv(HADOOP_USER_NAME));
 
 //local resources
 

Modified: 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/appmaster/RoleLaunchService.java
URL: 
http://svn.apache.org/viewvc/incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/appmaster/RoleLaunchService.java?rev=1593301r1=1593300r2=1593301view=diff
==
--- 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/appmaster/RoleLaunchService.java
 (original)
+++ 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/appmaster/RoleLaunchService.java
 Thu May  8 14:51:39 2014
@@ -48,6 +48,7 @@ public class RoleLaunchService extends A
* {@value}
*/
   public static final int LAUNCHER_THREAD_SHUTDOWN_TIME = 1;
+  public static final String ROLE_LAUNCH_SERVICE = RoleLaunchService;
   /**
* Map of launched threads.
* These are retained so that at shutdown time the AM can signal
@@ -89,7 +90,8 @@ public class RoleLaunchService extends A
* Thread group for the launchers; gives them all a useful name
* in stack dumps
*/
-  private final ThreadGroup launcherThreadGroup = new ThreadGroup(launcher);
+  private final ThreadGroup launcherThreadGroup = new ThreadGroup(
+  ROLE_LAUNCH_SERVICE);
 
   private MapString, String envVars;
 
@@ -107,7 +109,7 @@ public class RoleLaunchService extends A
SliderFileSystem fs,
Path generatedConfDirPath,
MapString, String envVars, Path 
launcherTmpDirPath) {
-super(RoleLaunchService);
+super(ROLE_LAUNCH_SERVICE);
 containerStarter = startOperation;
 this.fs = fs;
 

svn commit: r1594681 - in /incubator/slider/trunk/slider-core/src: main/java/org/apache/slider/core/registry/docstore/ main/java/org/apache/slider/server/appmaster/web/rest/publisher/ test/groovy/org/

2014-05-14 Thread jmaron
Author: jmaron
Date: Wed May 14 19:22:15 2014
New Revision: 1594681

URL: http://svn.apache.org/r1594681
Log:
SLIDER-51 add ability to retrieve single property from config file (and minor 
method name fix)

Modified:

incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfiguration.java

incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java

incubator/slider/trunk/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/rest/publisher/TestPublisherRestResources.groovy

Modified: 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfiguration.java
URL: 
http://svn.apache.org/viewvc/incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfiguration.java?rev=1594681r1=1594680r2=1594681view=diff
==
--- 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfiguration.java
 (original)
+++ 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfiguration.java
 Wed May 14 19:22:15 2014
@@ -159,7 +159,7 @@ public class PublishedConfiguration {
 return sb.toString();
   }
   
-  public PublishedConfigurationOutputter creatOutputter(ConfigFormat format) {
+  public PublishedConfigurationOutputter createOutputter(ConfigFormat format) {
 return PublishedConfigurationOutputter.createOutputter(format, this);
   }
 }

Modified: 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java
URL: 
http://svn.apache.org/viewvc/incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java?rev=1594681r1=1594680r2=1594681view=diff
==
--- 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java
 (original)
+++ 
incubator/slider/trunk/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java
 Wed May 14 19:22:15 2014
@@ -36,6 +36,9 @@ import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.UriInfo;
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
 import static  org.apache.slider.server.appmaster.web.rest.RestPaths.*;
 
 /**
@@ -136,9 +139,30 @@ public class PublisherResource {
 PublishedConfiguration publishedConfig =
 getConfigurationInstance(config, uriInfo, res);
 PublishedConfigurationOutputter outputter =
-publishedConfig.creatOutputter(format);
+publishedConfig.createOutputter(format);
 return outputter.asString();
   }
 
+  @GET
+  @Path(/{config}/{propertyName})
+  @Produces({MediaType.APPLICATION_JSON})
+  public MapString,String getConfigurationProperty(
+  @PathParam(propertyName) String propertyName,
+  @PathParam(config) String config,
+  @Context UriInfo uriInfo,
+  @Context HttpServletResponse res) {
+PublishedConfiguration publishedConfig =
+getConfigurationInstance(config, uriInfo, res);
+String propVal = publishedConfig.entries.get(propertyName);
+if (propVal == null) {
+  log.info(Configuration property {} not found in configuration {},
+   propertyName, config);
+  throw new NotFoundException(Property not found:  + propertyName);
+}
+MapString,String rtnVal = new HashMap();
+rtnVal.put(propertyName, propVal);
 
+return rtnVal;
+  }
+  
 }

Modified: 
incubator/slider/trunk/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/rest/publisher/TestPublisherRestResources.groovy
URL: 
http://svn.apache.org/viewvc/incubator/slider/trunk/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/rest/publisher/TestPublisherRestResources.groovy?rev=1594681r1=1594680r2=1594681view=diff
==
--- 
incubator/slider/trunk/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/rest/publisher/TestPublisherRestResources.groovy
 (original)
+++ 
incubator/slider/trunk/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/rest/publisher/TestPublisherRestResources.groovy
 Wed May 14 19:22:15 2014
@@ -111,6 +111,10 @@ class TestPublisherRestResources extends
 assert entries.get(prop1).equals(val1)
 assert entries.get(prop2).equals(val2)
 
+webResource = client.resource(publisher_url + /dummy-site/prop1);
+MapString,String val = 
webResource.type(MediaType.APPLICATION_JSON).get(Map.class);
+assert val1.equals(val.get(prop1))
+
 // some negative tests...
 webResource =