[FIX] ormcache: correct stat counter usage.
This commit is contained in:
parent
cad5dffdfa
commit
d1031c34ac
|
@ -59,26 +59,27 @@ class ormcache(object):
|
||||||
return lookup
|
return lookup
|
||||||
|
|
||||||
def lru(self, model):
|
def lru(self, model):
|
||||||
return model.pool.cache, (model._name, self.method)
|
counter = STAT[(model.pool.db_name, model._name, self.method)]
|
||||||
|
return model.pool.cache, (model._name, self.method), counter
|
||||||
|
|
||||||
def lookup(self, method, *args, **kwargs):
|
def lookup(self, method, *args, **kwargs):
|
||||||
d, key0 = self.lru(args[0])
|
d, key0, counter = self.lru(args[0])
|
||||||
key = key0 + args[self.skiparg:]
|
key = key0 + args[self.skiparg:]
|
||||||
try:
|
try:
|
||||||
r = d[key]
|
r = d[key]
|
||||||
STAT[key0].hit += 1
|
counter.hit += 1
|
||||||
return r
|
return r
|
||||||
except KeyError:
|
except KeyError:
|
||||||
STAT[key0].miss += 1
|
counter.miss += 1
|
||||||
value = d[key] = self.method(*args, **kwargs)
|
value = d[key] = self.method(*args, **kwargs)
|
||||||
return value
|
return value
|
||||||
except TypeError:
|
except TypeError:
|
||||||
STAT[key0].err += 1
|
counter.err += 1
|
||||||
return self.method(*args, **kwargs)
|
return self.method(*args, **kwargs)
|
||||||
|
|
||||||
def clear(self, model, *args):
|
def clear(self, model, *args):
|
||||||
""" Remove *args entry from the cache or all keys if *args is undefined """
|
""" Remove *args entry from the cache or all keys if *args is undefined """
|
||||||
d, key0 = self.lru(model)
|
d, key0, _ = self.lru(model)
|
||||||
if args:
|
if args:
|
||||||
_logger.warn("ormcache.clear arguments are deprecated and ignored "
|
_logger.warn("ormcache.clear arguments are deprecated and ignored "
|
||||||
"(while clearing caches on (%s).%s)",
|
"(while clearing caches on (%s).%s)",
|
||||||
|
@ -99,7 +100,7 @@ class ormcache_context(ormcache):
|
||||||
return super(ormcache_context, self).__call__(method)
|
return super(ormcache_context, self).__call__(method)
|
||||||
|
|
||||||
def lookup(self, method, *args, **kwargs):
|
def lookup(self, method, *args, **kwargs):
|
||||||
d, key0 = self.lru(args[0])
|
d, key0, counter = self.lru(args[0])
|
||||||
|
|
||||||
# Note. The decorator() wrapper (used in __call__ above) will resolve
|
# Note. The decorator() wrapper (used in __call__ above) will resolve
|
||||||
# arguments, and pass them positionally to lookup(). This is why context
|
# arguments, and pass them positionally to lookup(). This is why context
|
||||||
|
@ -114,14 +115,14 @@ class ormcache_context(ormcache):
|
||||||
key = key0 + args[self.skiparg:self.context_pos] + tuple(ckey)
|
key = key0 + args[self.skiparg:self.context_pos] + tuple(ckey)
|
||||||
try:
|
try:
|
||||||
r = d[key]
|
r = d[key]
|
||||||
STAT[key0].hit += 1
|
counter.hit += 1
|
||||||
return r
|
return r
|
||||||
except KeyError:
|
except KeyError:
|
||||||
STAT[key0].miss += 1
|
counter.miss += 1
|
||||||
value = d[key] = self.method(*args, **kwargs)
|
value = d[key] = self.method(*args, **kwargs)
|
||||||
return value
|
return value
|
||||||
except TypeError:
|
except TypeError:
|
||||||
STAT[key0].err += 1
|
counter.err += 1
|
||||||
return self.method(*args, **kwargs)
|
return self.method(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
@ -132,7 +133,7 @@ class ormcache_multi(ormcache):
|
||||||
self.multi = multi
|
self.multi = multi
|
||||||
|
|
||||||
def lookup(self, method, *args, **kwargs):
|
def lookup(self, method, *args, **kwargs):
|
||||||
d, key0 = self.lru(args[0])
|
d, key0, counter = self.lru(args[0])
|
||||||
base_key = key0 + args[self.skiparg:self.multi] + args[self.multi+1:]
|
base_key = key0 + args[self.skiparg:self.multi] + args[self.multi+1:]
|
||||||
ids = args[self.multi]
|
ids = args[self.multi]
|
||||||
result = {}
|
result = {}
|
||||||
|
@ -143,9 +144,9 @@ class ormcache_multi(ormcache):
|
||||||
key = base_key + (i,)
|
key = base_key + (i,)
|
||||||
try:
|
try:
|
||||||
result[i] = d[key]
|
result[i] = d[key]
|
||||||
STAT[key0].hit += 1
|
counter.hit += 1
|
||||||
except Exception:
|
except Exception:
|
||||||
STAT[key0].miss += 1
|
counter.miss += 1
|
||||||
missed.append(i)
|
missed.append(i)
|
||||||
|
|
||||||
if missed:
|
if missed:
|
||||||
|
@ -183,9 +184,9 @@ def log_ormcache_stats(sig=None, frame=None):
|
||||||
me = threading.currentThread()
|
me = threading.currentThread()
|
||||||
me_dbname = me.dbname
|
me_dbname = me.dbname
|
||||||
entries = defaultdict(int)
|
entries = defaultdict(int)
|
||||||
for reg in RegistryManager.registries.itervalues():
|
for dbname, reg in RegistryManager.registries.iteritems():
|
||||||
for key in reg.cache.iterkeys():
|
for key in reg.cache.iterkeys():
|
||||||
entries[key[:3]] += 1
|
entries[(dbname,) + key[:2]] += 1
|
||||||
for key, count in sorted(entries.items()):
|
for key, count in sorted(entries.items()):
|
||||||
dbname, model_name, method = key
|
dbname, model_name, method = key
|
||||||
me.dbname = dbname
|
me.dbname = dbname
|
||||||
|
|
Loading…
Reference in New Issue