SLIDER-249 in sync with current YARN-913
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/428f3a78 Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/428f3a78 Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/428f3a78 Branch: refs/heads/feature/SLIDER-149_Support_a_YARN_service_registry Commit: 428f3a78fb418b96b9071ef96fa5365c21fe92be Parents: 0c05abe Author: Steve Loughran <ste...@apache.org> Authored: Mon Aug 25 19:31:09 2014 +0100 Committer: Steve Loughran <ste...@apache.org> Committed: Mon Aug 25 19:31:09 2014 +0100 ---------------------------------------------------------------------- .../providers/agent/AgentProviderService.java | 5 ++- .../server/appmaster/SliderAppMaster.java | 34 +++++++++++++++----- .../actions/RegisterComponentInstance.java | 9 ++++-- .../YarnRegistryViewForProviders.java | 6 ++++ 4 files changed, 40 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/428f3a78/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java index f78d468..bd83d28 100644 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java @@ -95,7 +95,6 @@ import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -583,8 +582,8 @@ public class AgentProviderService extends AbstractProviderService implements // and update registration entries if (instance != null) { - queueAccess.put(new RegisterComponentInstance(instance.getId(), 0, - TimeUnit.MILLISECONDS)); + queueAccess.put(new RegisterComponentInstance(instance.getId(), + roleName, 0, TimeUnit.MILLISECONDS)); } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/428f3a78/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java ---------------------------------------------------------------------- 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 835ef06..f28bd8f 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 @@ -365,6 +365,7 @@ public class SliderAppMaster extends AbstractSliderLaunchedService private final QueueService actionQueues = new QueueService(); private String agentOpsUrl; private String agentStatusUrl; + private YarnRegistryViewForProviders yarnRegistryView; /** * Service Constructor @@ -895,11 +896,10 @@ public class SliderAppMaster extends AbstractSliderLaunchedService //Give the provider restricted access to the state, registry setupInitialRegistryPaths(); - YarnRegistryViewForProviders yarnRegistryView = - new YarnRegistryViewForProviders( - registryOperations, service_user_name, - SliderKeys.APP_TYPE, - instanceName); + yarnRegistryView = new YarnRegistryViewForProviders( + registryOperations, service_user_name, + SliderKeys.APP_TYPE, + instanceName); providerService.bindToYarnRegistry(yarnRegistryView); sliderAMProvider.bindToYarnRegistry(yarnRegistryView); @@ -978,15 +978,26 @@ public class SliderAppMaster extends AbstractSliderLaunchedService * Handler for {@link RegisterComponentInstance action} * Register/re-register a component (that is already in the app state * @param id the component + * @param description */ - public boolean registerComponent(ContainerId id) { + public boolean registerComponent(ContainerId id, String description) throws + IOException { RoleInstance instance = appState.getOwnedContainer(id); if (instance == null) { return false; } // this is where component registrations will go log.info("Registering component {}", id); - + String cid = RegistryTypeUtils.yarnIdToDnsId(id.toString()); + ServiceRecord container = new ServiceRecord( + cid, + description); + try { + yarnRegistryView.putComponent(cid, container, true); + } catch (IOException e) { + log.warn("Failed to register container {}/{}: {}", + id, description, e, e); + } return true; } @@ -1000,6 +1011,12 @@ public class SliderAppMaster extends AbstractSliderLaunchedService */ public void unregisterComponent(ContainerId id) { log.info("Unregistering component {}", id); + String cid = RegistryTypeUtils.yarnIdToDnsId(id.toString()); + try { + yarnRegistryView.rmComponent(cid); + } catch (IOException e) { + log.warn("Failed to delete container {} : {}", id, e, e); + } } /** @@ -1763,7 +1780,8 @@ public class SliderAppMaster extends AbstractSliderLaunchedService nmClientAsync.getContainerStatusAsync(containerId, cinfo.container.getNodeId()); // push out a registration - queue(new RegisterComponentInstance(containerId, 0, TimeUnit.MILLISECONDS)); + queue(new RegisterComponentInstance(containerId, cinfo.role, + 0, TimeUnit.MILLISECONDS)); } else { //this is a hypothetical path not seen. We react by warning http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/428f3a78/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/RegisterComponentInstance.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/RegisterComponentInstance.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/RegisterComponentInstance.java index a8a6fe2..61bf5dd 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/RegisterComponentInstance.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/RegisterComponentInstance.java @@ -26,14 +26,17 @@ import org.apache.slider.server.appmaster.state.AppState; import java.util.concurrent.TimeUnit; public class RegisterComponentInstance extends AsyncAction { - public final ContainerId containerId; + public final String description; - public RegisterComponentInstance(ContainerId containerId, long delay, + public RegisterComponentInstance(ContainerId containerId, + String description, + long delay, TimeUnit timeUnit) { super("RegisterComponentInstance :" + containerId, delay, timeUnit); + this.description = description; Preconditions.checkArgument(containerId != null); this.containerId = containerId; } @@ -43,6 +46,6 @@ public class RegisterComponentInstance extends AsyncAction { QueueAccess queueService, AppState appState) throws Exception { - appMaster.registerComponent(containerId); + appMaster.registerComponent(containerId, description); } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/428f3a78/slider-core/src/main/java/org/apache/slider/server/services/yarnregistry/YarnRegistryViewForProviders.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/services/yarnregistry/YarnRegistryViewForProviders.java b/slider-core/src/main/java/org/apache/slider/server/services/yarnregistry/YarnRegistryViewForProviders.java index adf15b0..69802e8 100644 --- a/slider-core/src/main/java/org/apache/slider/server/services/yarnregistry/YarnRegistryViewForProviders.java +++ b/slider-core/src/main/java/org/apache/slider/server/services/yarnregistry/YarnRegistryViewForProviders.java @@ -117,4 +117,10 @@ public class YarnRegistryViewForProviders { } + public void rmComponent(String componentName) throws IOException { + String path = BindingUtils.componentPath( + user, sliderServiceclass, instanceName, + componentName); + registryOperations.delete(path, false); + } }