[FIX] restarting a non started pool does not crash anymore
[FIX] when creating a database, the pool is restarted [FIX] when dropping a database, the caches are cleaned [IMP] add an option to specify the default cache timeout lp bug: https://launchpad.net/bugs/310986 fixed bzr revid: christophe@taupe-20081224002418-7pf9ctdzcl8ygvs7
This commit is contained in:
parent
203194ce45
commit
ca93318a77
|
@ -50,9 +50,10 @@ def get_db_and_pool(db_name, force_demo=False, status=None, update_module=False)
|
|||
return db, pool
|
||||
|
||||
|
||||
def restart_pool(db_name, force_demo=False, update_module=False):
|
||||
del pool_dic[db_name]
|
||||
return get_db_and_pool(db_name, force_demo, update_module=update_module)
|
||||
def restart_pool(db_name, force_demo=False, status=None, update_module=False):
|
||||
if db_name in pool_dic:
|
||||
del pool_dic[db_name]
|
||||
return get_db_and_pool(db_name, force_demo, status, update_module=update_module)
|
||||
|
||||
|
||||
def get_db_only(db_name):
|
||||
|
|
|
@ -82,8 +82,8 @@ class db(netsvc.Service):
|
|||
cr.commit()
|
||||
cr.close()
|
||||
cr = None
|
||||
pool = pooler.get_pool(db_name, demo, serv.actions[id],
|
||||
update_module=True)
|
||||
pool = pooler.restart_pool(db_name, demo, serv.actions[id],
|
||||
update_module=True)[1]
|
||||
|
||||
cr = sql_db.db_connect(db_name).cursor()
|
||||
|
||||
|
|
|
@ -227,7 +227,9 @@ def db_connect(db_name, serialize=0):
|
|||
return PoolManager.get(db_name)
|
||||
|
||||
def close_db(db_name):
|
||||
return PoolManager.close(db_name)
|
||||
PoolManager.close(db_name)
|
||||
tools.cache.clean_cache_for_db(db_name)
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -76,6 +76,7 @@ class configmanager(object):
|
|||
'syslog' : False,
|
||||
'log_level': logging.INFO,
|
||||
'assert_exit_level': logging.WARNING, # level above which a failed assert will be raise
|
||||
'cache_timeout': 100000,
|
||||
}
|
||||
|
||||
hasSSL = check_ssl()
|
||||
|
@ -100,6 +101,8 @@ class configmanager(object):
|
|||
parser.add_option("-i", "--init", dest="init", help="init a module (use \"all\" for all modules)")
|
||||
parser.add_option("--without-demo", dest="without_demo", help="load demo data for a module (use \"all\" for all modules)", default=False)
|
||||
parser.add_option("-u", "--update", dest="update", help="update a module (use \"all\" for all modules)")
|
||||
parser.add_option("--cache-timeout", dest="cache_timeout", help="set the timeout for the cache system", default=100000, type="int")
|
||||
|
||||
# stops the server from launching after initialization
|
||||
parser.add_option("--stop-after-init", action="store_true", dest="stop_after_init", default=False, help="stop the server after it initializes")
|
||||
parser.add_option('--debug', dest='debug_mode', action='store_true', default=False, help='enable debug mode')
|
||||
|
@ -186,7 +189,7 @@ class configmanager(object):
|
|||
self.options['pidfile'] = False
|
||||
|
||||
keys = ['interface', 'port', 'db_name', 'db_user', 'db_password', 'db_host',
|
||||
'db_port', 'logfile', 'pidfile', 'smtp_port',
|
||||
'db_port', 'logfile', 'pidfile', 'smtp_port', 'cache_timeout',
|
||||
'email_from', 'smtp_server', 'smtp_user', 'smtp_password', 'price_accuracy',
|
||||
'netinterface', 'netport', 'db_maxconn', 'import_partial', 'addons_path']
|
||||
|
||||
|
|
|
@ -536,14 +536,34 @@ class cache(object):
|
|||
Use it as a decorator of the function you plan to cache
|
||||
Timeout: 0 = no timeout, otherwise in seconds
|
||||
"""
|
||||
|
||||
def __init__(self, timeout=10000, skiparg=2, multi=None):
|
||||
|
||||
__caches = []
|
||||
|
||||
def __init__(self, timeout=None, skiparg=2, multi=None):
|
||||
assert skiparg >= 2 # at least self and cr
|
||||
self.timeout = timeout
|
||||
if timeout is None:
|
||||
self.timeout = config['cache_timeout']
|
||||
else:
|
||||
self.timeout = timeout
|
||||
self.skiparg = skiparg
|
||||
self.multi = multi
|
||||
self.lasttime = time.time()
|
||||
self.cache = {}
|
||||
|
||||
cache.__caches.append(self)
|
||||
|
||||
@classmethod
|
||||
def clean_cache_for_db(cls, dbname):
|
||||
def get_dbname_from_key(key):
|
||||
for e in key:
|
||||
if e[0] == 'dbname':
|
||||
return e[1]
|
||||
return None
|
||||
|
||||
for cache in cls.__caches:
|
||||
keys_to_del = [key for key in cache.cache if get_dbname_from_key(key) == dbname]
|
||||
for key in keys_to_del:
|
||||
del cache.cache[key]
|
||||
|
||||
def __call__(self, fn):
|
||||
arg_names = inspect.getargspec(fn)[0][self.skiparg:]
|
||||
|
|
Loading…
Reference in New Issue