SLIDER-453 AM queue processing goes live before init complete
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/77ca3c27 Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/77ca3c27 Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/77ca3c27 Branch: refs/heads/develop Commit: 77ca3c27acd5d0f3c683fc9be2556db827a3637b Parents: b26863a Author: Steve Loughran <ste...@apache.org> Authored: Tue Sep 23 21:59:01 2014 +0100 Committer: Steve Loughran <ste...@apache.org> Committed: Tue Sep 23 21:59:01 2014 +0100 ---------------------------------------------------------------------- .../server/appmaster/SliderAppMaster.java | 29 ++++++++++++++++++-- .../slider/server/appmaster/state/AppState.java | 5 +++- 2 files changed, 30 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/77ca3c27/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 fd7c360..2fa8342 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 @@ -291,6 +291,11 @@ public class SliderAppMaster extends AbstractSliderLaunchedService */ private final AtomicBoolean amCompletionFlag = new AtomicBoolean(false); + /** + * Flag set during the init process + */ + private final AtomicBoolean initCompleted = new AtomicBoolean(false); + private volatile boolean success = true; /** @@ -434,11 +439,18 @@ public class SliderAppMaster extends AbstractSliderLaunchedService @Override protected void serviceStart() throws Exception { super.serviceStart(); + } + + /** + * Start the queue processing + */ + private void startQueueProcessing() { + log.info("Queue Processing started"); executorService.execute(actionQueues); executorService.execute(new QueueExecutor(this, actionQueues)); } - /* =================================================================== */ +/* =================================================================== */ /* RunService methods called from ServiceLauncher */ /* =================================================================== */ @@ -822,7 +834,15 @@ public class SliderAppMaster extends AbstractSliderLaunchedService // now do the registration registerServiceInstance(clustername, appid); + // declare the cluster initialized + log.info("Application Master Initialization Completed"); + initCompleted.set(true); + + // start handling any scheduled events + + startQueueProcessing(); // Start the Slider AM provider + sliderAMProvider.start(); // launch the real provider; this is expected to trigger a callback that @@ -1312,8 +1332,11 @@ public class SliderAppMaster extends AbstractSliderLaunchedService log.error("Role instance {} failed ", ri); } - getProviderService().notifyContainerCompleted(containerId); - queue(new UnregisterComponentInstance(containerId, 0, TimeUnit.MILLISECONDS)); + // known nodes trigger notifications + if(!result.unknownNode) { + getProviderService().notifyContainerCompleted(containerId); + queue(new UnregisterComponentInstance(containerId, 0, TimeUnit.MILLISECONDS)); + } } reviewRequestAndReleaseNodes("onContainersCompleted"); http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/77ca3c27/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java index 57952e7..abb6fe8 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java @@ -1256,13 +1256,14 @@ public class AppState { } /** - * This is a very small class to send a triple result back from + * This is a very small class to send a multiple result back from * the completion operation */ public static class NodeCompletionResult { public boolean surplusNode = false; public RoleInstance roleInstance; public boolean containerFailed; + public boolean unknownNode = false; public String toString() { @@ -1271,6 +1272,7 @@ public class AppState { sb.append("surplusNode=").append(surplusNode); sb.append(", roleInstance=").append(roleInstance); sb.append(", containerFailed=").append(containerFailed); + sb.append(", unknownNode=").append(unknownNode); sb.append('}'); return sb.toString(); } @@ -1354,6 +1356,7 @@ public class AppState { log.error("Notified of completed container {} that is not in the list" + " of active or failed containers", containerId); completionOfUnknownContainerEvent.incrementAndGet(); + result.unknownNode = true; } }