[FIX] db manager: do not use registry to backup a database
Do not load registry to backup a database. This is allows backing up databases whose registry cannot be instantiated at the moment (wrong version, missing modules, etc.) Closes #5775
This commit is contained in:
parent
8ad11055bb
commit
27d1199e90
|
@ -155,8 +155,8 @@ def exp_dump(db_name):
|
||||||
|
|
||||||
def dump_db_manifest(cr):
|
def dump_db_manifest(cr):
|
||||||
pg_version = "%d.%d" % divmod(cr._obj.connection.server_version / 100, 100)
|
pg_version = "%d.%d" % divmod(cr._obj.connection.server_version / 100, 100)
|
||||||
env = openerp.api.Environment(cr, SUPERUSER_ID, {})
|
cr.execute("SELECT name, latest_version FROM ir_module_module WHERE state = 'installed'")
|
||||||
modules = dict([(i.name,i.latest_version) for i in env['ir.module.module'].search([('state','=','installed')])])
|
modules = dict(cr.fetchall())
|
||||||
manifest = {
|
manifest = {
|
||||||
'odoo_dump': '1',
|
'odoo_dump': '1',
|
||||||
'db_name': cr.dbname,
|
'db_name': cr.dbname,
|
||||||
|
@ -185,14 +185,13 @@ def dump_db(db_name, stream, backup_format='zip'):
|
||||||
|
|
||||||
if backup_format == 'zip':
|
if backup_format == 'zip':
|
||||||
with openerp.tools.osutil.tempdir() as dump_dir:
|
with openerp.tools.osutil.tempdir() as dump_dir:
|
||||||
registry = openerp.modules.registry.RegistryManager.get(db_name)
|
filestore = openerp.tools.config.filestore(db_name)
|
||||||
with registry.cursor() as cr:
|
if os.path.exists(filestore):
|
||||||
filestore = registry['ir.attachment']._filestore(cr, SUPERUSER_ID)
|
shutil.copytree(filestore, os.path.join(dump_dir, 'filestore'))
|
||||||
if os.path.exists(filestore):
|
with open(os.path.join(dump_dir, 'manifest.json'), 'w') as fh:
|
||||||
shutil.copytree(filestore, os.path.join(dump_dir, 'filestore'))
|
db = openerp.sql_db.db_connect(db_name)
|
||||||
manifest = dump_db_manifest(cr)
|
with db.cursor() as cr:
|
||||||
with open(os.path.join(dump_dir, 'manifest.json'), 'w') as fh:
|
json.dump(dump_db_manifest(cr), fh, indent=4)
|
||||||
json.dump(manifest, fh, indent=4)
|
|
||||||
cmd.insert(-1, '--file=' + os.path.join(dump_dir, 'dump.sql'))
|
cmd.insert(-1, '--file=' + os.path.join(dump_dir, 'dump.sql'))
|
||||||
openerp.tools.exec_pg_command(*cmd)
|
openerp.tools.exec_pg_command(*cmd)
|
||||||
if stream:
|
if stream:
|
||||||
|
|
Loading…
Reference in New Issue