[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