Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitbd6c601

Browse files
committed
Merge branch 'master' into issue_63
2 parentscdc4224 +1e1daa0 commitbd6c601

File tree

3 files changed

+87
-21
lines changed

3 files changed

+87
-21
lines changed

‎tests/external.py

Lines changed: 80 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def test_external_simple(self):
3838

3939
# take FULL backup with external directory pointing to a file
4040
file_path=os.path.join(core_dir,'file')
41-
open(file_path,"w+")
41+
open(file_path,"w+")
4242

4343
try:
4444
self.backup_node(
@@ -2284,3 +2284,82 @@ def test_merge_external_dir_string_order(self):
22842284

22852285
# Clean after yourself
22862286
self.del_test_dir(module_name,fname)
2287+
2288+
# @unittest.skip("skip")
2289+
deftest_smart_restore_externals(self):
2290+
"""
2291+
make node, create database, take full backup with externals,
2292+
take incremental backup without externals and restore it,
2293+
make sure that files from externals are not copied during restore
2294+
https://github.com/postgrespro/pg_probackup/issues/63
2295+
"""
2296+
fname=self.id().split('.')[3]
2297+
node=self.make_simple_node(
2298+
base_dir=os.path.join(module_name,fname,'node'),
2299+
set_replication=True,
2300+
initdb_params=['--data-checksums'])
2301+
2302+
backup_dir=os.path.join(self.tmp_path,module_name,fname,'backup')
2303+
self.init_pb(backup_dir)
2304+
self.add_instance(backup_dir,'node',node)
2305+
self.set_archiving(backup_dir,'node',node)
2306+
node.slow_start()
2307+
2308+
# fill external directories with data
2309+
tmp_id=self.backup_node(backup_dir,'node',node)
2310+
2311+
external_dir_1=self.get_tblspace_path(node,'external_dir_1')
2312+
external_dir_2=self.get_tblspace_path(node,'external_dir_2')
2313+
2314+
self.restore_node(
2315+
backup_dir,'node',node,backup_id=tmp_id,
2316+
data_dir=external_dir_1,options=["-j","4"])
2317+
2318+
self.restore_node(
2319+
backup_dir,'node',node,backup_id=tmp_id,
2320+
data_dir=external_dir_2,options=["-j","4"])
2321+
2322+
self.delete_pb(backup_dir,'node',backup_id=tmp_id)
2323+
2324+
# create database
2325+
node.safe_psql(
2326+
"postgres",
2327+
"CREATE DATABASE testdb")
2328+
2329+
# take FULL backup
2330+
full_id=self.backup_node(backup_dir,'node',node)
2331+
2332+
# drop database
2333+
node.safe_psql(
2334+
"postgres",
2335+
"DROP DATABASE testdb")
2336+
2337+
# take PAGE backup
2338+
page_id=self.backup_node(
2339+
backup_dir,'node',node,backup_type='page')
2340+
2341+
# restore PAGE backup
2342+
node.cleanup()
2343+
self.restore_node(
2344+
backup_dir,'node',node,backup_id=page_id,
2345+
options=['--no-validate','--log-level-file=VERBOSE'])
2346+
2347+
logfile=os.path.join(backup_dir,'log','pg_probackup.log')
2348+
withopen(logfile,'r')asf:
2349+
logfile_content=f.read()
2350+
2351+
# get delta between FULL and PAGE filelists
2352+
filelist_full=self.get_backup_filelist(
2353+
backup_dir,'node',full_id)
2354+
2355+
filelist_page=self.get_backup_filelist(
2356+
backup_dir,'node',page_id)
2357+
2358+
filelist_diff=self.get_backup_filelist_diff(
2359+
filelist_full,filelist_page)
2360+
2361+
forfileinfilelist_diff:
2362+
self.assertNotIn(file,logfile_content)
2363+
2364+
# Clean after yourself
2365+
self.del_test_dir(module_name,fname)

‎tests/restore.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2168,6 +2168,3 @@ def test_smart_restore(self):
21682168

21692169
# Clean after yourself
21702170
self.del_test_dir(module_name,fname)
2171-
2172-
2173-
# smart restore of external dirs

‎tests/retention.py

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def test_retention_redundancy_1(self):
6767
# Clean after yourself
6868
self.del_test_dir(module_name,fname)
6969

70-
#@unittest.skip("skip")
70+
#@unittest.skip("skip")
7171
deftest_retention_window_2(self):
7272
"""purge backups using window-based retention policy"""
7373
fname=self.id().split('.')[3]
@@ -120,7 +120,7 @@ def test_retention_window_2(self):
120120
# Clean after yourself
121121
self.del_test_dir(module_name,fname)
122122

123-
#@unittest.skip("skip")
123+
#@unittest.skip("skip")
124124
deftest_retention_window_3(self):
125125
"""purge all backups using window-based retention policy"""
126126
fname=self.id().split('.')[3]
@@ -134,8 +134,7 @@ def test_retention_window_3(self):
134134
self.set_archiving(backup_dir,'node',node)
135135
node.slow_start()
136136

137-
138-
# Take FULL BACKUP
137+
# take FULL BACKUP
139138
backup_id_1=self.backup_node(backup_dir,'node',node)
140139

141140
# Take second FULL BACKUP
@@ -144,7 +143,6 @@ def test_retention_window_3(self):
144143
# Take third FULL BACKUP
145144
backup_id_3=self.backup_node(backup_dir,'node',node)
146145

147-
148146
backups=os.path.join(backup_dir,'backups','node')
149147
forbackupinos.listdir(backups):
150148
ifbackup=='pg_probackup.conf':
@@ -183,8 +181,7 @@ def test_retention_window_4(self):
183181
self.set_archiving(backup_dir,'node',node)
184182
node.slow_start()
185183

186-
187-
# Take FULL BACKUPs
184+
# take FULL BACKUPs
188185
backup_id_1=self.backup_node(backup_dir,'node',node)
189186

190187
backup_id_2=self.backup_node(backup_dir,'node',node)
@@ -245,9 +242,7 @@ def test_window_expire_interleaved_incremental_chains(self):
245242
self.set_archiving(backup_dir,'node',node)
246243
node.slow_start()
247244

248-
249-
# Take FULL BACKUPs
250-
245+
# take FULL BACKUPs
251246
backup_id_a=self.backup_node(backup_dir,'node',node)
252247
backup_id_b=self.backup_node(backup_dir,'node',node)
253248

@@ -334,7 +329,6 @@ def test_window_expire_interleaved_incremental_chains(self):
334329
conf.write("recovery_time='{:%Y-%m-%d %H:%M:%S}'\n".format(
335330
datetime.now()-timedelta(days=3)))
336331

337-
338332
self.delete_expired(
339333
backup_dir,'node',
340334
options=['--retention-window=1','--expired'])
@@ -361,8 +355,7 @@ def test_redundancy_expire_interleaved_incremental_chains(self):
361355
self.set_archiving(backup_dir,'node',node)
362356
node.slow_start()
363357

364-
365-
# Take FULL BACKUPs
358+
# take FULL BACKUPs
366359
backup_id_a=self.backup_node(backup_dir,'node',node)
367360
backup_id_b=self.backup_node(backup_dir,'node',node)
368361

@@ -710,7 +703,6 @@ def test_window_merge_interleaved_incremental_chains_1(self):
710703
backup_dir,'node',
711704
options=['--retention-window=1','--expired','--merge-expired'])
712705

713-
714706
self.assertEqual(len(self.show_pb(backup_dir,'node')),2)
715707

716708
self.assertEqual(
@@ -1004,7 +996,6 @@ def test_window_merge_multiple_descendants(self):
1004996
"INFO: Delete: {0}".format(
1005997
page_id_a1),output)
1006998

1007-
1008999
self.assertEqual(
10091000
self.show_pb(backup_dir,'node')[2]['id'],
10101001
page_id_b3)
@@ -1119,7 +1110,6 @@ def test_window_chains(self):
11191110
# Clean after yourself
11201111
self.del_test_dir(module_name,fname)
11211112

1122-
11231113
# @unittest.skip("skip")
11241114
deftest_window_chains_1(self):
11251115
"""
@@ -1245,4 +1235,4 @@ def test_window_error_backups(self):
12451235
backup_dir,'node',node,backup_type='page')
12461236

12471237
# Change FULLb backup status to ERROR
1248-
#self.change_backup_status(backup_dir, 'node', backup_id_b, 'ERROR')
1238+
#self.change_backup_status(backup_dir, 'node', backup_id_b, 'ERROR')

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp