Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit aa1812e

Browse files
committed
tests: added tests.delete.DeleteTest.test_delete_wal_between_multiple_timelines
1 parent a02fec7 commit aa1812e

File tree

2 files changed

+65
-9
lines changed

2 files changed

+65
-9
lines changed

tests/delete.py

+60-1
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,11 @@ def test_delete_increment_ptrack(self):
174174

175175
# @unittest.skip("skip")
176176
def test_delete_orphaned_wal_segments(self):
177-
"""make archive node, make three full backups, delete second backup without --wal option, then delete orphaned wals via --wal option"""
177+
"""
178+
make archive node, make three full backups,
179+
delete second backup without --wal option,
180+
then delete orphaned wals via --wal option
181+
"""
178182
fname = self.id().split('.')[3]
179183
node = self.make_simple_node(
180184
base_dir=os.path.join(module_name, fname, 'node'),
@@ -239,6 +243,61 @@ def test_delete_orphaned_wal_segments(self):
239243
# Clean after yourself
240244
self.del_test_dir(module_name, fname)
241245

246+
# @unittest.skip("skip")
247+
def test_delete_wal_between_multiple_timelines(self):
248+
"""
249+
/-------B1--
250+
A1----------------A2----
251+
252+
delete A1 backup, check that WAL segments on [A1, A2) and
253+
[A1, B1) are deleted and backups B1 and A2 keep
254+
their WAL
255+
"""
256+
fname = self.id().split('.')[3]
257+
node = self.make_simple_node(
258+
base_dir=os.path.join(module_name, fname, 'node'),
259+
initdb_params=['--data-checksums'])
260+
261+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
262+
self.init_pb(backup_dir)
263+
self.add_instance(backup_dir, 'node', node)
264+
self.set_archiving(backup_dir, 'node', node)
265+
node.slow_start()
266+
267+
A1 = self.backup_node(backup_dir, 'node', node)
268+
269+
# load some data to node
270+
node.pgbench_init(scale=3)
271+
272+
node2 = self.make_simple_node(
273+
base_dir=os.path.join(module_name, fname, 'node2'))
274+
node2.cleanup()
275+
276+
self.restore_node(backup_dir, 'node', node2)
277+
node2.append_conf(
278+
'postgresql.auto.conf', "port = {0}".format(node2.port))
279+
node2.slow_start()
280+
281+
# load some more data to node
282+
node.pgbench_init(scale=3)
283+
284+
# take A2
285+
A2 = self.backup_node(backup_dir, 'node', node)
286+
287+
# load some more data to node2
288+
node2.pgbench_init(scale=2)
289+
290+
B1 = self.backup_node(
291+
backup_dir, 'node',
292+
node2, data_dir=node2.data_dir)
293+
294+
self.delete_pb(backup_dir, 'node', backup_id=A1, options=['--wal'])
295+
296+
self.validate_pb(backup_dir)
297+
298+
# Clean after yourself
299+
self.del_test_dir(module_name, fname)
300+
242301
# @unittest.skip("skip")
243302
def test_delete_backup_with_empty_control_file(self):
244303
"""

tests/helpers/ptrack_helpers.py

+5-8
Original file line numberDiff line numberDiff line change
@@ -737,21 +737,18 @@ def backup_node(
737737
print('You must provide ether node or data_dir for backup')
738738
exit(1)
739739

740-
if node:
741-
pgdata = node.data_dir
742-
743-
if data_dir:
744-
pgdata = data_dir
745-
746740
cmd_list = [
747741
'backup',
748742
'-B', backup_dir,
743+
'--instance={0}'.format(instance),
749744
# "-D", pgdata,
750745
'-p', '%i' % node.port,
751-
'-d', 'postgres',
752-
'--instance={0}'.format(instance)
746+
'-d', 'postgres'
753747
]
754748

749+
if data_dir:
750+
cmd_list += ['-D', data_dir]
751+
755752
# don`t forget to kill old_binary after remote ssh release
756753
if self.remote and not old_binary:
757754
options = options + [

0 commit comments

Comments
 (0)