YARN-9112. [Submarine] Support polling applicationId when it's not ready in cluster. (Zhankun Tang via wangda)

Change-Id: I73d73f3d631b28fb9866faa56571839b13824a97
This commit is contained in:
Wangda Tan 2018-12-12 11:44:58 -08:00
parent 61bdcb7b2b
commit 9fba6cc247
1 changed files with 20 additions and 4 deletions

View File

@ -865,10 +865,26 @@ public class YarnServiceJobSubmitter implements JobSubmitter {
}
String appStatus=appAdminClient.getStatusString(serviceSpec.getName());
Service app=ServiceApiUtil.jsonSerDeser.fromJson(appStatus);
if(app.getId() == null) {
throw new YarnException("Can't get application id for Service " +
serviceSpec.getName());
Service app = ServiceApiUtil.jsonSerDeser.fromJson(appStatus);
// Retry multiple times if applicationId is null
int maxRetryTimes = 30;
int count = 0;
while (app.getId() == null && count < maxRetryTimes) {
LOG.info("Waiting for application Id. AppStatusString=\n {}", appStatus);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new IOException(e);
}
appStatus = appAdminClient.getStatusString(serviceSpec.getName());
app = ServiceApiUtil.jsonSerDeser.fromJson(appStatus);
count++;
}
// Retry timeout
if (app.getId() == null) {
throw new YarnException(
"Can't get application id for Service " + serviceSpec.getName());
}
ApplicationId appid = ApplicationId.fromString(app.getId());
appAdminClient.stop();