[CalendarServer-changes] [1773] CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py

source_changes at macosforge.org source_changes at macosforge.org
Wed Aug 8 14:18:50 PDT 2007


Revision: 1773
          http://trac.macosforge.org/projects/calendarserver/changeset/1773
Author:   wsanchez at apple.com
Date:     2007-08-08 14:18:50 -0700 (Wed, 08 Aug 2007)

Log Message:
-----------
Do guids caching in background lookup.

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py

Modified: CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py	2007-08-08 18:58:13 UTC (rev 1772)
+++ CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py	2007-08-08 21:18:50 UTC (rev 1773)
@@ -394,25 +394,9 @@
             return self.recordsForType(recordType).get(shortName, None)
 
     def recordWithGUID(self, guid):
-        #
         # Override super's implementation with something faster.
-        #
-        for recordType in self.recordTypes():
-            storage = self._storage(recordType)
+        return self._storage(recordType)["guids"].get(guid, None)
 
-            try:
-                guidCache = storage["guids"]
-            except KeyError:
-                guidCache = {}
-                for record in storage["records"]:
-                    guidCache[record.guid] = record
-                storage["guids"] = guidCache
-
-            if guid in guidCache:
-                return guidCache[guid]
-
-        return None
-
     def reloadCache(self, recordType, shortName=None):
         log.msg("Reloading %s record cache" % (recordType,))
 
@@ -457,8 +441,6 @@
             else:
                 query = dsquery.expression(dsquery.expression.AND, (subquery, query))
 
-        records = {}
-
         try:
             if query:
                 if isinstance(query, dsquery.match):
@@ -489,6 +471,9 @@
             log.msg("Open Directory (node=%s) error: %s" % (self.realmName, str(ex)))
             raise
 
+        records = {}
+        guids   = {}
+
         for (key, value) in results.iteritems():
             if self.requireComputerRecord:
                 services = value.get(dsattributes.kDSNAttrServicesLocator)
@@ -527,7 +512,7 @@
                     if proxy:
                         proxyGUIDs = (proxy,)
 
-            records[recordShortName] = OpenDirectoryRecord(
+            record = OpenDirectoryRecord(
                 service               = self,
                 recordType            = recordType,
                 guid                  = guid,
@@ -538,6 +523,7 @@
                 autoSchedule          = autoSchedule,
                 proxyGUIDs            = proxyGUIDs,
             )
+            records[recordShortName] = guids[guid] record
 
             #log.debug("Populated record: %s" % (records[recordShortName],))
 
@@ -546,8 +532,9 @@
             # Replace the entire cache
             #
             storage = {
-                "status": "new",
+                "status" : "new",
                 "records": records,
+                "guids"  : guids,
             }
 
             def rot():
@@ -568,9 +555,9 @@
             # Update one record, if found
             #
             assert len(records) == 1, "shortName = %r, records = %r" % (shortName, len(records))
-            self._records[recordType]["records"][shortName] = records[recordShortName]
-            if "guids" in self._records[recordType]:
-                self._records[recordType]["guids"][record.guid] = record
+            storage = self._records[recordType]
+            storage["records"][shortName] = records[recordShortName]
+            storage["guids"][record.guid] = records[recordShortName]
 
 class OpenDirectoryRecord(DirectoryRecord):
     """

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20070808/35970638/attachment.html


More information about the calendarserver-changes mailing list