[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