From 613e70a056b418d82da62fc7d18c8da98030a07d Mon Sep 17 00:00:00 2001 From: Sergey Abramov Date: Fri, 15 Apr 2016 15:40:48 +0300 Subject: [PATCH] Fix problem with pq dump restore Copy data to psql stdin using shutil.copyfileobj Change-Id: Ia77d45d01ee9c3d11049c003e7640c086a8da20f Closes-bug: 1570371 (cherry picked from commit 95db28139cc9d5c38a05b58f31142e542ff5e23d) --- octane/handlers/backup_restore/postgres.py | 3 ++- octane/tests/test_archivators_restore.py | 10 ++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/octane/handlers/backup_restore/postgres.py b/octane/handlers/backup_restore/postgres.py index 6f8e982f..ee170817 100644 --- a/octane/handlers/backup_restore/postgres.py +++ b/octane/handlers/backup_restore/postgres.py @@ -14,6 +14,7 @@ import json import logging import os import requests +import shutil import six import urlparse import yaml @@ -57,7 +58,7 @@ class PostgresArchivator(base.CmdArchivator): with docker.in_container("postgres", ["sudo", "-u", "postgres", "psql"], stdin=subprocess.PIPE) as process: - process.stdin.write(dump.read()) + shutil.copyfileobj(dump, process.stdin) docker.start_container(self.db) diff --git a/octane/tests/test_archivators_restore.py b/octane/tests/test_archivators_restore.py index ba5bf31a..8aa07aae 100644 --- a/octane/tests/test_archivators_restore.py +++ b/octane/tests/test_archivators_restore.py @@ -39,6 +39,7 @@ class TestMember(object): self.path = '' self.is_extracted = False self.dump = "" + self.read_idx = 0 def isfile(self): return self.is_file @@ -48,8 +49,13 @@ class TestMember(object): if self.is_extracted and path: assert os.path.join(path, "/") == os.path.join(self.path, "/") - def read(self): - return self.dump + def read(self, chunk_size=None): + current_idx = self.read_idx + if chunk_size: + self.read_idx += chunk_size + else: + self.read_idx = len(self.dump) + return self.dump[current_idx: self.read_idx] class TestArchive(object):