[CalendarServer-changes] [3723] CalendarServer/trunk

source_changes at macosforge.org source_changes at macosforge.org
Tue Feb 24 08:38:40 PST 2009


Revision: 3723
          http://trac.macosforge.org/projects/calendarserver/changeset/3723
Author:   cdaboo at apple.com
Date:     2009-02-24 08:38:40 -0800 (Tue, 24 Feb 2009)
Log Message:
-----------
Make principal cache tokens are invalidated when a proxy is removed.

Modified Paths:
--------------
    CalendarServer/trunk/run
    CalendarServer/trunk/twistedcaldav/directory/calendaruserproxy.py
    CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py

Modified: CalendarServer/trunk/run
===================================================================
--- CalendarServer/trunk/run	2009-02-24 16:36:31 UTC (rev 3722)
+++ CalendarServer/trunk/run	2009-02-24 16:38:40 UTC (rev 3723)
@@ -707,7 +707,7 @@
 
 caldavtester="${top}/CalDAVTester";
 
-svn_get "CalDAVTester" "${caldavtester}" "${svn_uri_base}/CalDAVTester/trunk" 3702;
+svn_get "CalDAVTester" "${caldavtester}" "${svn_uri_base}/CalDAVTester/trunk" 3722;
 
 #
 # PyFlakes

Modified: CalendarServer/trunk/twistedcaldav/directory/calendaruserproxy.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/calendaruserproxy.py	2009-02-24 16:36:31 UTC (rev 3722)
+++ CalendarServer/trunk/twistedcaldav/directory/calendaruserproxy.py	2009-02-24 16:38:40 UTC (rev 3723)
@@ -183,8 +183,9 @@
         # Break out the list into a set of URIs.
         members = [str(h) for h in new_members.children]
 
-        # Map the URIs to principals.
+        # Map the URIs to principals and a set of UIDs.
         principals = []
+        newUIDs = set()
         for uri in members:
             principal = self.pcollection._principalForURI(uri)
             # Invalid principals MUST result in an error.
@@ -194,10 +195,24 @@
                     "Attempt to use a non-existent principal %s as a group member of %s." % (uri, self.principalURL(),)
                 ))
             principals.append(principal)
-            yield principal.cacheNotifier.changed()
+            newUIDs.add(principal.principalUID())
 
+        # Get the old set of UIDs
+        oldUIDs = (yield self._index().getMembers(self.uid))
+        
+        # Change membership
         yield self.setGroupMemberSetPrincipals(principals)
+        
+        # Invalidate the primary principal's cache, and any principal's whose
+        # membership status changed
         yield self.parent.cacheNotifier.changed()
+        
+        changedUIDs = newUIDs.symmetric_difference(oldUIDs)
+        for uid in changedUIDs:
+            principal = self.pcollection.principalForUID(uid)
+            if principal:
+                yield principal.cacheNotifier.changed()
+            
         returnValue(True)
 
     @inlineCallbacks
@@ -296,7 +311,7 @@
         if uid not in uids:
             from twistedcaldav.directory.principal import DirectoryPrincipalResource
             uids.add(uid)
-            principal = self.parent.parent.principalForUID(uid)
+            principal = self.pcollection.principalForUID(uid)
             if isinstance(principal, CalendarUserProxyPrincipalResource):
                 members = yield self._directGroupMembers()
                 for member in members:

Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py	2009-02-24 16:36:31 UTC (rev 3722)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py	2009-02-24 16:38:40 UTC (rev 3723)
@@ -241,12 +241,15 @@
     def test_setGroupMemberSet(self):
         class StubMemberDB(object):
             def __init__(self):
-                self.members = None
+                self.members = set()
 
             def setGroupMembers(self, uid, members):
                 self.members = members
 
+            def getMembers(self, uid):
+                return self.members
 
+
         user = self._getPrincipalByShortName(directoryService.recordType_users,
                                            "cdaboo")
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20090224/87908f85/attachment-0001.html>


More information about the calendarserver-changes mailing list