Merge branch 'feature/SLIDER-35' into develop
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 8665622..a3c5c8e 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
@@ -2187,7 +2187,7 @@
    * @throws IOException
    * @throws YarnException
    */
-  public List<String> listRegistryInstanceIDs() throws
+  public List<String> listRegistedSliderInstances() throws
       IOException,
       YarnException {
     try {
diff --git a/slider-core/src/main/java/org/apache/slider/core/registry/info/ServiceInstanceData.java b/slider-core/src/main/java/org/apache/slider/core/registry/info/ServiceInstanceData.java
index c4154c0..1d8c561 100644
--- a/slider-core/src/main/java/org/apache/slider/core/registry/info/ServiceInstanceData.java
+++ b/slider-core/src/main/java/org/apache/slider/core/registry/info/ServiceInstanceData.java
@@ -26,7 +26,12 @@
 import java.util.Map;
 
 /**
- * Service instance data to serialize with JSON
+ * Service instance data to serialize with JSON.
+ * 
+ * The equality and hash codes are derived from the
+ * service type and ID, which aren't final so that JSON marshalling
+ * works. Do not change these fields if an instance is stored
+ * in a map
  */
 @JsonIgnoreProperties(ignoreUnknown = true)
 @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@@ -47,11 +52,53 @@
    */
   public RegistryView externalView = new RegistryView();
 
+  public ServiceInstanceData() {
+  }
+
+  public ServiceInstanceData(String id, String serviceType) {
+    this.serviceType = serviceType;
+    this.id = id;
+  }
+
+  /**
+   * Instances are equal if they look after the same service type
+   * and name
+   * @param o other
+   * @return true if id and type match
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+
+    ServiceInstanceData that = (ServiceInstanceData) o;
+
+    if (!id.equals(that.id)) {
+      return false;
+    }
+    if (!serviceType.equals(that.serviceType)) {
+      return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    int result = serviceType.hashCode();
+    result = 31 * result + id.hashCode();
+    return result;
+  }
+
   @Override
   public String toString() {
     final StringBuilder sb =
         new StringBuilder("ServiceInstanceData{");
-    sb.append(", id='").append(id).append('\'');
+    sb.append("id='").append(id).append('\'');
     sb.append(", serviceType='").append(serviceType).append('\'');
     sb.append('}');
     return sb.toString();
diff --git a/slider-core/src/main/java/org/apache/slider/providers/AbstractClientProvider.java b/slider-core/src/main/java/org/apache/slider/providers/AbstractClientProvider.java
index 1ff56a9..f8008a4 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/AbstractClientProvider.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/AbstractClientProvider.java
@@ -63,7 +63,6 @@
 
   /**
    * Validate the instance definition.
-   * @param clusterSpec
    */
   public void validateInstanceDefinition(AggregateConf instanceDefinition) throws
       SliderException {
diff --git a/slider-core/src/main/java/org/apache/slider/providers/AbstractProviderService.java b/slider-core/src/main/java/org/apache/slider/providers/AbstractProviderService.java
index 8d3146a..a06134b 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/AbstractProviderService.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/AbstractProviderService.java
@@ -87,9 +87,9 @@
 
   @Override
   public void bind(StateAccessForProviders stateAccessor,
-      RegistryViewForProviders registry) {
+      RegistryViewForProviders reg) {
     this.amState = stateAccessor;
-    this.registry = registry;
+    this.registry = reg;
   }
 
   @Override
diff --git a/slider-core/src/main/java/org/apache/slider/providers/ProviderRole.java b/slider-core/src/main/java/org/apache/slider/providers/ProviderRole.java
index 7502267..5b85f7b 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/ProviderRole.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/ProviderRole.java
@@ -49,10 +49,7 @@
     }
 
     ProviderRole that = (ProviderRole) o;
-    if (!name.equals(that.name)) {
-      return false;
-    }
-    return true;
+    return name.equals(that.name);
   }
 
   @Override
diff --git a/slider-core/src/main/java/org/apache/slider/providers/ProviderService.java b/slider-core/src/main/java/org/apache/slider/providers/ProviderService.java
index 47a8cc3..8d2462e 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/ProviderService.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/ProviderService.java
@@ -33,7 +33,6 @@
 import org.apache.slider.core.registry.info.ServiceInstanceData;
 import org.apache.slider.server.appmaster.state.StateAccessForProviders;
 import org.apache.slider.server.appmaster.web.rest.agent.AgentRestOperations;
-import org.apache.slider.server.services.curator.RegistryBinderService;
 import org.apache.slider.server.services.registry.RegistryViewForProviders;
 import org.apache.slider.server.services.utility.EventCallback;
 
diff --git a/slider-core/src/main/java/org/apache/slider/providers/ProviderUtils.java b/slider-core/src/main/java/org/apache/slider/providers/ProviderUtils.java
index 4a9cb6d..cb7d27a 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/ProviderUtils.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/ProviderUtils.java
@@ -229,7 +229,7 @@
                                    String configName,
                                    Map<String,String> tokenMap) {
     String prefix = OptionKeys.SITE_XML_PREFIX +
-                    (configName.length() > 0 ? configName + "." : "");
+                    (!configName.isEmpty() ? configName + "." : "");
     for (Map.Entry<String, String> entry : options.entrySet()) {
       String key = entry.getKey();
       if (key.startsWith(prefix)) {
@@ -294,7 +294,7 @@
                                                                  FileNotFoundException {
     String path;
     File scriptFile;
-    if (imagePath!=null) {
+    if (imagePath != null) {
       File tarball = new File(SliderKeys.LOCAL_TARBALL_INSTALL_SUBDIR);
       scriptFile = findBinScriptInExpandedArchive(tarball, bindir, script);
       // now work back from the script to build the relative path
@@ -418,7 +418,7 @@
     }
 
     log.debug("Found {} entries in {}", ls.length, base);
-    List<File> directories = new LinkedList<File>();
+    List<File> directories = new LinkedList<>();
     StringBuilder dirs = new StringBuilder();
     for (File file : ls) {
       log.debug("{}", false);
diff --git a/slider-core/src/main/java/org/apache/slider/providers/SliderProviderFactory.java b/slider-core/src/main/java/org/apache/slider/providers/SliderProviderFactory.java
index 4fc617f..f3bf0b1 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/SliderProviderFactory.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/SliderProviderFactory.java
@@ -87,10 +87,6 @@
       SliderProviderFactory providerFactory = providerClass.newInstance();
       providerFactory.setConf(conf);
       return providerFactory;
-    } catch (InstantiationException e) {
-      ex = e;
-    } catch (IllegalAccessException e) {
-      ex = e;
     } catch (Exception e) {
       ex = e;
     }
diff --git a/slider-core/src/main/java/org/apache/slider/providers/slideram/SliderAMClientProvider.java b/slider-core/src/main/java/org/apache/slider/providers/slideram/SliderAMClientProvider.java
index 66cfeba..9d13707 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/slideram/SliderAMClientProvider.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/slideram/SliderAMClientProvider.java
@@ -87,7 +87,7 @@
    * List of roles
    */
   public static final List<ProviderRole> ROLES =
-    new ArrayList<ProviderRole>();
+    new ArrayList<>();
 
   public static final int KEY_AM = ROLE_AM_PRIORITY_INDEX;
 
@@ -151,7 +151,7 @@
     throws IOException, SliderException {
 
     Map<String, LocalResource> providerResources =
-        new HashMap<String, LocalResource>();
+        new HashMap<>();
 
 
     ProviderUtils.addProviderJar(providerResources,
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
index 25037ea..3f54e27 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
@@ -725,10 +725,9 @@
     List<String> serviceInstancesRunning = registry.instanceIDs(serviceName);
     log.info("service instances already running: {}", serviceInstancesRunning);
 
-    
-    ServiceInstanceData instanceData = new ServiceInstanceData();
-    instanceData.id = registryId;
-    instanceData.serviceType = appServiceType;
+
+    ServiceInstanceData instanceData = new ServiceInstanceData(registryId,
+        appServiceType);
 
 
     // IPC services
@@ -750,10 +749,8 @@
     // push the registration info to ZK
 
     registry.registerSelf(
-        appServiceType,
-        registryId,
-        amWebAPI,
-        instanceData);
+        instanceData, amWebAPI
+    );
   }
 
   /**
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java
index b139f74..e6b2664 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java
@@ -150,7 +150,7 @@
   }
 
   @GET
-  @Path("/" + CONFIG+ ".json")
+  @Path("/" + CONFIG + ".json")
   @Produces({MediaType.APPLICATION_JSON})
   public String getConfigurationContentJson(
       @PathParam("setname") String setname,
diff --git a/slider-core/src/main/java/org/apache/slider/server/services/curator/RegistryBinderService.java b/slider-core/src/main/java/org/apache/slider/server/services/curator/RegistryBinderService.java
index f4bd9bd..14b78a7 100644
--- a/slider-core/src/main/java/org/apache/slider/server/services/curator/RegistryBinderService.java
+++ b/slider-core/src/main/java/org/apache/slider/server/services/curator/RegistryBinderService.java
@@ -108,12 +108,6 @@
     Preconditions.checkNotNull(name, "null `name` arg");
     Preconditions.checkState(isInState(STATE.STARTED), "Not started: " + this);
 
-    if (lookup(id) != null) {
-      throw new BadClusterStateException(
-        "existing entry for service id %s name %s %s",
-        id, name, url);
-    }
-
     ServiceInstanceBuilder<Payload> instanceBuilder = builder()
         .name(name)
         .id(id)
@@ -141,16 +135,6 @@
   }
 
   /**
-   * Get the registered instance by its ID
-   * @param id ID
-   * @return instance or null
-   */
-  public synchronized ServiceInstance<Payload> lookup(String id) {
-    Preconditions.checkNotNull(id, "null `id` arg");
-    return entries.get(id);
-  }
-
-  /**
    * Create a builder. This is already pre-prepared with address, registration
    * time and a (random) UUID
    * @return a builder
@@ -270,6 +254,19 @@
   }
 
   /**
+   * Find a single instance -return that value or raise an exception
+   * @param serviceType service type
+   * @param name the name (required(
+   * @return the instance that matches the criteria
+   * @throws FileNotFoundException if there were no matches
+   * @throws IOException any network problem
+   */
+  public CuratorServiceInstance<Payload> findInstance(String serviceType,
+      String name) throws IOException {
+    Preconditions.checkArgument(StringUtils.isNotEmpty(name), "name");
+    return findInstances(serviceType, name).get(0);
+  }
+  /**
    * List registry entries. If a name was given, then the single match is returned
    * -otherwise all entries matching the service type
    * @param serviceType service type
diff --git a/slider-core/src/main/java/org/apache/slider/server/services/registry/RegistryViewForProviders.java b/slider-core/src/main/java/org/apache/slider/server/services/registry/RegistryViewForProviders.java
index e3d642b..22ba066 100644
--- a/slider-core/src/main/java/org/apache/slider/server/services/registry/RegistryViewForProviders.java
+++ b/slider-core/src/main/java/org/apache/slider/server/services/registry/RegistryViewForProviders.java
@@ -39,15 +39,10 @@
 
   /**
    * Register the service, raising IOExceptions when anything fails
-   * @param serviceType service type
-   * @param instanceName ID -must be unique
-   * @param url URL to register
    * @param instanceData instance data
+   * @param url URL to register
    * @throws IOException on registration problems
    */
   void registerServiceInstance(
-      String serviceType,
-      String instanceName,
-      URL url,
-      ServiceInstanceData instanceData) throws IOException;
+      ServiceInstanceData instanceData, URL url) throws IOException;
 }
diff --git a/slider-core/src/main/java/org/apache/slider/server/services/registry/SliderRegistryService.java b/slider-core/src/main/java/org/apache/slider/server/services/registry/SliderRegistryService.java
index 0d4a357..1904df5 100644
--- a/slider-core/src/main/java/org/apache/slider/server/services/registry/SliderRegistryService.java
+++ b/slider-core/src/main/java/org/apache/slider/server/services/registry/SliderRegistryService.java
@@ -72,29 +72,24 @@
   /**
    * register an instance -only valid once the service is started.
    * This sets the selfRegistration field
-   * @param serviceType service type
-   * @param instanceName ID -must be unique
-   * @param url URL to register
    * @param instanceData instance data
+   * @param url URL to register
    * @throws IOException on registration problems
    */
-  public void registerSelf(String serviceType,
-      String instanceName,
-      URL url,
-      ServiceInstanceData instanceData) throws IOException {
-    registerServiceInstance(serviceType, instanceName, url, instanceData);
+  public void registerSelf(ServiceInstanceData instanceData, URL url) throws IOException {
+    registerServiceInstance(instanceData, url);
     setSelfRegistration(instanceData);
   }
 
   @Override
   public void registerServiceInstance(
-      String serviceType,
-      String instanceName,
-      URL url,
-      ServiceInstanceData instanceData) throws IOException {
+      ServiceInstanceData instanceData, URL url) throws IOException {
     Preconditions.checkNotNull(instanceData);
+    Preconditions.checkNotNull(instanceData.id);
+    Preconditions.checkNotNull(instanceData.serviceType);
+    
     try {
-      register(serviceType, instanceName, url, instanceData);
+      register(instanceData.serviceType, instanceData.id, url, instanceData);
     } catch (IOException e) {
       throw e;
     } catch (Exception e) {
diff --git a/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneAgentAM.groovy b/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneAgentAM.groovy
index 6794327..d700fea 100644
--- a/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneAgentAM.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneAgentAM.groovy
@@ -98,10 +98,10 @@
     describe "service registry names"
     SliderRegistryService registry = client.registry
     def names = registry.getServiceTypes();
-    dumpRegistryNames(names)
+    dumpRegistryServiceTypes(names)
     describe "service registry instance IDs"
 
-    def instanceIds = client.listRegistryInstanceIDs()
+    def instanceIds = client.listRegistedSliderInstances()
 
     log.info("number of instanceIds: ${instanceIds.size()}")
     instanceIds.each { String it -> log.info(it) }
diff --git a/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneRegistryAM.groovy b/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneRegistryAM.groovy
index 7582b72..7639375 100644
--- a/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneRegistryAM.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneRegistryAM.groovy
@@ -115,9 +115,9 @@
     describe "service registry names"
     SliderRegistryService registryService = client.registry
     def serviceTypes = registryService.serviceTypes;
-    dumpRegistryNames(serviceTypes)
+    dumpRegistryServiceTypes(serviceTypes)
 
-    List<String> instanceIds = client.listRegistryInstanceIDs()
+    List<String> instanceIds = client.listRegistedSliderInstances()
 
 
     dumpRegistryInstanceIDs(instanceIds)
diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/rest/publisher/TestPublisherRestResources.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/rest/publisher/TestPublisherRestResources.groovy
index 0100d7a..bc7c79a 100644
--- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/rest/publisher/TestPublisherRestResources.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/rest/publisher/TestPublisherRestResources.groovy
@@ -101,32 +101,35 @@
     Client client = createTestClient();
 
     // test the available GET URIs
-    WebResource webResource = client.resource(publisher_url + "/dummy-site");
+    String sliderConfigset = publisher_url +"/"+ RestPaths.SLIDER_CONFIGSET + "/"
+    WebResource webResource
+    webResource = client.resource(sliderConfigset);
+    webResource = client.resource(sliderConfigset + "dummy-site");
 
     PublishedConfiguration config = webResource.type(MediaType.APPLICATION_JSON)
                           .get(PublishedConfiguration.class);
     assert config != null
     Map<String,String> entries = config.entries
     log.info("entries are {}", entries)
-    assert entries.get("prop1").equals("val1")
-    assert entries.get("prop2").equals("val2")
+    assert entries.get("prop1") =="val1"
+    assert entries.get("prop2")== "val2"
 
-    webResource = client.resource(publisher_url + "/dummy-site/prop1");
+    webResource = client.resource(sliderConfigset + "dummy-site/prop1");
     Map<String,String> val = webResource.type(MediaType.APPLICATION_JSON).get(Map.class);
     assert "val1".equals(val.get("prop1"))
 
     // some negative tests...
-    webResource = client.resource(appendToURL(publisher_url,
-        "/foobar-site"));
+    webResource = client.resource(appendToURL(sliderConfigset,
+        "foobar-site"));
 
     ClientResponse response = webResource.type(MediaType.APPLICATION_JSON)
                          .get(ClientResponse.class);
-    assert response.getStatus() == 404
+    assert 404 == response.status
 
-    webResource = client.resource(publisher_url + "/dummy-site/missing.prop");
+    webResource = client.resource(sliderConfigset + "dummy-site/missing.prop");
     response = webResource.type(MediaType.TEXT_PLAIN).get(ClientResponse.class);
-    assert response.getStatus() == 404
+    assert 404 == response.status
 
- }
+  }
 
 }
diff --git a/slider-core/src/test/groovy/org/apache/slider/test/SliderTestUtils.groovy b/slider-core/src/test/groovy/org/apache/slider/test/SliderTestUtils.groovy
index 8588a53..2045f11 100644
--- a/slider-core/src/test/groovy/org/apache/slider/test/SliderTestUtils.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/test/SliderTestUtils.groovy
@@ -695,14 +695,17 @@
 
   public static void dumpRegistryInstanceIDs(List<String> instanceIds) {
     describe "service registry instance IDs"
-    log.info("number of instanceIds: ${instanceIds.size()}")
-    instanceIds.each { String it -> log.info(it) }
+    dumpCollection(instanceIds)
   }
 
-  public static void dumpRegistryNames(Collection<String> names) {
-    describe "service registry names"
-    log.info("number of names: ${names.size()}")
-    names.each { String it -> log.info(it) }
+  public static void dumpRegistryServiceTypes(Collection<String> entries) {
+    describe "service registry types"
+    dumpCollection(entries)
+  }
+
+  def static void dumpCollection(Collection<String> entries) {
+    log.info("number of entries: ${entries.size()}")
+    entries.each { String it -> log.info(it) }
   }
 
   /**
diff --git a/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/publisher/TestAgentProviderService.java b/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/publisher/TestAgentProviderService.java
index 6aa7732..97199f4 100644
--- a/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/publisher/TestAgentProviderService.java
+++ b/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/publisher/TestAgentProviderService.java
@@ -39,8 +39,8 @@
 
   @Override
   public void bind(StateAccessForProviders stateAccessor,
-                   RegistryViewForProviders registry) {
-    super.bind(stateAccessor, registry);
+                   RegistryViewForProviders reg) {
+    super.bind(stateAccessor, reg);
     Map<String,String> dummyProps = new HashMap<>();
     dummyProps.put("prop1", "val1");
     dummyProps.put("prop2", "val2");
diff --git a/slider-providers/hbase/slider-hbase-provider/src/main/java/org/apache/slider/providers/hbase/HBaseClientProvider.java b/slider-providers/hbase/slider-hbase-provider/src/main/java/org/apache/slider/providers/hbase/HBaseClientProvider.java
index 7627829..7b19dd2 100644
--- a/slider-providers/hbase/slider-hbase-provider/src/main/java/org/apache/slider/providers/hbase/HBaseClientProvider.java
+++ b/slider-providers/hbase/slider-hbase-provider/src/main/java/org/apache/slider/providers/hbase/HBaseClientProvider.java
@@ -107,7 +107,7 @@
 
     MapOperations worker = appconf.getMandatoryComponent(HBaseKeys.ROLE_WORKER);
     
-    Map<String, String> sitexml = new HashMap<String, String>();
+    Map<String, String> sitexml = new HashMap<>();
 
     //map all cluster-wide site. options
     providerUtils.propagateSiteOptions(globalAppOptions, sitexml);
@@ -209,7 +209,7 @@
     }
   }
 
-  private static Set<String> knownRoleNames = new HashSet<String>();
+  private static Set<String> knownRoleNames = new HashSet<>();
   static {
     List<ProviderRole> roles = HBaseRoles.getRoles();
     knownRoleNames.add(SliderKeys.COMPONENT_AM);
@@ -256,7 +256,7 @@
 
     // add any and all dependency files
     Map<String, LocalResource> providerResources =
-        new HashMap<String, LocalResource>();
+        new HashMap<>();
 
     ProviderUtils.addProviderJar(providerResources,
         this,
diff --git a/slider-providers/hbase/slider-hbase-provider/src/main/java/org/apache/slider/providers/hbase/HBaseKeys.java b/slider-providers/hbase/slider-hbase-provider/src/main/java/org/apache/slider/providers/hbase/HBaseKeys.java
index af799c0..1d6ca70 100644
--- a/slider-providers/hbase/slider-hbase-provider/src/main/java/org/apache/slider/providers/hbase/HBaseKeys.java
+++ b/slider-providers/hbase/slider-hbase-provider/src/main/java/org/apache/slider/providers/hbase/HBaseKeys.java
@@ -70,6 +70,10 @@
   String HBASE_GC_OPTS = "SERVER_GC_OPTS";
 
   String PROPAGATED_CONFDIR = "PROPAGATED_CONFDIR";
+
+  /**
+   * Service type used in registry
+   */
   String HBASE_SERVICE_TYPE = "org.apache.hbase";
   String HBASE_SITE_PUBLISHED_CONFIG = "hbase-site";
 }
diff --git a/slider-providers/hbase/slider-hbase-provider/src/main/java/org/apache/slider/providers/hbase/HBaseProviderService.java b/slider-providers/hbase/slider-hbase-provider/src/main/java/org/apache/slider/providers/hbase/HBaseProviderService.java
index 236ec62..fc23970 100644
--- a/slider-providers/hbase/slider-hbase-provider/src/main/java/org/apache/slider/providers/hbase/HBaseProviderService.java
+++ b/slider-providers/hbase/slider-hbase-provider/src/main/java/org/apache/slider/providers/hbase/HBaseProviderService.java
@@ -204,32 +204,25 @@
   @Override
   protected void serviceStart() throws Exception {
     registerHBaseServiceEntry();
-
-
     super.serviceStart();
   }
 
   private void registerHBaseServiceEntry() throws IOException {
 
-    // not a URL, but needed
-    URL hbaseURL = new URL("http://localhost:0");
-    ServiceInstanceData instanceData = new ServiceInstanceData();
+    String name = amState.getApplicationName() ; 
+//    name += ".hbase";
+    ServiceInstanceData instanceData = new ServiceInstanceData(name,
+        HBASE_SERVICE_TYPE);
+    log.info("registering {}/{}", name, HBASE_SERVICE_TYPE );
     PublishedConfiguration publishedSite =
-        new PublishedConfiguration("HBase site",
-            siteConf);
+        new PublishedConfiguration("HBase site", siteConf);
     PublishedConfigSet configSet =
         amState.getOrCreatePublishedConfigSet(HBASE_SERVICE_TYPE);
     instanceData.externalView.configurationsURL = SliderUtils.appendToURL(
         amWebAPI.toExternalForm(), SLIDER_PATH_PUBLISHER, HBASE_SERVICE_TYPE);
-    configSet.put(HBASE_SITE_PUBLISHED_CONFIG,
-        publishedSite);
-    String name = amState.getApplicationName()+".hbase";
-    log.info("registering {}/{}", name, HBASE_SERVICE_TYPE);
-    registry.registerServiceInstance(HBASE_SERVICE_TYPE,
-        name,
-        null,
-        instanceData
-    );
+    configSet.put(HBASE_SITE_PUBLISHED_CONFIG, publishedSite);
+
+    registry.registerServiceInstance(instanceData, null);
   }
 
   /**
diff --git a/slider-providers/hbase/slider-hbase-provider/src/test/groovy/org/apache/slider/providers/hbase/minicluster/live/TestHBaseMaster.groovy b/slider-providers/hbase/slider-hbase-provider/src/test/groovy/org/apache/slider/providers/hbase/minicluster/live/TestHBaseMaster.groovy
index 01996ee..52bc004 100644
--- a/slider-providers/hbase/slider-hbase-provider/src/test/groovy/org/apache/slider/providers/hbase/minicluster/live/TestHBaseMaster.groovy
+++ b/slider-providers/hbase/slider-hbase-provider/src/test/groovy/org/apache/slider/providers/hbase/minicluster/live/TestHBaseMaster.groovy
@@ -80,15 +80,28 @@
     describe "service registry names"
     SliderRegistryService registryService = client.registry
     def names = registryService.getServiceTypes();
-    dumpRegistryNames(names)
+    dumpRegistryServiceTypes(names)
 
     List<CuratorServiceInstance<ServiceInstanceData>> instances =
         client.listRegistryInstances();
-    def hbaseService = registryService.findByID(
-        instances,
-        HBaseKeys.HBASE_SERVICE_TYPE)
+
+    def hbaseInstances = registryService.findInstances( HBaseKeys.HBASE_SERVICE_TYPE, null)
+    assert hbaseInstances.size() == 1
+    def hbaseService = hbaseInstances[0]
     assert hbaseService
-    RegistryRetriever retriever = new RegistryRetriever(hbaseService.payload)
+    def hbaseServiceData = hbaseService.payload
+    log.info "HBase service 0 == $hbaseServiceData"
+    assert hbaseServiceData.id 
+    assert hbaseServiceData.serviceType == HBaseKeys.HBASE_SERVICE_TYPE
+
+    hbaseInstances = registryService.findInstances(
+        HBaseKeys.HBASE_SERVICE_TYPE,
+        clustername)
+    assert hbaseInstances.size() == 1
+    def hbaseServiceData2 = hbaseInstances[0].payload
+    assert hbaseServiceData == hbaseServiceData2
+
+    RegistryRetriever retriever = new RegistryRetriever(hbaseServiceData)
     log.info retriever.toString()
     assert retriever.hasConfigurations(true)
     PublishedConfigSet externalConfSet = retriever.getConfigurations(true)
diff --git a/slider-providers/hbase/slider-hbase-provider/src/test/groovy/org/apache/slider/providers/hbase/minicluster/live/TestTwoLiveClusters.groovy b/slider-providers/hbase/slider-hbase-provider/src/test/groovy/org/apache/slider/providers/hbase/minicluster/live/TestTwoLiveClusters.groovy
index dba52ba..a58f99a 100644
--- a/slider-providers/hbase/slider-hbase-provider/src/test/groovy/org/apache/slider/providers/hbase/minicluster/live/TestTwoLiveClusters.groovy
+++ b/slider-providers/hbase/slider-hbase-provider/src/test/groovy/org/apache/slider/providers/hbase/minicluster/live/TestTwoLiveClusters.groovy
@@ -22,6 +22,7 @@
 import groovy.util.logging.Slf4j
 import org.apache.slider.common.params.Arguments
 import org.apache.slider.client.SliderClient
+import org.apache.slider.providers.hbase.HBaseKeys
 import org.apache.slider.providers.hbase.minicluster.HBaseMiniClusterTestBase
 import org.apache.slider.core.main.ServiceLauncher
 import org.apache.slider.core.registry.info.ServiceInstanceData
@@ -41,8 +42,10 @@
    */
   @Test
   public void testTwoLiveClusters() throws Throwable {
-    createMiniCluster("TestTwoLiveClusters", configuration, 1, true)
-    String clustername1 = "testtwoliveclusters-a"
+    def name = "test_two_live_clusters"
+    createMiniCluster(name, configuration, 1, true)
+
+    String clustername1 = name + "-1"
     //now launch the cluster
     int regionServerCount = 1
     ServiceLauncher<SliderClient> launcher = createHBaseCluster(clustername1, regionServerCount, [], true, true) 
@@ -59,7 +62,7 @@
     waitForHBaseRegionServerCount(sliderClient, clustername1, 1, hbaseClusterStartupToLiveTime)
 
     //now here comes cluster #2
-    String clustername2 = "testtwoliveclusters-b"
+    String clustername2 = name + "-2"
 
 
     String zkpath = "/$clustername2"
@@ -83,21 +86,30 @@
     describe "service registry names"
     SliderRegistryService registry = cluster2Client.registry
     def names = registry.getServiceTypes();
-    dumpRegistryNames(names)
+    dumpRegistryServiceTypes(names)
 
-    List<String> instanceIds = sliderClient.listRegistryInstanceIDs()
+    List<String> instanceIds = sliderClient.listRegistedSliderInstances()
 
 
     dumpRegistryInstanceIDs(instanceIds)
-    assert names.size() == 1
+    assert names.size() == 2
     assert instanceIds.size() == 2
 
 
-    List<CuratorServiceInstance<ServiceInstanceData>> instances = sliderClient.listRegistryInstances(
-    )
+    List<CuratorServiceInstance<ServiceInstanceData>> instances =
+        sliderClient.listRegistryInstances()
     dumpRegistryInstances(instances)
     assert instances.size() == 2
 
+    def hbaseInstances = registry.findInstances(
+        HBaseKeys.HBASE_SERVICE_TYPE, null)
+    assert hbaseInstances.size() == 2
+    def hbase1ServiceData = registry.findInstance(
+        HBaseKeys.HBASE_SERVICE_TYPE, clustername1).payload
+    def hbase2ServiceData = registry.findInstance(
+        HBaseKeys.HBASE_SERVICE_TYPE, clustername2).payload
+    assert !(hbase1ServiceData == hbase2ServiceData)
+
     clusterActionFreeze(cluster2Client, clustername2,"freeze cluster 2")
     clusterActionFreeze(sliderClient, clustername1,"Freeze cluster 1")