Log message for revision 115383: Expand test isolation to cover all global state, include default map functionality inspired by experimental.catalogqueryplan
Changed: U Zope/trunk/src/Products/ZCatalog/plan.py -=- Modified: Zope/trunk/src/Products/ZCatalog/plan.py =================================================================== --- Zope/trunk/src/Products/ZCatalog/plan.py 2010-08-02 19:06:42 UTC (rev 115382) +++ Zope/trunk/src/Products/ZCatalog/plan.py 2010-08-02 19:13:04 UTC (rev 115383) @@ -13,11 +13,14 @@ import time from collections import namedtuple +from logging import getLogger +from os import environ from thread import allocate_lock from Acquisition import aq_base from Acquisition import aq_parent from Products.PluginIndexes.interfaces import IUniqueValueIndex +from zope.dottedname.resolve import resolve MAX_DISTINCT_VALUES = 10 REFRESH_RATE = 100 @@ -29,7 +32,9 @@ RecentQuery = namedtuple('RecentQuery', ['duration', 'details']) Report = namedtuple('Report', ['hits', 'duration', 'last']) +logger = getLogger('Products.ZCatalog') + class PriorityMap(object): """This holds a query key to Benchmark mapping.""" @@ -45,7 +50,28 @@ with cls.lock: cls.value[key] = value + @classmethod + def clear(cls): + with cls.lock: + cls.value = {} + @classmethod + def load_default(cls): + location = environ.get('ZCATALOGQUERYPLAN') + if location: + try: + pmap = resolve(location) + logger.info('loaded priority %d map(s) from %s', + len(pmap), location) + with cls.lock: + cls.value = pmap.copy() + except ImportError: + logger.warning('could not load priority map from %s', location) + +# Load a default map +PriorityMap.load_default() + + class Reports(object): """This holds a structure of nested dicts. @@ -70,8 +96,9 @@ cls.value[key] = value @classmethod - def clear(cls, key): - cls.set(key, {}) + def clear(cls): + with cls.lock: + cls.value = {} @classmethod def get_entry(cls, key, key2): @@ -88,7 +115,11 @@ with cls.lock: outer[key2] = value + @classmethod + def clear_entry(cls, key): + cls.set(key, {}) + class ValueIndexes(object): """Holds a set of index names considered to have an uneven value distribution. @@ -140,11 +171,7 @@ cls.set(frozenset(value_indexes)) return value_indexes -from zope.testing.cleanup import addCleanUp -addCleanUp(ValueIndexes.clear) -del addCleanUp - def make_key(catalog, query): if not query: return None @@ -276,7 +303,7 @@ Reports.set_entry(self.cid, key, Report(1, total, recent)) def reset(self): - Reports.clear(self.cid) + Reports.clear_entry(self.cid) def report(self): """Returns a statistic report of catalog queries as list of dicts. @@ -299,3 +326,11 @@ rval.append(info) return rval + + +# Make sure we provide test isolation +from zope.testing.cleanup import addCleanUp +addCleanUp(PriorityMap.clear) +addCleanUp(Reports.clear) +addCleanUp(ValueIndexes.clear) +del addCleanUp _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org https://mail.zope.org/mailman/listinfo/zope-checkins