Repository: ambari Updated Branches: refs/heads/trunk be6c3bdd7 -> 696c708b9
AMBARI-6775. Add ability to remove all users from group by PUT request. Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/696c708b Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/696c708b Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/696c708b Branch: refs/heads/trunk Commit: 696c708b99ad392277741d81d85f40f08e828948 Parents: be6c3bd Author: Siddharth Wagle <[email protected]> Authored: Thu Aug 7 10:26:20 2014 -0700 Committer: Siddharth Wagle <[email protected]> Committed: Thu Aug 7 10:26:20 2014 -0700 ---------------------------------------------------------------------- .../AmbariManagementControllerImpl.java | 35 ++++++++++---------- .../AbstractControllerResourceProvider.java | 21 +++++------- .../internal/MemberResourceProvider.java | 8 +++++ 3 files changed, 35 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/696c708b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java index 69100c7..9d2c5d3 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java @@ -772,28 +772,29 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle } @Override + @SuppressWarnings("unchecked") public synchronized void updateMembers(Set<MemberRequest> requests) throws AmbariException { - final Map<String, List<String>> membersPerGroup = new HashMap<String, List<String>>(); - for (MemberRequest request : requests) { - if (StringUtils.isBlank(request.getGroupName()) || StringUtils.isBlank(request.getUserName())) { - throw new AmbariException("Both group name and user name must be supplied."); - } - if (membersPerGroup.get(request.getGroupName()) == null) { - membersPerGroup.put(request.getGroupName(), new ArrayList<String>()); + // validate + String groupName = null; + for (MemberRequest request: requests) { + if (groupName != null && !request.getGroupName().equals(groupName)) { + throw new AmbariException("Can't manage members of different groups in one request"); } - membersPerGroup.get(request.getGroupName()).add(request.getUserName()); + groupName = request.getGroupName(); } - for (Entry<String, List<String>> entry: membersPerGroup.entrySet()) { - final String groupName = entry.getKey(); - final List<String> requiredMembers = entry.getValue(); - final List<String> currentMembers = users.getAllMembers(groupName); - for (String user: (Collection<String>) CollectionUtils.subtract(currentMembers, requiredMembers)) { - users.removeMemberFromGroup(groupName, user); - } - for (String user: (Collection<String>) CollectionUtils.subtract(requiredMembers, currentMembers)) { - users.addMemberToGroup(groupName, user); + final List<String> requiredMembers = new ArrayList<String>(); + for (MemberRequest request: requests) { + if (request.getUserName() != null) { + requiredMembers.add(request.getUserName()); } } + final List<String> currentMembers = users.getAllMembers(groupName); + for (String user: (Collection<String>) CollectionUtils.subtract(currentMembers, requiredMembers)) { + users.removeMemberFromGroup(groupName, user); + } + for (String user: (Collection<String>) CollectionUtils.subtract(requiredMembers, currentMembers)) { + users.addMemberToGroup(groupName, user); + } } private Stage createNewStage(long id, Cluster cluster, long requestId, String requestContext, String clusterHostInfo) { http://git-wip-us.apache.org/repos/asf/ambari/blob/696c708b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java index 2de5937..1c8948f 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java @@ -183,20 +183,17 @@ public abstract class AbstractControllerResourceProvider extends AbstractResourc Object result = null; - if (predicate instanceof ArrayPredicate) { + if (predicate instanceof EqualsPredicate) { + EqualsPredicate equalsPredicate = (EqualsPredicate) predicate; + if (queryParameterId.equals(equalsPredicate.getPropertyId())) { + return equalsPredicate.getValue(); + } + } else if (predicate instanceof ArrayPredicate) { ArrayPredicate arrayPredicate = (ArrayPredicate) predicate; for (Predicate predicateItem : arrayPredicate.getPredicates()) { - if (predicateItem instanceof EqualsPredicate) { - EqualsPredicate equalsPredicate = - (EqualsPredicate) predicateItem; - if (queryParameterId.equals(equalsPredicate.getPropertyId())) { - return equalsPredicate.getValue(); - } - } else { - result = getQueryParameterValue(queryParameterId, predicateItem); - if (result != null) { - return result; - } + result = getQueryParameterValue(queryParameterId, predicateItem); + if (result != null) { + return result; } } http://git-wip-us.apache.org/repos/asf/ambari/blob/696c708b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MemberResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MemberResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MemberResourceProvider.java index 7017495..0f6b66d 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MemberResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MemberResourceProvider.java @@ -18,6 +18,7 @@ package org.apache.ambari.server.controller.internal; import java.util.Arrays; +import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -36,6 +37,7 @@ import org.apache.ambari.server.controller.spi.ResourceAlreadyExistsException; import org.apache.ambari.server.controller.spi.SystemException; import org.apache.ambari.server.controller.spi.UnsupportedPropertyException; import org.apache.ambari.server.controller.utilities.PropertyHelper; + import com.google.inject.assistedinject.Assisted; import com.google.inject.assistedinject.AssistedInject; import com.google.inject.persist.Transactional; @@ -139,6 +141,12 @@ public class MemberResourceProvider extends AbstractControllerResourceProvider { for (Map<String, Object> propertyMap : request.getProperties()) { requests.add(getRequest(propertyMap)); } + if (requests.isEmpty()) { + // request for removing all users from group + Map<String, Object> propertyMap = new HashMap<String, Object>(); + propertyMap.put(MEMBER_GROUP_NAME_PROPERTY_ID, getQueryParameterValue(MEMBER_GROUP_NAME_PROPERTY_ID, predicate)); + requests.add(getRequest(propertyMap)); + } modifyResources(new Command<Void>() { @Override
