YARN-6533. Race condition in writing service record to registry in yarn native services. Contributed by Billie Rinaldi
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/8ad5432b Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/8ad5432b Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/8ad5432b Branch: refs/heads/yarn-native-services Commit: 8ad5432ba9a6803f63e8ebe171372cdb76443ba1 Parents: 0d9690f Author: Jian He <[email protected]> Authored: Thu May 11 09:23:54 2017 -0700 Committer: Jian He <[email protected]> Committed: Tue Jul 25 10:49:25 2017 -0700 ---------------------------------------------------------------------- .../org/apache/slider/providers/ProviderUtils.java | 6 ++---- .../providers/docker/DockerProviderService.java | 11 +++++++++-- .../slider/server/appmaster/SliderAppMaster.java | 16 ---------------- 3 files changed, 11 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/8ad5432b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/providers/ProviderUtils.java ---------------------------------------------------------------------- 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..d58ecaa 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 class ProviderUtils implements RoleKeys, SliderKeys { */ public void updateServiceRecord(StateAccessForProviders amState, YarnRegistryViewForProviders yarnRegistry, - String containerId, String roleName, List<String> ip, String hostname) { + String containerId, String roleName, List<String> ip, String hostname) + throws IOException { try { RoleInstance role = null; if(ip != null && !ip.isEmpty()){ @@ -535,9 +536,6 @@ public class ProviderUtils implements RoleKeys, SliderKeys { } 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); } } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/8ad5432b/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 ---------------------------------------------------------------------- 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 class DockerProviderService extends AbstractService 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()); http://git-wip-us.apache.org/repos/asf/hadoop/blob/8ad5432b/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 ---------------------------------------------------------------------- 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 class SliderAppMaster extends AbstractSliderLaunchedService 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()); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
