[CalendarServer-changes] [8061] CalendarServer/trunk

source_changes at macosforge.org source_changes at macosforge.org
Tue Sep 13 11:22:21 PDT 2011


Revision: 8061
          http://trac.macosforge.org/projects/calendarserver/changeset/8061
Author:   sagen at apple.com
Date:     2011-09-13 11:22:20 -0700 (Tue, 13 Sep 2011)
Log Message:
-----------
Adds a configuration option for how long the group cacher sidecar should hold the update lock.

Modified Paths:
--------------
    CalendarServer/trunk/conf/caldavd-test.plist
    CalendarServer/trunk/twistedcaldav/directory/directory.py
    CalendarServer/trunk/twistedcaldav/directory/ldapdirectory.py
    CalendarServer/trunk/twistedcaldav/directory/principal.py
    CalendarServer/trunk/twistedcaldav/directory/test/test_directory.py
    CalendarServer/trunk/twistedcaldav/stdconfig.py
    CalendarServer/trunk/twistedcaldav/upgrade.py

Modified: CalendarServer/trunk/conf/caldavd-test.plist
===================================================================
--- CalendarServer/trunk/conf/caldavd-test.plist	2011-09-09 20:52:59 UTC (rev 8060)
+++ CalendarServer/trunk/conf/caldavd-test.plist	2011-09-13 18:22:20 UTC (rev 8061)
@@ -935,6 +935,8 @@
       <integer>300</integer>
       <key>ExpireSeconds</key>
       <integer>3600</integer>
+      <key>LockSeconds</key>
+      <integer>300</integer>
       <key>UseExternalProxies</key>
       <false/>
     </dict>

Modified: CalendarServer/trunk/twistedcaldav/directory/directory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/directory.py	2011-09-09 20:52:59 UTC (rev 8060)
+++ CalendarServer/trunk/twistedcaldav/directory/directory.py	2011-09-13 18:22:20 UTC (rev 8061)
@@ -414,13 +414,14 @@
     """
 
     def __init__(self, namespace, pickle=True, no_invalidation=False,
-        key_normalization=True, expireSeconds=0):
+        key_normalization=True, expireSeconds=0, lockSeconds=60):
 
         super(GroupMembershipCache, self).__init__(namespace, pickle=pickle,
             no_invalidation=no_invalidation,
             key_normalization=key_normalization)
 
         self.expireSeconds = expireSeconds
+        self.lockSeconds = lockSeconds
 
     def setGroupsFor(self, guid, memberships):
         self.log_debug("set groups-for %s : %s" % (guid, memberships))
@@ -451,7 +452,7 @@
 
     def acquireLock(self):
         self.log_debug("add group-cacher-lock")
-        return self.add("group-cacher-lock", "1", expireTime=self.expireSeconds)
+        return self.add("group-cacher-lock", "1", expireTime=self.lockSeconds)
 
     def releaseLock(self):
         self.log_debug("delete group-cacher-lock")
@@ -465,8 +466,9 @@
     proxy database, and the location/resource info in the directory system.
     """
 
-    def __init__(self, proxyDB, directory, expireSeconds, cache=None,
-        namespace=None, useExternalProxies=False, externalProxiesSource=None):
+    def __init__(self, proxyDB, directory, expireSeconds, lockSeconds,
+        cache=None, namespace=None, useExternalProxies=False,
+        externalProxiesSource=None):
         self.proxyDB = proxyDB
         self.directory = directory
         self.useExternalProxies = useExternalProxies
@@ -476,7 +478,8 @@
 
         if cache is None:
             assert namespace is not None, "namespace must be specified if GroupMembershipCache is not provided"
-            cache = GroupMembershipCache(namespace, expireSeconds=expireSeconds)
+            cache = GroupMembershipCache(namespace, expireSeconds=expireSeconds,
+                lockSeconds=lockSeconds)
         self.cache = cache
 
 
@@ -808,11 +811,15 @@
     """
 
     def __init__(self, proxyDB, directory, namespace, updateSeconds,
-        expireSeconds, reactor=None, updateMethod=None,
+        expireSeconds, lockSeconds, reactor=None, updateMethod=None,
         useExternalProxies=False):
 
+        if updateSeconds >= expireSeconds:
+            expireSeconds = updateSeconds * 2
+            self.log_warn("Configuration warning: GroupCaching.ExpireSeconds needs to be longer than UpdateSeconds; setting to %d seconds" % (expireSeconds,))
+
         self.updater = GroupMembershipCacheUpdater(proxyDB, directory,
-            expireSeconds, namespace=namespace,
+            expireSeconds, lockSeconds, namespace=namespace,
             useExternalProxies=useExternalProxies)
 
         if reactor is None:
@@ -885,6 +892,7 @@
             config.GroupCaching.MemcachedPool,
             config.GroupCaching.UpdateSeconds,
             config.GroupCaching.ExpireSeconds,
+            config.GroupCaching.LockSeconds,
             useExternalProxies=config.GroupCaching.UseExternalProxies
             )
 

Modified: CalendarServer/trunk/twistedcaldav/directory/ldapdirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/ldapdirectory.py	2011-09-09 20:52:59 UTC (rev 8060)
+++ CalendarServer/trunk/twistedcaldav/directory/ldapdirectory.py	2011-09-13 18:22:20 UTC (rev 8061)
@@ -570,8 +570,8 @@
         shortNames = ()
         authIDs = set()
         fullName = None
-        firstName = None
-        lastName = None
+        firstName = ""
+        lastName = ""
         emailAddresses = set()
         enabledForCalendaring = None
         enabledForAddressBooks = None

Modified: CalendarServer/trunk/twistedcaldav/directory/principal.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/principal.py	2011-09-09 20:52:59 UTC (rev 8060)
+++ CalendarServer/trunk/twistedcaldav/directory/principal.py	2011-09-13 18:22:20 UTC (rev 8061)
@@ -547,14 +547,14 @@
         elif namespace == calendarserver_namespace:
             if name == "first-name":
                 firstName = self.record.firstName
-                if firstName:
+                if firstName is not None:
                     returnValue(customxml.FirstNameProperty(firstName))
                 else:
                     returnValue(None)
 
             elif name == "last-name":
                 lastName = self.record.lastName
-                if lastName:
+                if lastName is not None:
                     returnValue(customxml.LastNameProperty(lastName))
                 else:
                     returnValue(None)

Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_directory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_directory.py	2011-09-09 20:52:59 UTC (rev 8060)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_directory.py	2011-09-13 18:22:20 UTC (rev 8061)
@@ -121,10 +121,17 @@
         """
         clock = Clock()
         self.count = 0
+
+        # Deliberately set the expireSeconds lower than updateSeconds to verify
+        # expireSeconds gets set to 2 * updateSeconds in that scenario
+
         service = GroupMembershipCacherService(
-            None, None, "Testing", 30, 60, reactor=clock,
+            None, None, "Testing", 30, 20, 30, reactor=clock,
             updateMethod=self._updateMethod)
 
+        # expireSeconds = 2 * 30 updateSeconds
+        self.assertEquals(service.updater.cache.expireSeconds, 60)
+
         yield service.startService()
 
         self.assertEquals(self.count, 1)
@@ -190,7 +197,7 @@
         self.directoryService.groupMembershipCache = cache
 
         updater = GroupMembershipCacheUpdater(
-            calendaruserproxy.ProxyDBService, self.directoryService, 30,
+            calendaruserproxy.ProxyDBService, self.directoryService, 30, 30,
             cache=cache, useExternalProxies=False)
 
         # Exercise getGroups()
@@ -375,7 +382,7 @@
             ]
 
         updater = GroupMembershipCacheUpdater(
-            calendaruserproxy.ProxyDBService, self.directoryService, 30,
+            calendaruserproxy.ProxyDBService, self.directoryService, 30, 30,
             cache=cache, useExternalProxies=True,
             externalProxiesSource=fakeExternalProxies)
 
@@ -461,7 +468,7 @@
         self.directoryService.groupMembershipCache = cache
 
         updater = GroupMembershipCacheUpdater(
-            calendaruserproxy.ProxyDBService, self.directoryService, 30,
+            calendaruserproxy.ProxyDBService, self.directoryService, 30, 30,
             cache=cache)
 
         dataRoot = FilePath(config.DataRoot)

Modified: CalendarServer/trunk/twistedcaldav/stdconfig.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/stdconfig.py	2011-09-09 20:52:59 UTC (rev 8060)
+++ CalendarServer/trunk/twistedcaldav/stdconfig.py	2011-09-13 18:22:20 UTC (rev 8061)
@@ -783,6 +783,7 @@
         "MemcachedPool" : "Default",
         "UpdateSeconds" : 300,
         "ExpireSeconds" : 3600,
+        "LockSeconds" : 300,
         "EnableUpdater" : True,
         "UseExternalProxies" : False,
     },

Modified: CalendarServer/trunk/twistedcaldav/upgrade.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/upgrade.py	2011-09-09 20:52:59 UTC (rev 8060)
+++ CalendarServer/trunk/twistedcaldav/upgrade.py	2011-09-13 18:22:20 UTC (rev 8061)
@@ -915,6 +915,7 @@
 
             updater = GroupMembershipCacheUpdater(proxydb,
                 directory, self.config.GroupCaching.ExpireSeconds,
+                self.config.GroupCaching.LockSeconds,
                 namespace=self.config.GroupCaching.MemcachedPool,
                 useExternalProxies=self.config.GroupCaching.UseExternalProxies)
             yield updater.updateCache(fast=True)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110913/edd62bc3/attachment-0001.html>


More information about the calendarserver-changes mailing list