SLIDER-320 add unregister operation, rename PublishRegistryDetails. AM queues an unregister on container completion
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/01c7390e Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/01c7390e Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/01c7390e Branch: refs/heads/feature/SLIDER-151_REST_API Commit: 01c7390e52fedc9ac32123a9ddd1fc0f2d0f12b7 Parents: 31bfae2 Author: Steve Loughran <ste...@apache.org> Authored: Fri Aug 15 15:33:26 2014 +0100 Committer: Steve Loughran <ste...@apache.org> Committed: Fri Aug 15 15:33:26 2014 +0100 ---------------------------------------------------------------------- .../providers/agent/AgentProviderService.java | 4 +- .../server/appmaster/SliderAppMaster.java | 24 ++++++---- .../actions/PublishRegistryDetails.java | 44 ------------------ .../actions/RegisterComponentInstance.java | 48 ++++++++++++++++++++ .../actions/UnregisterComponentInstance.java | 46 +++++++++++++++++++ 5 files changed, 111 insertions(+), 55 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/01c7390e/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 680074d..60c99ac 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 @@ -63,7 +63,7 @@ import org.apache.slider.providers.agent.application.metadata.Metainfo; import org.apache.slider.providers.agent.application.metadata.OSPackage; import org.apache.slider.providers.agent.application.metadata.OSSpecific; import org.apache.slider.server.appmaster.actions.ProviderReportedContainerLoss; -import org.apache.slider.server.appmaster.actions.PublishRegistryDetails; +import org.apache.slider.server.appmaster.actions.RegisterComponentInstance; import org.apache.slider.server.appmaster.state.ContainerPriority; import org.apache.slider.server.appmaster.state.RoleInstance; import org.apache.slider.server.appmaster.state.StateAccessForProviders; @@ -572,7 +572,7 @@ public class AgentProviderService extends AbstractProviderService implements // and update registration entries if (instance != null) { - queueAccess.put(new PublishRegistryDetails(instance.getId(), 0, + queueAccess.put(new RegisterComponentInstance(instance.getId(), 0, TimeUnit.MILLISECONDS)); } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/01c7390e/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 c54a268..93adfb2 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 @@ -98,7 +98,7 @@ import org.apache.slider.providers.SliderProviderFactory; import org.apache.slider.providers.slideram.SliderAMClientProvider; import org.apache.slider.providers.slideram.SliderAMProviderService; import org.apache.slider.server.appmaster.actions.ActionKillContainer; -import org.apache.slider.server.appmaster.actions.PublishRegistryDetails; +import org.apache.slider.server.appmaster.actions.RegisterComponentInstance; import org.apache.slider.server.appmaster.actions.QueueExecutor; import org.apache.slider.server.appmaster.actions.ActionHalt; import org.apache.slider.server.appmaster.actions.QueueService; @@ -106,6 +106,7 @@ import org.apache.slider.server.appmaster.actions.ActionStopSlider; import org.apache.slider.server.appmaster.actions.AsyncAction; import org.apache.slider.server.appmaster.actions.RenewingAction; import org.apache.slider.server.appmaster.actions.ResetFailureWindow; +import org.apache.slider.server.appmaster.actions.UnregisterComponentInstance; import org.apache.slider.server.appmaster.monkey.ChaosKillAM; import org.apache.slider.server.appmaster.monkey.ChaosKillContainer; import org.apache.slider.server.appmaster.monkey.ChaosMonkeyService; @@ -910,11 +911,22 @@ public class SliderAppMaster extends AbstractSliderLaunchedService return false; } // this is where component registrations will go + log.info("Registering component {}", id); return true; } /** + * unregister a component. At the time this message is received, + * the component may already been deleted from/never added to + * the app state + * @param id the component + */ + public void unregisterComponent(ContainerId id) { + log.info("Unregistering component {}", id); + } + + /** * looks for a specific case where a token file is provided as an environment * variable, yet the file is not there. * @@ -1178,15 +1190,9 @@ public class SliderAppMaster extends AbstractSliderLaunchedService } getProviderService().notifyContainerCompleted(containerId); + queue(new UnregisterComponentInstance(containerId, 0, TimeUnit.MILLISECONDS)); } - // ask for more containers if any failed - // In the case of Slider, we don't expect containers to complete since - // Slider is a long running application. Keep track of how many containers - // are completing. If too many complete, abort the application - // TODO: this needs to be better thought about (and maybe something to - // better handle in Yarn for long running apps) - try { reviewRequestAndReleaseNodes(); } catch (SliderInternalStateException e) { @@ -1681,7 +1687,7 @@ public class SliderAppMaster extends AbstractSliderLaunchedService nmClientAsync.getContainerStatusAsync(containerId, cinfo.container.getNodeId()); // push out a registration - queue(new PublishRegistryDetails(containerId, 0, TimeUnit.MILLISECONDS)); + queue(new RegisterComponentInstance(containerId, 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/01c7390e/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/PublishRegistryDetails.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/PublishRegistryDetails.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/PublishRegistryDetails.java deleted file mode 100644 index cb6d140..0000000 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/PublishRegistryDetails.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.slider.server.appmaster.actions; - -import org.apache.hadoop.yarn.api.records.ContainerId; -import org.apache.slider.server.appmaster.SliderAppMaster; -import org.apache.slider.server.appmaster.state.AppState; - -import java.util.concurrent.TimeUnit; - -public class PublishRegistryDetails extends AsyncAction { - - - public final ContainerId containerId; - - public PublishRegistryDetails(ContainerId containerId, long delay, - TimeUnit timeUnit) { - super("PublishRegistryDetails :" + containerId.toString(), - delay, timeUnit); - this.containerId = containerId; - } - - @Override - public void execute(SliderAppMaster appMaster, - QueueAccess queueService, - AppState appState) throws Exception { - } -} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/01c7390e/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 new file mode 100644 index 0000000..a8a6fe2 --- /dev/null +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/RegisterComponentInstance.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.slider.server.appmaster.actions; + +import com.google.common.base.Preconditions; +import org.apache.hadoop.yarn.api.records.ContainerId; +import org.apache.slider.server.appmaster.SliderAppMaster; +import org.apache.slider.server.appmaster.state.AppState; + +import java.util.concurrent.TimeUnit; + +public class RegisterComponentInstance extends AsyncAction { + + + public final ContainerId containerId; + + public RegisterComponentInstance(ContainerId containerId, long delay, + TimeUnit timeUnit) { + super("RegisterComponentInstance :" + containerId, + delay, timeUnit); + Preconditions.checkArgument(containerId != null); + this.containerId = containerId; + } + + @Override + public void execute(SliderAppMaster appMaster, + QueueAccess queueService, + AppState appState) throws Exception { + + appMaster.registerComponent(containerId); + } +} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/01c7390e/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/UnregisterComponentInstance.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/UnregisterComponentInstance.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/UnregisterComponentInstance.java new file mode 100644 index 0000000..78d9c1c --- /dev/null +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/UnregisterComponentInstance.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.slider.server.appmaster.actions; + +import org.apache.hadoop.yarn.api.records.ContainerId; +import org.apache.slider.server.appmaster.SliderAppMaster; +import org.apache.slider.server.appmaster.state.AppState; + +import java.util.concurrent.TimeUnit; + +public class UnregisterComponentInstance extends AsyncAction { + + + public final ContainerId containerId; + + public UnregisterComponentInstance(ContainerId containerId, long delay, + TimeUnit timeUnit) { + super("UnregisterComponentInstance :" + containerId.toString(), + delay, timeUnit); + this.containerId = containerId; + } + + @Override + public void execute(SliderAppMaster appMaster, + QueueAccess queueService, + AppState appState) throws Exception { + appMaster.unregisterComponent(containerId); + + } +}