Просмотр исходного кода

AMBARI-4764. AmbariManagementControllerTest Test fails with unable to delete the last user. (Dmytro Shkvyra via mahadev)

Mahadev Konar 11 лет назад
Родитель
Сommit
7b8741ba7d

+ 10 - 8
ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java

@@ -1741,14 +1741,16 @@ public class AmbariManagementControllerImpl implements
             request.getPassword());
       }
 
-      if (request.getRoles().size() > 0) {
-        for (String role : u.getRoles()) {
-          users.removeRoleFromUser(u, role);
-        }
-
-        for (String role : request.getRoles()) {
-          users.addRoleToUser(u, role);
-        }
+      Set<String> roolesToDelete = new HashSet<String>(u.getRoles());
+      Set<String> roolesToAdd = request.getRoles();
+      roolesToDelete.removeAll(request.getRoles());
+      for (String role : roolesToDelete) {
+        users.removeRoleFromUser(u, role);
+        u.getRoles().remove(role);
+      }      
+      roolesToAdd.removeAll(u.getRoles());
+      for (String role : roolesToAdd) {
+        users.addRoleToUser(u, role);
       }
 
     }