Przeglądaj źródła

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

Change-Id: I73d73f3d631b28fb9866faa56571839b13824a97
(cherry picked from commit 9fba6cc2471db8df9ca6da7b9df378e3072dfeb2)
Wangda Tan 6 lat temu
rodzic
commit
29e4e5f62c

+ 20 - 4
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-submarine/src/main/java/org/apache/hadoop/yarn/submarine/runtimes/yarnservice/YarnServiceJobSubmitter.java

@@ -866,10 +866,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();