Repository: ambari Updated Branches: refs/heads/trunk 6aca7feac -> f58abd481
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/f58abd48 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f58abd48 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f58abd48 Branch: refs/heads/trunk Commit: f58abd48173725abd1d68dd58d0348f7db6d5194 Parents: 6aca7fe Author: Dmytro Sen <d...@apache.org> Authored: Tue Jul 25 18:25:29 2017 +0300 Committer: Dmytro Sen <d...@apache.org> Committed: Tue Jul 25 18:25:48 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/f58abd48/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 f4b650e..5f02baa 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 @@ -39,6 +39,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; @@ -1084,6 +1085,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/f58abd48/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 a8f7638..3e8ea01 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 @@ -129,6 +129,7 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider public static final String ACTION_ID = "action"; public static final String INPUTS_ID = "parameters"; public static final String EXLUSIVE_ID = "exclusive"; + public static final String HAS_RESOURCE_FILTERS = "HAS_RESOURCE_FILTERS"; private static Set<String> pkPropertyIds = new HashSet<>(Arrays.asList(new String[]{ @@ -444,12 +445,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<>(); for (Map<String, Object> resourceMap : resourceFilters) { + params.put(HAS_RESOURCE_FILTERS, "true"); resourceFilterList.addAll(parseRequestResourceFilter(resourceMap, (String) propertyMap.get(REQUEST_CLUSTER_NAME_PROPERTY_ID))); } @@ -461,7 +464,6 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider operationLevel = new RequestOperationLevel(requestInfoProperties); } - Map<String, String> params = new HashMap<>(); String keyPrefix = INPUTS_ID + "/"; for (String key : requestInfoProperties.keySet()) { if (key.startsWith(keyPrefix)) { http://git-wip-us.apache.org/repos/asf/ambari/blob/f58abd48/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 d243e73..d2c462b 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