瀏覽代碼

YARN-6647. RM can crash during transitionToStandby due to InterruptedException. Contributed by Bibin A Chundatt

(cherry picked from commit a2c7a73e33045ce42cce19aacbe45c0421a61994)
Jason Lowe 7 年之前
父節點
當前提交
e03725c262

+ 29 - 13
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/security/RMDelegationTokenSecretManager.java

@@ -82,14 +82,21 @@ public class RMDelegationTokenSecretManager extends
     return new RMDelegationTokenIdentifier();
   }
 
+  private boolean shouldIgnoreException(Exception e) {
+    return !running && e.getCause() instanceof InterruptedException;
+  }
+
   @Override
   protected void storeNewMasterKey(DelegationKey newKey) {
     try {
       LOG.info("storing master key with keyID " + newKey.getKeyId());
       rm.getRMContext().getStateStore().storeRMDTMasterKey(newKey);
     } catch (Exception e) {
-      LOG.error("Error in storing master key with KeyID: " + newKey.getKeyId());
-      ExitUtil.terminate(1, e);
+      if (!shouldIgnoreException(e)) {
+        LOG.error(
+            "Error in storing master key with KeyID: " + newKey.getKeyId());
+        ExitUtil.terminate(1, e);
+      }
     }
   }
 
@@ -99,8 +106,10 @@ public class RMDelegationTokenSecretManager extends
       LOG.info("removing master key with keyID " + key.getKeyId());
       rm.getRMContext().getStateStore().removeRMDTMasterKey(key);
     } catch (Exception e) {
-      LOG.error("Error in removing master key with KeyID: " + key.getKeyId());
-      ExitUtil.terminate(1, e);
+      if (!shouldIgnoreException(e)) {
+        LOG.error("Error in removing master key with KeyID: " + key.getKeyId());
+        ExitUtil.terminate(1, e);
+      }
     }
   }
 
@@ -113,9 +122,11 @@ public class RMDelegationTokenSecretManager extends
       rm.getRMContext().getStateStore().storeRMDelegationToken(identifier,
           renewDate);
     } catch (Exception e) {
-      LOG.error("Error in storing RMDelegationToken with sequence number: "
-          + identifier.getSequenceNumber());
-      ExitUtil.terminate(1, e);
+      if (!shouldIgnoreException(e)) {
+        LOG.error("Error in storing RMDelegationToken with sequence number: "
+            + identifier.getSequenceNumber());
+        ExitUtil.terminate(1, e);
+      }
     }
   }
 
@@ -127,9 +138,11 @@ public class RMDelegationTokenSecretManager extends
           + id.getSequenceNumber());
       rm.getRMContext().getStateStore().updateRMDelegationToken(id, renewDate);
     } catch (Exception e) {
-      LOG.error("Error in updating persisted RMDelegationToken" +
-                " with sequence number: " + id.getSequenceNumber());
-      ExitUtil.terminate(1, e);
+      if (!shouldIgnoreException(e)) {
+        LOG.error("Error in updating persisted RMDelegationToken"
+            + " with sequence number: " + id.getSequenceNumber());
+        ExitUtil.terminate(1, e);
+      }
     }
   }
 
@@ -141,9 +154,12 @@ public class RMDelegationTokenSecretManager extends
           + ident.getSequenceNumber());
       rm.getRMContext().getStateStore().removeRMDelegationToken(ident);
     } catch (Exception e) {
-      LOG.error("Error in removing RMDelegationToken with sequence number: "
-          + ident.getSequenceNumber());
-      ExitUtil.terminate(1, e);
+      if (!shouldIgnoreException(e)) {
+        LOG.error(
+            "Error in removing RMDelegationToken with sequence number: "
+                + ident.getSequenceNumber());
+        ExitUtil.terminate(1, e);
+      }
     }
   }