Repository: ambari
Updated Branches:
  refs/heads/branch-2.5 cfedbdf78 -> b38901bd9


AMBARI-21551 Restart due to Stale configurations leads to an internal system 
exception (dsen)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b38901bd
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b38901bd
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b38901bd

Branch: refs/heads/branch-2.5
Commit: b38901bd9133c469a604fd8e6b8916e4b83d755a
Parents: cfedbdf
Author: Dmytro Sen <d...@apache.org>
Authored: Tue Jul 25 18:28:28 2017 +0300
Committer: Dmytro Sen <d...@apache.org>
Committed: Tue Jul 25 18:28:28 2017 +0300

----------------------------------------------------------------------
 .../controller/AmbariCustomCommandExecutionHelper.java      | 8 ++++++++
 .../server/controller/internal/RequestResourceProvider.java | 4 +++-
 .../controller/internal/RequestResourceProviderTest.java    | 9 ++++++---
 3 files changed, 17 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/b38901bd/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
index 9bd38fc..ee423e2 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
@@ -43,6 +43,7 @@ import static 
org.apache.ambari.server.agent.ExecutionCommand.KeyNames.STACK_NAM
 import static 
org.apache.ambari.server.agent.ExecutionCommand.KeyNames.STACK_VERSION;
 import static 
org.apache.ambari.server.agent.ExecutionCommand.KeyNames.USER_GROUPS;
 import static 
org.apache.ambari.server.agent.ExecutionCommand.KeyNames.USER_LIST;
+import static 
org.apache.ambari.server.controller.internal.RequestResourceProvider.HAS_RESOURCE_FILTERS;
 
 import java.text.MessageFormat;
 import java.util.ArrayList;
@@ -1044,6 +1045,13 @@ public class AmbariCustomCommandExecutionHelper {
 
     List<RequestResourceFilter> resourceFilters = 
actionRequest.getResourceFilters();
 
+    if (resourceFilters != null && resourceFilters.isEmpty() &&
+            actionRequest.getParameters().containsKey(HAS_RESOURCE_FILTERS) &&
+            
actionRequest.getParameters().get(HAS_RESOURCE_FILTERS).equalsIgnoreCase("true"))
 {
+      LOG.warn("Couldn't find any resource that satisfies given resource 
filters");
+      return;
+    }
+
     if (resourceFilters == null || resourceFilters.isEmpty()) {
       throw new AmbariException("Command execution cannot proceed without a " +
         "resource filter.");

http://git-wip-us.apache.org/repos/asf/ambari/blob/b38901bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
index b4b26ce..5a0549d 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
@@ -128,6 +128,7 @@ public class RequestResourceProvider extends 
AbstractControllerResourceProvider
   protected static final String ACTION_ID = "action";
   protected static final String INPUTS_ID = "parameters";
   protected static final String EXLUSIVE_ID = "exclusive";
+  public static final String HAS_RESOURCE_FILTERS = "HAS_RESOURCE_FILTERS";
   private static Set<String> pkPropertyIds =
       new HashSet<String>(Arrays.asList(new String[]{
         REQUEST_ID_PROPERTY_ID}));
@@ -442,12 +443,14 @@ public class RequestResourceProvider extends 
AbstractControllerResourceProvider
     List<RequestResourceFilter> resourceFilterList = null;
     Set<Map<String, Object>> resourceFilters;
 
+    Map<String, String> params = new HashMap<String, String>();
     Object resourceFilterObj = propertyMap.get(REQUEST_RESOURCE_FILTER_ID);
     if (resourceFilterObj != null && resourceFilterObj instanceof HashSet) {
       resourceFilters = (HashSet<Map<String, Object>>) resourceFilterObj;
       resourceFilterList = new ArrayList<RequestResourceFilter>();
 
       for (Map<String, Object> resourceMap : resourceFilters) {
+        params.put(HAS_RESOURCE_FILTERS, "true");
         resourceFilterList.addAll(parseRequestResourceFilter(resourceMap,
           (String) propertyMap.get(REQUEST_CLUSTER_NAME_PROPERTY_ID)));
       }
@@ -459,7 +462,6 @@ public class RequestResourceProvider extends 
AbstractControllerResourceProvider
       operationLevel = new RequestOperationLevel(requestInfoProperties);
     }
 
-    Map<String, String> params = new HashMap<String, String>();
     String keyPrefix = INPUTS_ID + "/";
     for (String key : requestInfoProperties.keySet()) {
       if (key.startsWith(keyPrefix)) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/b38901bd/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java
index 590df04a..c519323 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java
@@ -1032,7 +1032,7 @@ public class RequestResourceProviderTest {
     Assert.assertEquals(null, capturedResourceFilter.getComponentName());
     Assert.assertNotNull(capturedResourceFilter.getHostNames());
     Assert.assertEquals(0, capturedResourceFilter.getHostNames().size());
-    Assert.assertEquals(0, actionRequest.getValue().getParameters().size());
+    Assert.assertEquals(1, actionRequest.getValue().getParameters().size());
   }
 
   @Test
@@ -1152,7 +1152,7 @@ public class RequestResourceProviderTest {
     Assert.assertEquals(null, capturedResourceFilter.getComponentName());
     Assert.assertEquals(3, capturedResourceFilter.getHostNames().size());
     Assert.assertArrayEquals(expectedHosts, 
capturedResourceFilter.getHostNames().toArray());
-    Assert.assertEquals(2, capturedRequest.getParameters().size());
+    Assert.assertEquals(3, capturedRequest.getParameters().size());
     for(String key : expectedParams.keySet()) {
       Assert.assertEquals(expectedParams.get(key), 
capturedRequest.getParameters().get(key));
     }
@@ -1239,6 +1239,9 @@ public class RequestResourceProviderTest {
     }
     Assert.assertNotNull(propertyIdToAssert);
     Assert.assertEquals("true", propertyValueToAssert);
+    Assert.assertTrue(capturedRequest.getResourceFilters().isEmpty());
+    Assert.assertEquals(1, capturedRequest.getParameters().size());
+    Assert.assertEquals("true", 
capturedRequest.getParameters().get(RequestResourceProvider.HAS_RESOURCE_FILTERS));
   }
 
   @Test
@@ -1548,7 +1551,7 @@ public class RequestResourceProviderTest {
     Assert.assertEquals(null, capturedResourceFilter.getComponentName());
     Assert.assertNotNull(capturedResourceFilter.getHostNames());
     Assert.assertEquals(2, capturedResourceFilter.getHostNames().size());
-    Assert.assertEquals(0, actionRequest.getValue().getParameters().size());
+    Assert.assertEquals(1, actionRequest.getValue().getParameters().size());
   }
 
   @Test

Reply via email to