Ver Fonte

YARN-8618. Added detection for non-upgradable service.
Contributed by Chandni Singh

Eric Yang há 6 anos atrás
pai
commit
66f059ed1d

+ 16 - 1
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/ServiceClient.java

@@ -238,7 +238,22 @@ public class ServiceClient extends AppAdminClient implements SliderExitCodes,
       LOG.error(message);
       throw new YarnException(message);
     }
-
+    boolean foundNotNeverComp = false;
+    for (Component comp : persistedService.getComponents()) {
+      // If restart policy of any component is not NEVER then upgrade is
+      // allowed.
+      if (!comp.getRestartPolicy().equals(Component.RestartPolicyEnum.NEVER)) {
+        foundNotNeverComp = true;
+        break;
+      }
+    }
+    if (!foundNotNeverComp) {
+      String message = "All the components of the service " + service.getName()
+          + " have " + Component.RestartPolicyEnum.NEVER + " restart policy, " +
+          "so it cannot be upgraded.";
+      LOG.error(message);
+      throw new YarnException(message);
+    }
     Service liveService = getStatus(service.getName());
     if (!liveService.getState().equals(ServiceState.STABLE)) {
       String message = service.getName() + " is at " + liveService.getState()

+ 23 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/test/java/org/apache/hadoop/yarn/service/client/TestServiceClient.java

@@ -149,6 +149,29 @@ public class TestServiceClient {
     client.stop();
   }
 
+  @Test
+  public void testUpgradeDisabledWhenAllCompsHaveNeverRestartPolicy()
+      throws Exception {
+    Service service = createService();
+    service.getComponents().forEach(comp ->
+        comp.setRestartPolicy(Component.RestartPolicyEnum.NEVER));
+
+    ServiceClient client = MockServiceClient.create(rule, service, true);
+
+    //upgrade the service
+    service.setVersion("v2");
+    try {
+      client.initiateUpgrade(service);
+    } catch (YarnException ex) {
+      Assert.assertEquals("All the components of the service " +
+              service.getName() + " have " + Component.RestartPolicyEnum.NEVER
+              + " restart policy, so it cannot be upgraded.",
+          ex.getMessage());
+      return;
+    }
+    Assert.fail();
+  }
+
   private Service createService() throws IOException,
       YarnException {
     Service service = ServiceTestUtils.createExampleApplication();