You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by an...@apache.org on 2017/03/15 16:38:20 UTC

svn commit: r1787077 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipWriter.java

Author: angela
Date: Wed Mar 15 16:38:19 2017
New Revision: 1787077

URL: http://svn.apache.org/viewvc?rev=1787077&view=rev
Log:
OAK-5939 : MembershipWriter.removeMembers writes back too often

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipWriter.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipWriter.java?rev=1787077&r1=1787076&r2=1787077&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipWriter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipWriter.java Wed Mar 15 16:38:19 2017
@@ -214,23 +214,23 @@ public class MembershipWriter {
             PropertyState refs = t.getProperty(UserConstants.REP_MEMBERS);
             if (refs != null) {
                 PropertyBuilder<String> prop = PropertyBuilder.copy(Type.WEAKREFERENCE, refs);
-                Iterator<Map.Entry<String,String>> memberEntries = memberIds.entrySet().iterator();
-                while (memberEntries.hasNext()) {
-                    String memberContentId = memberEntries.next().getKey();
+                Iterator<Map.Entry<String,String>> it = memberIds.entrySet().iterator();
+                while (it.hasNext() && !prop.isEmpty()) {
+                    String memberContentId = it.next().getKey();
                     if (prop.hasValue(memberContentId)) {
                         prop.removeValue(memberContentId);
-                        if (prop.isEmpty()) {
-                            if (t == groupTree) {
-                                t.removeProperty(UserConstants.REP_MEMBERS);
-                            } else {
-                                t.remove();
-                            }
-                        } else {
-                            t.setProperty(prop.getPropertyState());
-                        }
-                        memberEntries.remove();
+                        it.remove();
                     }
                 }
+                if (prop.isEmpty()) {
+                    if (t == groupTree) {
+                        t.removeProperty(UserConstants.REP_MEMBERS);
+                    } else {
+                        t.remove();
+                    }
+                } else {
+                    t.setProperty(prop.getPropertyState());
+                }
             }
         }
         return Sets.newHashSet(memberIds.values());