[CalendarServer-changes] [6879] CalendarServer/trunk/twistedcaldav
source_changes at macosforge.org
source_changes at macosforge.org
Fri Feb 4 10:24:19 PST 2011
Revision: 6879
http://trac.macosforge.org/projects/calendarserver/changeset/6879
Author: cdaboo at apple.com
Date: 2011-02-04 10:24:18 -0800 (Fri, 04 Feb 2011)
Log Message:
-----------
Avoid locateResource when canonicalizing URIs for cache processing - that avoids an SQL transaction/query.
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/cache.py
CalendarServer/trunk/twistedcaldav/test/test_cache.py
Modified: CalendarServer/trunk/twistedcaldav/cache.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/cache.py 2011-02-04 04:24:17 UTC (rev 6878)
+++ CalendarServer/trunk/twistedcaldav/cache.py 2011-02-04 18:24:18 UTC (rev 6879)
@@ -149,7 +149,26 @@
def _canonicalizeURIForRequest(self, uri, request):
"""
Always use canonicalized forms of the URIs for caching (i.e. __uids__ paths).
+
+ Do this without calling locateResource which may cause a query on the store.
"""
+
+ uribits = uri.split("/")
+ if len(uribits) > 1 and uribits[1] in ("principals", "calendars", "addressbooks"):
+ if uribits[2] == "__uids__":
+ return succeed(uri)
+ else:
+ recordType = uribits[2]
+ recordName = uribits[3]
+ directory = request.site.resource.getDirectory()
+ record = directory.recordWithShortName(recordType, recordName)
+ if record is not None:
+ uribits[2] = "__uids__"
+ uribits[3] = record.uid
+ return succeed("/".join(uribits))
+
+
+ # Fall back to the locateResource approach
try:
return request.locateResource(uri).addCallback(
lambda resrc: resrc.url()).addErrback(self._uriNotFound, uri)
Modified: CalendarServer/trunk/twistedcaldav/test/test_cache.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_cache.py 2011-02-04 04:24:17 UTC (rev 6878)
+++ CalendarServer/trunk/twistedcaldav/test/test_cache.py 2011-02-04 18:24:18 UTC (rev 6879)
@@ -40,8 +40,29 @@
setattr(self, '_called', called + 1)
return token
+class StubDirectoryRecord(object):
+
+ def __init__(self, uid):
+ self.uid = uid
+class StubDirectory(object):
+
+ def recordWithShortName(self, recordType, recordName):
+ return StubDirectoryRecord(recordName)
+class StubSiteResource(object):
+
+ def __init__(self):
+ self.directory = StubDirectory()
+
+ def getDirectory(self):
+ return self.directory
+
+class StubSite(object):
+
+ def __init__(self):
+ self.resource = StubSiteResource()
+
class StubRequest(object):
resources = {}
@@ -56,6 +77,8 @@
self.body = body
self.stream = MemoryStream(body)
+
+ self.site = StubSite()
def locateResource(self, uri):
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110204/ba1d3e3f/attachment.html>
More information about the calendarserver-changes
mailing list