[CalendarServer-changes] [11655] CalendarServer/trunk/twistedcaldav/directory
source_changes at macosforge.org
source_changes at macosforge.org
Thu Sep 5 13:44:26 PDT 2013
Revision: 11655
http://trac.calendarserver.org//changeset/11655
Author: sagen at apple.com
Date: 2013-09-05 13:44:26 -0700 (Thu, 05 Sep 2013)
Log Message:
-----------
Deal with unparsable membership cache files
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/directory/directory.py
CalendarServer/trunk/twistedcaldav/directory/test/test_directory.py
Modified: CalendarServer/trunk/twistedcaldav/directory/directory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/directory.py 2013-09-05 01:13:51 UTC (rev 11654)
+++ CalendarServer/trunk/twistedcaldav/directory/directory.py 2013-09-05 20:44:26 UTC (rev 11655)
@@ -813,7 +813,7 @@
# populated the membership cache, and if so, return immediately
if isPopulated:
self.log.info("Group membership cache is already populated")
- returnValue((fast, 0))
+ returnValue((fast, 0, 0))
# We don't care what others are doing right now, we need to update
useLock = False
@@ -832,15 +832,21 @@
else:
self.log.info("Group membership snapshot file exists: %s" %
(membershipsCacheFile.path,))
- previousMembers = pickle.loads(membershipsCacheFile.getContent())
callGroupsChanged = True
+ try:
+ previousMembers = pickle.loads(membershipsCacheFile.getContent())
+ except:
+ self.log.warn("Could not parse snapshot; will regenerate cache")
+ fast = False
+ previousMembers = {}
+ callGroupsChanged = False
if useLock:
self.log.info("Attempting to acquire group membership cache lock")
acquiredLock = (yield self.cache.acquireLock())
if not acquiredLock:
self.log.info("Group membership cache lock held by another process")
- returnValue((fast, 0))
+ returnValue((fast, 0, 0))
self.log.info("Acquired lock")
if not fast and self.useExternalProxies:
@@ -850,7 +856,11 @@
if extProxyCacheFile.exists():
self.log.info("External proxies snapshot file exists: %s" %
(extProxyCacheFile.path,))
- previousAssignments = pickle.loads(extProxyCacheFile.getContent())
+ try:
+ previousAssignments = pickle.loads(extProxyCacheFile.getContent())
+ except:
+ self.log.warn("Could not parse external proxies snapshot")
+ previousAssignments = []
if useLock:
yield self.cache.extendLock()
Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_directory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_directory.py 2013-09-05 01:13:51 UTC (rev 11654)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_directory.py 2013-09-05 20:44:26 UTC (rev 11655)
@@ -243,7 +243,7 @@
# Prevent an update by locking the cache
acquiredLock = (yield cache.acquireLock())
self.assertTrue(acquiredLock)
- self.assertEquals((False, 0), (yield updater.updateCache()))
+ self.assertEquals((False, 0, 0), (yield updater.updateCache()))
# You can't lock when already locked:
acquiredLockAgain = (yield cache.acquireLock())
@@ -667,7 +667,7 @@
# as indicated by the return value for "fast". Note that the cache
# is already populated so updateCache( ) in fast mode will not do
# anything, and numMembers will be 0.
- fast, numMembers = (yield updater.updateCache(fast=True))
+ fast, numMembers, numChanged = (yield updater.updateCache(fast=True))
self.assertEquals(fast, True)
self.assertEquals(numMembers, 0)
@@ -678,61 +678,70 @@
self.assertEquals(numChanged, 0)
# Verify the snapshot contains the pickled dictionary we expect
+ expected = {
+ "46D9D716-CBEE-490F-907A-66FA6C3767FF":
+ set([
+ u"00599DAF-3E75-42DD-9DB7-52617E79943F",
+ ]),
+ "5A985493-EE2C-4665-94CF-4DFEA3A89500":
+ set([
+ u"non_calendar_group",
+ u"recursive1_coasts",
+ u"recursive2_coasts",
+ u"both_coasts"
+ ]),
+ "6423F94A-6B76-4A3A-815B-D52CFD77935D":
+ set([
+ u"left_coast",
+ u"recursive1_coasts",
+ u"recursive2_coasts",
+ u"both_coasts"
+ ]),
+ "5FF60DAD-0BDE-4508-8C77-15F0CA5C8DD1":
+ set([
+ u"left_coast",
+ u"both_coasts"
+ ]),
+ "8B4288F6-CC82-491D-8EF9-642EF4F3E7D0":
+ set([
+ u"non_calendar_group",
+ u"left_coast",
+ u"both_coasts"
+ ]),
+ "left_coast":
+ set([
+ u"both_coasts"
+ ]),
+ "recursive1_coasts":
+ set([
+ u"recursive1_coasts",
+ u"recursive2_coasts"
+ ]),
+ "recursive2_coasts":
+ set([
+ u"recursive1_coasts",
+ u"recursive2_coasts"
+ ]),
+ "right_coast":
+ set([
+ u"both_coasts"
+ ])
+ }
members = pickle.loads(snapshotFile.getContent())
- self.assertEquals(
- members,
- {
- "46D9D716-CBEE-490F-907A-66FA6C3767FF":
- set([
- u"00599DAF-3E75-42DD-9DB7-52617E79943F",
- ]),
- "5A985493-EE2C-4665-94CF-4DFEA3A89500":
- set([
- u"non_calendar_group",
- u"recursive1_coasts",
- u"recursive2_coasts",
- u"both_coasts"
- ]),
- "6423F94A-6B76-4A3A-815B-D52CFD77935D":
- set([
- u"left_coast",
- u"recursive1_coasts",
- u"recursive2_coasts",
- u"both_coasts"
- ]),
- "5FF60DAD-0BDE-4508-8C77-15F0CA5C8DD1":
- set([
- u"left_coast",
- u"both_coasts"
- ]),
- "8B4288F6-CC82-491D-8EF9-642EF4F3E7D0":
- set([
- u"non_calendar_group",
- u"left_coast",
- u"both_coasts"
- ]),
- "left_coast":
- set([
- u"both_coasts"
- ]),
- "recursive1_coasts":
- set([
- u"recursive1_coasts",
- u"recursive2_coasts"
- ]),
- "recursive2_coasts":
- set([
- u"recursive1_coasts",
- u"recursive2_coasts"
- ]),
- "right_coast":
- set([
- u"both_coasts"
- ])
- }
- )
+ self.assertEquals(members, expected)
+
+ # "Corrupt" the snapshot and verify it is regenerated properly
+ snapshotFile.setContent("xyzzy")
+ cache.delete("group-cacher-populated")
+ fast, numMembers, numChanged = (yield updater.updateCache(fast=True))
+ self.assertEquals(fast, False)
+ self.assertEquals(numMembers, 9)
+ self.assertEquals(numChanged, 9)
+ self.assertTrue(snapshotFile.exists())
+ members = pickle.loads(snapshotFile.getContent())
+ self.assertEquals(members, expected)
+
-
def test_autoAcceptMembers(self):
"""
autoAcceptMembers( ) returns an empty list if no autoAcceptGroup is
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130905/721ba2f0/attachment.html>
More information about the calendarserver-changes
mailing list