[CalendarServer-changes] [10102] CalendarServer/trunk/twistedcaldav/directory
source_changes at macosforge.org
source_changes at macosforge.org
Wed Nov 28 13:51:56 PST 2012
Revision: 10102
http://trac.calendarserver.org//changeset/10102
Author: sagen at apple.com
Date: 2012-11-28 13:51:56 -0800 (Wed, 28 Nov 2012)
Log Message:
-----------
Only encode recordType into the memcache key if it's being indexed on short-name
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/directory/cachingdirectory.py
CalendarServer/trunk/twistedcaldav/directory/test/test_cachedirectory.py
Modified: CalendarServer/trunk/twistedcaldav/directory/cachingdirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/cachingdirectory.py 2012-11-28 20:33:58 UTC (rev 10101)
+++ CalendarServer/trunk/twistedcaldav/directory/cachingdirectory.py 2012-11-28 21:51:56 UTC (rev 10102)
@@ -228,6 +228,7 @@
def generateMemcacheKey(self, indexType, indexKey, recordType):
"""
Return a key that can be used to store/retrieve a record in memcache.
+ if short-name is the indexType the recordType be encoded into the key.
@param indexType: one of the indexTypes( ) values
@type indexType: C{str}
@@ -239,7 +240,13 @@
service's baseGUID
@rtype: C{str}
"""
- return "dir|%s|%s|%s|%s" % (self.baseGUID, recordType, indexType, indexKey)
+ keyVersion = 2
+ if indexType == CachingDirectoryService.INDEX_TYPE_SHORTNAME:
+ return "dir|v%d|%s|%s|%s|%s" % (keyVersion,self.baseGUID, recordType,
+ indexType, indexKey)
+ else:
+ return "dir|v%d|%s|%s|%s" % (keyVersion, self.baseGUID, indexType,
+ indexKey)
def _initCaches(self):
self._recordCaches = dict([
@@ -330,36 +337,40 @@
# Check memcache
if config.Memcached.Pools.Default.ClientEnabled:
- for recordType in recordTypes:
- key = self.generateMemcacheKey(indexType, indexKey, recordType)
- self.log_debug("Memcache: checking %s" % (key,))
- try:
- record = self.memcacheGet(key)
- except DirectoryMemcacheError:
- self.log_error("Memcache: failed to get %s" % (key,))
- record = None
+ # The only time the recordType arg matters is when indexType is
+ # short-name, and in that case recordTypes will contain exactly
+ # one recordType, so using recordTypes[0] here is always safe:
+ key = self.generateMemcacheKey(indexType, indexKey, recordTypes[0])
- if record is None:
- self.log_debug("Memcache: miss %s" % (key,))
- else:
- self.log_debug("Memcache: hit %s" % (key,))
- self.recordCacheForType(record.recordType).addRecord(record, indexType, indexKey, useMemcache=False)
- return record
+ self.log_debug("Memcache: checking %s" % (key,))
- if self.negativeCaching:
+ try:
+ record = self.memcacheGet(key)
+ except DirectoryMemcacheError:
+ self.log_error("Memcache: failed to get %s" % (key,))
+ record = None
- # Check negative memcache
- try:
- val = self.memcacheGet("-%s" % (key,))
- except DirectoryMemcacheError:
- self.log_error("Memcache: failed to get -%s" % (key,))
- val = None
- if val == 1:
- self.log_debug("Memcache: negative %s" % (key,))
- self._disabledKeys[indexType][indexKey] = time.time()
- return None
+ if record is None:
+ self.log_debug("Memcache: miss %s" % (key,))
+ else:
+ self.log_debug("Memcache: hit %s" % (key,))
+ self.recordCacheForType(record.recordType).addRecord(record, indexType, indexKey, useMemcache=False)
+ return record
+ if self.negativeCaching:
+
+ # Check negative memcache
+ try:
+ val = self.memcacheGet("-%s" % (key,))
+ except DirectoryMemcacheError:
+ self.log_error("Memcache: failed to get -%s" % (key,))
+ val = None
+ if val == 1:
+ self.log_debug("Memcache: negative %s" % (key,))
+ self._disabledKeys[indexType][indexKey] = time.time()
+ return None
+
# Try query
self.log_debug("Faulting record for attribute '%s' with value '%s'" % (indexType, indexKey,))
self.queryDirectory(recordTypes, indexType, indexKey)
Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_cachedirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_cachedirectory.py 2012-11-28 20:33:58 UTC (rev 10101)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_cachedirectory.py 2012-11-28 21:51:56 UTC (rev 10102)
@@ -326,3 +326,17 @@
record = self.service.recordWithShortName(DirectoryService.recordType_locations,
"Duplicate")
self.assertEquals(record.recordType, DirectoryService.recordType_locations)
+
+ def test_generateMemcacheKey(self):
+ """
+ Verify keys are correctly generated based on the index type -- if index type is
+ short-name, then the recordtype is encoded into the key.
+ """
+ self.assertEquals(
+ self.service.generateMemcacheKey(self.service.INDEX_TYPE_GUID, "foo", "users"),
+ "dir|v2|20CB1593-DE3F-4422-A7D7-BA9C2099B317|guid|foo",
+ )
+ self.assertEquals(
+ self.service.generateMemcacheKey(self.service.INDEX_TYPE_SHORTNAME, "foo", "users"),
+ "dir|v2|20CB1593-DE3F-4422-A7D7-BA9C2099B317|users|shortname|foo",
+ )
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20121128/c36dda57/attachment-0001.html>
More information about the calendarserver-changes
mailing list