[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