[FIX] dbmanager: backup allow pg_dump custom dump to be larger than diskspace

- delete a forgotten print
- allow pg_dump custom dumps to be larger than the available disk size, the
  previous commit allowed dumps to be larger than memory, this one remove this
  limitation. zip dumps are still limited to by the disk size.
This commit is contained in:
Antony Lesuisse 2015-01-19 02:42:34 +01:00
parent ec9a543014
commit c1c8ac7d7f
2 changed files with 16 additions and 13 deletions

View File

@ -733,7 +733,7 @@ class Database(http.Controller):
('Content-Type', 'application/octet-stream; charset=binary'),
('Content-Disposition', content_disposition(filename)),
]
dump_stream = openerp.service.db.dump_db_stream(backup_db, backup_format)
dump_stream = openerp.service.db.dump_db(backup_db, None, backup_format)
response = werkzeug.wrappers.Response(dump_stream, headers=headers, direct_passthrough=True)
response.set_cookie('fileToken', token)
return response

View File

@ -168,7 +168,10 @@ def dump_db_manifest(cr):
return manifest
def dump_db(db_name, stream, backup_format='zip'):
"""Dump database `db` into file-like object `stream`"""
"""Dump database `db` into file-like object `stream` if stream is None
return a file object with the dump """
_logger.info('DUMP DB: %s format %s', db_name, backup_format)
cmd = ['pg_dump', '--no-owner']
if openerp.tools.config['db_user']:
@ -191,20 +194,20 @@ def dump_db(db_name, stream, backup_format='zip'):
json.dump(manifest, fh, indent=4)
cmd.insert(-1, '--file=' + os.path.join(dump_dir, 'dump.sql'))
openerp.tools.exec_pg_command(*cmd)
openerp.tools.osutil.zip_dir(dump_dir, stream, include_dir=False)
if stream:
openerp.tools.osutil.zip_dir(dump_dir, stream, include_dir=False)
else:
t=tempfile.TemporaryFile()
openerp.tools.osutil.zip_dir(dump_dir, t, include_dir=False)
t.seek(0)
return t
else:
cmd.insert(-1, '--format=c')
print cmd
stdin, stdout = openerp.tools.exec_pg_command_pipe(*cmd)
shutil.copyfileobj(stdout, stream)
_logger.info('DUMP DB successful: %s', db_name)
def dump_db_stream(db_name, backup_format='zip'):
t=tempfile.TemporaryFile()
dump_db(db_name, t, backup_format)
t.seek(0)
return t
if stream:
shutil.copyfileobj(stdout, stream)
else:
return stdout
def exp_restore(db_name, data, copy=False):
data_file = tempfile.NamedTemporaryFile(delete=False)