diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/providers/ProviderUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/providers/ProviderUtils.java index beeaa55..d1ee212 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/providers/ProviderUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/providers/ProviderUtils.java @@ -503,7 +503,8 @@ public void addComponentHostTokens(Map tokens, */ public void updateServiceRecord(StateAccessForProviders amState, YarnRegistryViewForProviders yarnRegistry, - String containerId, String roleName, List ip, String hostname) { + String containerId, String roleName, List ip, String hostname) + throws IOException { try { RoleInstance role = null; if(ip != null && !ip.isEmpty()){ @@ -516,8 +517,9 @@ public void updateServiceRecord(StateAccessForProviders amState, } if (role != null) { // create and publish updated service record (including hostname & ip) + String cid = RegistryPathUtils.encodeYarnID(containerId); ServiceRecord record = new ServiceRecord(); - record.set(YarnRegistryAttributes.YARN_ID, containerId); + record.set(YarnRegistryAttributes.YARN_ID, cid); String componentInstanceName = role.getCompInstanceName(); record.description = componentInstanceName.replaceAll("_", "-"); record.set(YarnRegistryAttributes.YARN_PERSISTENCE, @@ -529,15 +531,11 @@ public void updateServiceRecord(StateAccessForProviders amState, if (role.hostname != null) { record.set("yarn:hostname", role.hostname); } - yarnRegistry.putComponent( - RegistryPathUtils.encodeYarnID(containerId), record); + yarnRegistry.putComponent(cid, record); } } catch (NoSuchNodeException e) { // ignore - there is nothing to do if we don't find a container log.warn("Owned container {} not found - {}", containerId, e); - } catch (IOException e) { - log.warn("Error updating container {} service record in registry", - containerId, e); } } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/providers/docker/DockerProviderService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/providers/docker/DockerProviderService.java index 12c2b04..a48bf83 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/providers/docker/DockerProviderService.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/providers/docker/DockerProviderService.java @@ -146,8 +146,15 @@ public boolean processContainerStatus(ContainerId containerId, return false; } - providerUtils.updateServiceRecord(amState, yarnRegistry, - containerId.toString(), instance.role, status.getIPs(), status.getHost()); + try { + providerUtils.updateServiceRecord(amState, yarnRegistry, + containerId.toString(), instance.role, status.getIPs(), status.getHost()); + } catch (IOException e) { + // could not write service record to ZK, log and retry + log.warn("Error updating container {} service record in registry, " + + "retrying", containerId, e); + return true; + } // TODO publish ip and host org.apache.slider.api.resource.Container container = instance.providerRole.component.getContainer(containerId.toString()); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java index ae03b45..02c9198 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java @@ -1182,24 +1182,8 @@ public boolean registerComponent(ContainerId id, RoleInstance roleInstance) return false; } // this is where component registrations go - String cid = RegistryPathUtils.encodeYarnID(id.toString()); - ServiceRecord record = new ServiceRecord(); - record.set(YarnRegistryAttributes.YARN_ID, cid); - - record.description = roleInstance.getCompInstanceName(); log.info("Registering component " + roleInstance.getCompInstanceName() + ", containerId = " + id); - record.set(YarnRegistryAttributes.YARN_PERSISTENCE, - PersistencePolicies.CONTAINER); - setUserProvidedServiceRecordAttributes( - instance.providerRole.component.getConfiguration(), record); - try { - yarnRegistryOperations.putComponent(cid, record); - } catch (IOException e) { - log.warn("Failed to register container {}/{}: {}", - id, roleInstance.role, e, e); - return false; - } org.apache.slider.api.resource.Container container = new org.apache.slider.api.resource.Container(); container.setId(id.toString());