You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sw...@apache.org on 2014/08/07 19:27:01 UTC

git commit: AMBARI-6775. Add ability to remove all users from group by PUT request.

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 <sw...@hortonworks.com>
Authored: Thu Aug 7 10:26:20 2014 -0700
Committer: Siddharth Wagle <sw...@hortonworks.com>
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