[CalendarServer-changes] [9290] CalendarServer/branches/users/glyph/uuid-normalize/txdav
source_changes at macosforge.org
source_changes at macosforge.org
Thu May 24 13:34:21 PDT 2012
Revision: 9290
http://trac.macosforge.org/projects/calendarserver/changeset/9290
Author: glyph at apple.com
Date: 2012-05-24 13:34:21 -0700 (Thu, 24 May 2012)
Log Message:
-----------
Disable caching entirely during this transaction, since proper cache invalidation after 'update...OWNER_UID...' is almost impossible.
Modified Paths:
--------------
CalendarServer/branches/users/glyph/uuid-normalize/txdav/caldav/datastore/sql.py
CalendarServer/branches/users/glyph/uuid-normalize/txdav/common/datastore/sql.py
Modified: CalendarServer/branches/users/glyph/uuid-normalize/txdav/caldav/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/glyph/uuid-normalize/txdav/caldav/datastore/sql.py 2012-05-24 20:34:18 UTC (rev 9289)
+++ CalendarServer/branches/users/glyph/uuid-normalize/txdav/caldav/datastore/sql.py 2012-05-24 20:34:21 UTC (rev 9290)
@@ -508,7 +508,7 @@
).on(self._txn)
self._supportedComponents = supported_components
- queryCacher = self._txn.store().queryCacher
+ queryCacher = self._txn._queryCacher
if queryCacher is not None:
cacheKey = queryCacher.keyForHomeChildMetaData(self._resourceID)
yield queryCacher.invalidateAfterCommit(self._txn, cacheKey)
Modified: CalendarServer/branches/users/glyph/uuid-normalize/txdav/common/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/glyph/uuid-normalize/txdav/common/datastore/sql.py 2012-05-24 20:34:18 UTC (rev 9289)
+++ CalendarServer/branches/users/glyph/uuid-normalize/txdav/common/datastore/sql.py 2012-05-24 20:34:21 UTC (rev 9290)
@@ -187,7 +187,7 @@
return []
- def newTransaction(self, label="unlabeled"):
+ def newTransaction(self, label="unlabeled", disableCache=False):
"""
@see: L{IDataStore.newTransaction}
"""
@@ -199,12 +199,14 @@
self.notifierFactory if self._enableNotifications else None,
label,
self._migrating,
+ disableCache
)
-
if self.logTransactionWaits or self.timeoutTransactions:
- CommonStoreTransactionMonitor(txn, self.logTransactionWaits, self.timeoutTransactions)
+ CommonStoreTransactionMonitor(txn, self.logTransactionWaits,
+ self.timeoutTransactions)
return txn
+
def setMigrating(self, state):
"""
Set the "migrating" state
@@ -312,7 +314,7 @@
def __init__(self, store, sqlTxn,
enableCalendars, enableAddressBooks,
- notifierFactory, label, migrating=False):
+ notifierFactory, label, migrating=False, disableCache=False):
self._store = store
self._calendarHomes = {}
self._addressbookHomes = {}
@@ -324,6 +326,11 @@
self._label = label
self._migrating = migrating
self._primaryHomeType = None
+ self._disableCache = disableCache
+ if disableCache:
+ self._queryCacher = None
+ else:
+ self._queryCacher = store.queryCacher
CommonStoreTransaction.id += 1
self._txid = CommonStoreTransaction.id
@@ -846,6 +853,15 @@
returnValue(count)
+class _EmptyCacher(object):
+ def set(self, key, value):
+ return succeed(True)
+ def get(self, key, withIdentifier=False):
+ return succeed(None)
+ def delete(self, key):
+ return succeed(True)
+
+
class CommonHome(LoggingMixIn):
# All these need to be initialized by derived classes for each store type
@@ -877,6 +893,8 @@
self._created = None
self._modified = None
self._syncTokenRevision = None
+ if transaction._disableCache:
+ self._cacher = _EmptyCacher()
# Needed for REVISION/BIND table join
self._revisionBindJoinTable = {}
@@ -937,7 +955,7 @@
if result:
self._resourceID = result[0][0]
- queryCacher = self._txn.store().queryCacher
+ queryCacher = self._txn._queryCacher
if queryCacher:
# Get cached copy
cacheKey = queryCacher.keyForHomeMetaData(self._resourceID)
@@ -1519,7 +1537,7 @@
try:
self._modified = (yield self._txn.subtransaction(_bumpModified, retries=0, failureOK=True))[0][0]
- queryCacher = self._txn.store().queryCacher
+ queryCacher = self._txn._queryCacher
if queryCacher is not None:
cacheKey = queryCacher.keyForHomeMetaData(self._resourceID)
yield queryCacher.invalidateAfterCommit(self._txn, cacheKey)
@@ -2285,7 +2303,7 @@
exists.
"""
data = None
- queryCacher = home._txn.store().queryCacher
+ queryCacher = home._txn._queryCacher
# Only caching non-shared objects so that we don't need to invalidate
# in sql_legacy
if owned and queryCacher:
@@ -2447,7 +2465,7 @@
resource ID. We read in and cache all the extra metadata from the DB to
avoid having to do DB queries for those individually later.
"""
- queryCacher = self._txn.store().queryCacher
+ queryCacher = self._txn._queryCacher
if queryCacher:
# Retrieve from cache
cacheKey = queryCacher.keyForHomeChildMetaData(self._resourceID)
@@ -2521,7 +2539,7 @@
"""
oldName = self._name
- queryCacher = self._home._txn.store().queryCacher
+ queryCacher = self._home._txn._queryCacher
if queryCacher:
cacheKey = queryCacher.keyForObjectWithName(self._home._resourceID, oldName)
yield queryCacher.invalidateAfterCommit(self._home._txn, cacheKey)
@@ -2554,7 +2572,7 @@
@inlineCallbacks
def remove(self):
- queryCacher = self._home._txn.store().queryCacher
+ queryCacher = self._home._txn._queryCacher
if queryCacher:
cacheKey = queryCacher.keyForObjectWithName(self._home._resourceID, self._name)
yield queryCacher.invalidateAfterCommit(self._home._txn, cacheKey)
@@ -2981,7 +2999,7 @@
try:
self._modified = (yield self._txn.subtransaction(_bumpModified, retries=0, failureOK=True))[0][0]
- queryCacher = self._txn.store().queryCacher
+ queryCacher = self._txn._queryCacher
if queryCacher is not None:
cacheKey = queryCacher.keyForHomeChildMetaData(self._resourceID)
yield queryCacher.invalidateAfterCommit(self._txn, cacheKey)
@@ -4191,7 +4209,7 @@
"""
Fix all case normalization for a given store.
"""
- t = store.newTransaction()
+ t = store.newTransaction(disableCache=True)
try:
yield _normalizeHomeUUIDsIn(t, ECALENDARTYPE)
yield _normalizeHomeUUIDsIn(t, EADDRESSBOOKTYPE)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120524/d2a3ace7/attachment-0001.html>
More information about the calendarserver-changes
mailing list