Skip to content

Commit da283d3

Browse files
committed
tests: added tests.merge.MergeTest.test_idempotent_merge
1 parent 15228f3 commit da283d3

File tree

1 file changed

+74
-10
lines changed

1 file changed

+74
-10
lines changed

tests/merge.py

+74-10
Original file line numberDiff line numberDiff line change
@@ -2308,17 +2308,81 @@ def test_smart_merge(self):
23082308
# Clean after yourself
23092309
self.del_test_dir(module_name, fname)
23102310

2311+
def test_idempotent_merge(self):
2312+
"""
2313+
"""
2314+
fname = self.id().split('.')[3]
2315+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
2316+
node = self.make_simple_node(
2317+
base_dir=os.path.join(module_name, fname, 'node'),
2318+
set_replication=True,
2319+
initdb_params=['--data-checksums'],
2320+
pg_options={'autovacuum': 'off'})
2321+
2322+
self.init_pb(backup_dir)
2323+
self.add_instance(backup_dir, 'node', node)
2324+
self.set_archiving(backup_dir, 'node', node)
2325+
node.slow_start()
2326+
2327+
# add database
2328+
node.safe_psql(
2329+
'postgres',
2330+
'CREATE DATABASE testdb')
2331+
2332+
# take FULL backup
2333+
full_id = self.backup_node(
2334+
backup_dir, 'node', node, options=['--stream'])
2335+
2336+
# create database
2337+
node.safe_psql(
2338+
'postgres',
2339+
'create DATABASE testdb1')
2340+
2341+
# take PAGE backup
2342+
page_id = self.backup_node(
2343+
backup_dir, 'node', node, backup_type='page')
2344+
2345+
# create database
2346+
node.safe_psql(
2347+
'postgres',
2348+
'create DATABASE testdb2')
2349+
2350+
page_id_2 = self.backup_node(
2351+
backup_dir, 'node', node, backup_type='page')
2352+
2353+
gdb = self.merge_backup(
2354+
backup_dir, 'node', page_id_2,
2355+
gdb=True, options=['--log-level-console=verbose'])
2356+
2357+
gdb.set_breakpoint('delete_backup_files')
2358+
gdb.run_until_break()
2359+
gdb.remove_all_breakpoints()
2360+
2361+
gdb.set_breakpoint('rename')
2362+
gdb.continue_execution_until_break()
2363+
gdb.continue_execution_until_break(2)
2364+
2365+
gdb._execute('signal SIGKILL')
2366+
2367+
show_backups = self.show_pb(backup_dir, "node")
2368+
self.assertEqual(len(show_backups), 1)
2369+
2370+
self.assertEqual(
2371+
'MERGED', self.show_pb(backup_dir, 'node')[0]['status'])
2372+
2373+
self.assertEqual(
2374+
full_id, self.show_pb(backup_dir, 'node')[0]['id'])
2375+
2376+
self.merge_backup(backup_dir, 'node', page_id_2)
2377+
2378+
self.assertEqual(
2379+
'OK', self.show_pb(backup_dir, 'node')[0]['status'])
23112380

2312-
# 1. always use parent link when merging (intermediates may be from different chain)
2313-
# 2. page backup we are merging with may disappear after failed merge,
2314-
# it should not be possible to continue merge after that
2315-
# PAGE_A MERGING (disappear)
2316-
# FULL MERGING
2381+
self.assertEqual(
2382+
page_id_2, self.show_pb(backup_dir, 'node')[0]['id'])
23172383

2318-
# FULL MERGING
23192384

2320-
# PAGE_B OK (new backup)
2321-
# FULL MERGING
2385+
self.del_test_dir(module_name, fname)
23222386

2323-
# 3. Need new test with corrupted FULL backup
2324-
# 4. different compression levels
2387+
# 1. Need new test with corrupted FULL backup
2388+
# 2. different compression levels

0 commit comments

Comments
 (0)