From 2a8516d8c78edd519ad0b5e7098334a4b499d4d0 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 80392d5d..f72bb5e9 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 @@ -60,7 +61,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) docker.wait_for_container(self.db) subprocess.call([ diff --git a/octane/tests/test_archivators_restore.py b/octane/tests/test_archivators_restore.py index 94660db7..2571d34f 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):