in automation/tinc/main/ext/qautils/gppylib/operations/restore.py [0:0]
def execute(self):
(restore_timestamp, restore_db, compress) = ValidateTimestamp(master_datadir = self.master_datadir,
candidate_timestamp = self.restore_timestamp,
ddboost = self.ddboost).run()
dump_file = os.path.join(self.master_datadir, DUMP_DIR, restore_timestamp[0:8], "%s%s" % (MASTER_DBDUMP_PREFIX, restore_timestamp))
if compress:
dump_file += '.gz'
if self.ddboost:
from_file = os.path.join(DUMP_DIR, restore_timestamp[0:8], "%s%s" % (MASTER_DBDUMP_PREFIX, restore_timestamp))
if compress:
from_file += '.gz'
ret = []
schema = ''
owner = ''
if compress:
cmd = Command('DDBoost copy of master dump file',
'gpddboost --readFile --from-file=%s | gunzip | grep -e "SET search_path = " -e "-- Data for Name: " -e "COPY "'
% (from_file))
else:
cmd = Command('DDBoost copy of master dump file',
'gpddboost --readFile --from-file=%s | grep -e "SET search_path = " -e "-- Data for Name: " -e "COPY "'
% (from_file))
# TODO: The code below is duplicated from the code for local restore
# We need to refactor this. Probably use the same String IO interfaces
# to extract lines in both the cases.
cmd.run(validateAfter = True)
line_list = cmd.get_results().stdout.splitlines()
for line in line_list:
if line.startswith("SET search_path = "):
line = line[len("SET search_path = ") : ]
if ", pg_catalog;" in line:
schema = line[ : line.index(", pg_catalog;")]
else:
schema = "pg_catalog"
elif line.startswith("-- Data for Name: "):
owner = line[line.index("; Owner: ") + 9 : ].rstrip()
elif line.startswith("COPY "):
table = line[5:]
if table.rstrip().endswith(") FROM stdin;"):
if table.startswith("\""):
table = table[: table.index("\" (") + 1]
else:
table = table[: table.index(" (")]
else:
table = table[: table.index(" FROM stdin;")]
table = table.rstrip()
ret.append( (schema, table, owner) )
return ret
else:
f = None
schema = ''
owner = ''
ret = []
try:
if compress:
f = gzip.open(dump_file, 'r')
else:
f = open(dump_file, 'r')
while True:
line = f.readline()
if not line:
break
if line.startswith("SET search_path = "):
line = line[len("SET search_path = ") : ]
if ", pg_catalog;" in line:
schema = line[ : line.index(", pg_catalog;")]
else:
schema = "pg_catalog"
elif line.startswith("-- Data for Name: "):
owner = line[line.index("; Owner: ") + 9 : ].rstrip()
elif line.startswith("COPY "):
table = line[5:]
if table.rstrip().endswith(") FROM stdin;"):
if table.startswith("\""):
table = table[: table.index("\" (") + 1]
else:
table = table[: table.index(" (")]
else:
table = table[: table.index(" FROM stdin;")]
table = table.rstrip()
ret.append( (schema, table, owner) )
finally:
if f is not None:
f.close()
return ret