SLIDER-1183 Slider AM should not kill application if onError is called
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 1337ec5..55431fc 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
@@ -131,6 +131,7 @@
import org.apache.slider.providers.agent.AgentProviderService;
import org.apache.slider.providers.slideram.SliderAMClientProvider;
import org.apache.slider.providers.slideram.SliderAMProviderService;
+import org.apache.slider.server.appmaster.actions.ActionHalt;
import org.apache.slider.server.appmaster.actions.ActionRegisterServiceInstance;
import org.apache.slider.server.appmaster.actions.EscalateOutstandingRequests;
import org.apache.slider.server.appmaster.actions.RegisterComponentInstance;
@@ -2061,11 +2062,21 @@
@Override //AMRMClientAsync
public void onError(Throwable e) {
- // callback says it's time to finish
- LOG_YARN.error("AMRMClientAsync.onError() received {}", e, e);
- signalAMComplete(new ActionStopSlider("stop", EXIT_EXCEPTION_THROWN,
- FinalApplicationStatus.FAILED,
- SliderUtils.extractFirstLine(e.getLocalizedMessage())));
+ if (e instanceof InvalidResourceRequestException) {
+ // stop the cluster
+ LOG_YARN.error("AMRMClientAsync.onError() received {}", e, e);
+ signalAMComplete(new ActionStopSlider("stop", EXIT_EXCEPTION_THROWN,
+ FinalApplicationStatus.FAILED,
+ SliderUtils.extractFirstLine(e.getLocalizedMessage())));
+ } else if (e instanceof InvalidApplicationMasterRequestException) {
+ // halt the AM
+ LOG_YARN.error("AMRMClientAsync.onError() received {}", e, e);
+ queue(new ActionHalt(EXIT_EXCEPTION_THROWN,
+ SliderUtils.extractFirstLine(e.getLocalizedMessage())));
+ } else {
+ // ignore and log
+ LOG_YARN.info("Ignoring AMRMClientAsync.onError() received {}", e);
+ }
}
/* =================================================================== */
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/ActionHalt.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/ActionHalt.java
index e2ad559..ee1bb72 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/ActionHalt.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/ActionHalt.java
@@ -35,6 +35,12 @@
public ActionHalt(
int status,
+ String text) {
+ this(status, text, 0, TimeUnit.MILLISECONDS);
+ }
+
+ public ActionHalt(
+ int status,
String text,
long delay, TimeUnit timeUnit) {