Speed up bootstrap of the server (and remove sql import)
review292001
This commit is contained in:
1 parent
bf3cf905ab
commit
423983c5de
3 files changed
+51
-70
No files matched your search
+37
-57
@@ -90,9 +90,6 @@ class Node(Singleton):
|
||||
node.depth = max(self.depth + 1, node.depth)
|
||||
if node not in self.all_childs():
|
||||
self.childs.append(node)
|
||||
for attr in ('init', 'update'):
|
||||
if hasattr(self, attr):
|
||||
setattr(node, attr, True)
|
||||
self.childs.sort(key=operator.attrgetter('name'))
|
||||
|
||||
def all_childs(self):
|
||||
@@ -128,9 +125,7 @@ class Node(Singleton):
|
||||
res += '%s`-> %s' % (' ' * depth, child.pprint(depth + 1))
|
||||
return res
|
||||
|
||||
def create_graph(module_list, force=None):
|
||||
if force is None:
|
||||
force = []
|
||||
def create_graph(module_list):
|
||||
graph = Graph()
|
||||
packages = []
|
||||
|
||||
@@ -177,12 +172,6 @@ def create_graph(module_list, force=None):
|
||||
graph.add_node(package, all_deps)
|
||||
node = Node(package, graph)
|
||||
node.info = info
|
||||
for kind in ('init', 'update'):
|
||||
if (package in CONFIG[kind]) \
|
||||
or (('all' in CONFIG[kind]) \
|
||||
and (package != 'test')) \
|
||||
or (kind in force):
|
||||
setattr(node, kind, True)
|
||||
else:
|
||||
later.add(package)
|
||||
packages.append((package, deps, xdep, info))
|
||||
@@ -195,6 +184,15 @@ def create_graph(module_list, force=None):
|
||||
raise Exception('%s unmet dependencies: %s' % (package, missings))
|
||||
return graph, packages, later
|
||||
|
||||
|
||||
def is_module_to_install(module):
|
||||
for kind in ('init', 'update'):
|
||||
if 'all' in CONFIG[kind] and module != 'test':
|
||||
return True
|
||||
elif module in CONFIG[kind]:
|
||||
return True
|
||||
return False
|
||||
|
||||
def load_module_graph(graph, pool, lang=None):
|
||||
if lang is None:
|
||||
lang = [CONFIG['language']]
|
||||
@@ -204,12 +202,10 @@ def load_module_graph(graph, pool, lang=None):
|
||||
cursor = Transaction().cursor
|
||||
|
||||
modules = [x.name for x in graph]
|
||||
cursor.execute('SELECT name, state FROM ir_module_module ' \
|
||||
'WHERE name in (' + ','.join(('%s',) * len(modules)) + ')',
|
||||
modules)
|
||||
module2state = {}
|
||||
for name, state in cursor.fetchall():
|
||||
module2state[name] = state
|
||||
cursor.execute('SELECT name, state FROM ir_module_module '
|
||||
'WHERE name in (' + ','.join(('%s',) * len(modules)) + ')',
|
||||
modules)
|
||||
module2state = dict(cursor.fetchall())
|
||||
|
||||
for package in graph:
|
||||
module = package.name
|
||||
@@ -219,10 +215,8 @@ def load_module_graph(graph, pool, lang=None):
|
||||
sys.stdout.flush()
|
||||
objects = pool.instanciate(module)
|
||||
package_state = module2state.get(module, 'uninstalled')
|
||||
if hasattr(package, 'init') \
|
||||
or hasattr(package, 'update') \
|
||||
or (package_state in ('to install', 'to upgrade')):
|
||||
|
||||
if (is_module_to_install(module)
|
||||
or package_state in ('to install', 'to upgrade')):
|
||||
for type in objects.keys():
|
||||
for obj in objects[type]:
|
||||
logger.info('%s:init %s' % (module, obj._name))
|
||||
@@ -236,23 +230,10 @@ def load_module_graph(graph, pool, lang=None):
|
||||
|
||||
for filename in package.info.get('xml', []):
|
||||
filename = filename.replace('/', os.sep)
|
||||
mode = 'update'
|
||||
if hasattr(package, 'init') or package_state == 'to install':
|
||||
mode = 'init'
|
||||
logger.info('%s:loading %s' % (module, filename))
|
||||
ext = os.path.splitext(filename)[1]
|
||||
if ext == '.sql':
|
||||
if mode == 'init':
|
||||
with tools.file_open(OPJ(module, filename)) as fp:
|
||||
queries = fp.read().split(';')
|
||||
for query in queries:
|
||||
new_query = ' '.join(query.split())
|
||||
if new_query:
|
||||
cursor.execute(new_query)
|
||||
else:
|
||||
# Feed the parser with xml content:
|
||||
with tools.file_open(OPJ(module, filename)) as fp:
|
||||
tryton_parser.parse_xmlstream(fp)
|
||||
# Feed the parser with xml content:
|
||||
with tools.file_open(OPJ(module, filename)) as fp:
|
||||
tryton_parser.parse_xmlstream(fp)
|
||||
|
||||
modules_todo.append((module, list(tryton_parser.to_delete)))
|
||||
|
||||
@@ -271,23 +252,23 @@ def load_module_graph(graph, pool, lang=None):
|
||||
"WHERE name = %s", (package.name,))
|
||||
module2state[package.name] = 'installed'
|
||||
|
||||
# Create missing reports
|
||||
from trytond.report import Report
|
||||
report_obj = pool.get('ir.action.report')
|
||||
report_ids = report_obj.search([
|
||||
('module', '=', module),
|
||||
])
|
||||
report_names = pool.object_name_list(type='report')
|
||||
for report in report_obj.browse(report_ids):
|
||||
report_name = report.report_name
|
||||
if report_name not in report_names:
|
||||
report = object.__new__(Report)
|
||||
report._name = report_name
|
||||
pool.add(report, type='report')
|
||||
report.__init__()
|
||||
|
||||
cursor.commit()
|
||||
|
||||
# Create missing reports
|
||||
from trytond.report import Report
|
||||
report_obj = pool.get('ir.action.report')
|
||||
report_ids = report_obj.search([
|
||||
('module', '=', module),
|
||||
])
|
||||
report_names = pool.object_name_list(type='report')
|
||||
for report in report_obj.browse(report_ids):
|
||||
report_name = report.report_name
|
||||
if report_name not in report_names:
|
||||
report = object.__new__(Report)
|
||||
report._name = report_name
|
||||
pool.add(report, type='report')
|
||||
report.__init__()
|
||||
|
||||
for model_name in models_to_update_history:
|
||||
model = pool.get(model_name)
|
||||
if model._history:
|
||||
@@ -384,7 +365,6 @@ def load_modules(database_name, pool, update=False, lang=None):
|
||||
Transaction().reset_context())
|
||||
with contextmanager:
|
||||
cursor = Transaction().cursor
|
||||
force = []
|
||||
if update:
|
||||
if 'all' in CONFIG['init']:
|
||||
cursor.execute("SELECT name FROM ir_module_module " \
|
||||
@@ -404,7 +384,7 @@ def load_modules(database_name, pool, update=False, lang=None):
|
||||
for module in CONFIG['update'].keys():
|
||||
if CONFIG['update'][module]:
|
||||
module_list.append(module)
|
||||
graph = create_graph(module_list, force)[0]
|
||||
graph = create_graph(module_list)[0]
|
||||
|
||||
try:
|
||||
load_module_graph(graph, pool, lang)
|
||||
@@ -430,8 +410,8 @@ def load_modules(database_name, pool, update=False, lang=None):
|
||||
cursor.commit()
|
||||
res = False
|
||||
|
||||
module_obj = pool.get('ir.module.module')
|
||||
module_obj.update_list()
|
||||
module_obj = pool.get('ir.module.module')
|
||||
module_obj.update_list()
|
||||
cursor.commit()
|
||||
Cache.resets(database_name)
|
||||
return res
|
||||
+2
-4
@@ -96,10 +96,8 @@ class Pool(object):
|
||||
def init(self, update=False, lang=None):
|
||||
'''
|
||||
Init pool
|
||||
|
||||
:param database_name: the database name
|
||||
:param update: a boolean to proceed to update
|
||||
:param lang: a list of language code to be updated
|
||||
Set update to proceed to update
|
||||
lang is a list of language code to be updated
|
||||
'''
|
||||
logger = logging.getLogger('pool')
|
||||
logger.info('init pool for "%s"' % self.database_name)
|
||||
|
||||
+12
-9
@@ -120,15 +120,18 @@ class TrytonServer(object):
|
||||
cursor.close()
|
||||
|
||||
for db_name in CONFIG["db_name"]:
|
||||
cursor = Database(db_name).connect().cursor()
|
||||
try:
|
||||
if not cursor.test():
|
||||
raise Exception("'%s' is not a Tryton database!" % db_name)
|
||||
cursor.execute('SELECT code FROM ir_lang ' \
|
||||
'WHERE translatable')
|
||||
lang = [x[0] for x in cursor.fetchall()]
|
||||
finally:
|
||||
cursor.close()
|
||||
if update:
|
||||
cursor = Database(db_name).connect().cursor()
|
||||
try:
|
||||
if not cursor.test():
|
||||
raise Exception("'%s' is not a Tryton database!" % db_name)
|
||||
cursor.execute('SELECT code FROM ir_lang ' \
|
||||
'WHERE translatable')
|
||||
lang = [x[0] for x in cursor.fetchall()]
|
||||
finally:
|
||||
cursor.close()
|
||||
else:
|
||||
lang = None
|
||||
Pool(db_name).init(update=update, lang=lang)
|
||||
|
||||
for kind in ('init', 'update'):
|
||||
|
||||
Reference in new issue
Block a user