Skip to content

Commit c36ba06

Browse files
committed
[Issue #346] tests: added tests.backup.BackupTest.test_missing_wal_segment
1 parent 9fcf990 commit c36ba06

File tree

1 file changed

+78
-1
lines changed

1 file changed

+78
-1
lines changed

tests/backup.py

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2365,7 +2365,7 @@ def test_parent_choosing_2(self):
23652365
# Clean after yourself
23662366
self.del_test_dir(module_name, fname)
23672367

2368-
@unittest.skip("skip")
2368+
# @unittest.skip("skip")
23692369
def test_backup_with_less_privileges_role(self):
23702370
"""
23712371
check permissions correctness from documentation:
@@ -3079,3 +3079,80 @@ def test_incr_backup_filenode_map(self):
30793079

30803080
# Clean after yourself
30813081
self.del_test_dir(module_name, fname)
3082+
3083+
3084+
3085+
# @unittest.skip("skip")
3086+
def test_missing_wal_segment(self):
3087+
""""""
3088+
fname = self.id().split('.')[3]
3089+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
3090+
node = self.make_simple_node(
3091+
base_dir=os.path.join(module_name, fname, 'node'),
3092+
set_replication=True,
3093+
ptrack_enable=self.ptrack,
3094+
initdb_params=['--data-checksums'],
3095+
pg_options={'archive_timeout': '30s'})
3096+
3097+
self.init_pb(backup_dir)
3098+
self.add_instance(backup_dir, 'node', node)
3099+
self.set_archiving(backup_dir, 'node', node)
3100+
node.slow_start()
3101+
3102+
node.pgbench_init(scale=10)
3103+
3104+
node.safe_psql(
3105+
'postgres',
3106+
'CREATE DATABASE backupdb')
3107+
3108+
# get segments in pg_wal, sort then and remove all but the latest
3109+
pg_wal_dir = os.path.join(node.data_dir, 'pg_wal')
3110+
3111+
if node.major_version >= 10:
3112+
pg_wal_dir = os.path.join(node.data_dir, 'pg_wal')
3113+
else:
3114+
pg_wal_dir = os.path.join(node.data_dir, 'pg_xlog')
3115+
3116+
# Full backup in streaming mode
3117+
gdb = self.backup_node(
3118+
backup_dir, 'node', node, datname='backupdb',
3119+
options=['--stream', '--log-level-file=INFO'], gdb=True)
3120+
3121+
# break at streaming start
3122+
gdb.set_breakpoint('start_WAL_streaming')
3123+
gdb.run_until_break()
3124+
3125+
# generate some more data
3126+
node.pgbench_init(scale=3)
3127+
3128+
# remove redundant WAL segments in pg_wal
3129+
files = os.listdir(pg_wal_dir)
3130+
files.sort(reverse=True)
3131+
3132+
# leave first two files in list
3133+
del files[:2]
3134+
for filename in files:
3135+
os.remove(os.path.join(pg_wal_dir, filename))
3136+
3137+
gdb.continue_execution_until_exit()
3138+
3139+
self.assertIn(
3140+
'unexpected termination of replication stream: ERROR: requested WAL segment',
3141+
gdb.output)
3142+
3143+
self.assertIn(
3144+
'has already been removed',
3145+
gdb.output)
3146+
3147+
self.assertIn(
3148+
'ERROR: Interrupted during waiting for WAL streaming',
3149+
gdb.output)
3150+
3151+
self.assertIn(
3152+
'WARNING: backup in progress, stop backup',
3153+
gdb.output)
3154+
3155+
# TODO: check the same for PAGE backup
3156+
3157+
# Clean after yourself
3158+
self.del_test_dir(module_name, fname)

0 commit comments

Comments
 (0)