[CalendarServer-changes] [9136] CalendarServer/trunk/txdav

source_changes at macosforge.org source_changes at macosforge.org
Mon Apr 16 16:20:48 PDT 2012


Revision: 9136
          http://trac.macosforge.org/projects/calendarserver/changeset/9136
Author:   sagen at apple.com
Date:     2012-04-16 16:20:48 -0700 (Mon, 16 Apr 2012)
Log Message:
-----------
Use memcached for the home metadata query

Modified Paths:
--------------
    CalendarServer/trunk/txdav/base/datastore/util.py
    CalendarServer/trunk/txdav/common/datastore/sql.py

Modified: CalendarServer/trunk/txdav/base/datastore/util.py
===================================================================
--- CalendarServer/trunk/txdav/base/datastore/util.py	2012-04-16 23:19:34 UTC (rev 9135)
+++ CalendarServer/trunk/txdav/base/datastore/util.py	2012-04-16 23:20:48 UTC (rev 9136)
@@ -61,6 +61,8 @@
     def set(self, key, value):
         super(QueryCacher, self).set(key, value, expireTime=self.cacheExpireSeconds)
 
+    # Home child objects by name
+
     def keyForObjectWithName(self, homeResourceID, name):
         return "objectWithName:%s:%s" % (homeResourceID, name)
 
@@ -78,3 +80,22 @@
         # within the same transaction
         self.delete(key)
         transaction.postCommit(lambda:self.delete(key))
+
+    # Home metadata (Created/Modified)
+
+    def keyForHomeMetaData(self, homeResourceID):
+        return "homeMetaData:%s" % (homeResourceID)
+
+    def getHomeMetaData(self, homeResourceID):
+        key = self.keyForHomeMetaData(homeResourceID)
+        return self.get(key)
+
+    def setHomeMetaData(self, transaction, homeResourceID, value):
+        key = self.keyForHomeMetaData(homeResourceID)
+        transaction.postCommit(lambda:self.set(key, value))
+
+    def invalidateHomeMetaData(self, transaction, homeResourceID):
+        key = self.keyForHomeMetaData(homeResourceID)
+        # Invalidate immediately and post-commit
+        self.delete(key)
+        transaction.postCommit(lambda:self.delete(key))

Modified: CalendarServer/trunk/txdav/common/datastore/sql.py
===================================================================
--- CalendarServer/trunk/txdav/common/datastore/sql.py	2012-04-16 23:19:34 UTC (rev 9135)
+++ CalendarServer/trunk/txdav/common/datastore/sql.py	2012-04-16 23:20:48 UTC (rev 9136)
@@ -884,8 +884,16 @@
 
         if result:
             self._resourceID = result[0][0]
-            self._created, self._modified = (yield self._metaDataQuery.on(
-                self._txn, resourceID=self._resourceID))[0]
+            queryCacher = self._txn.store().queryCacher
+            if queryCacher:
+                data = yield queryCacher.getHomeMetaData(self._resourceID)
+                if data is not None:
+                    self._created, self._modified = data
+                else:
+                    self._created, self._modified = (yield self._metaDataQuery.on(
+                        self._txn, resourceID=self._resourceID))[0]
+                    yield queryCacher.setHomeMetaData(self._txn, self._resourceID,
+                        (self._created, self._modified))
             yield self._loadPropertyStore()
             returnValue(self)
         else:
@@ -1442,6 +1450,10 @@
             
         try:
             self._modified = (yield self._txn.subtransaction(_bumpModified, retries=0, failureOK=True))[0][0]
+            queryCacher = self._txn.store().queryCacher
+            if queryCacher is not None:
+                yield queryCacher.invalidateHomeMetaData(self._txn, self._resourceID)
+
         except AllRetriesFailed:
             log.debug("CommonHome.bumpModified failed")
         
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120416/b7d943cd/attachment-0001.html>


More information about the calendarserver-changes mailing list