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

Skip to content

Commit 4611ee3

Browse files
committed
Merge branch 'master' into issue_79
2 parents 8623628 + 5cb84f2 commit 4611ee3

File tree

4 files changed

+155
-16
lines changed

4 files changed

+155
-16
lines changed

README.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,15 @@ Regardless of the chosen backup type, all backups taken with `pg_probackup` supp
5858
### Linux Installation
5959
```shell
6060
#DEB Ubuntu|Debian Packages
61-
echo "deb [arch=amd64] http://repo.postgrespro.ru/pg_probackup/deb/ $(lsb_release -cs) main-$(lsb_release -cs)" > /etc/apt/sources.list.d/pg_probackup.list
62-
wget -O - http://repo.postgrespro.ru/pg_probackup/keys/GPG-KEY-PG_PROBACKUP | apt-key add - && apt-get update
63-
apt-get install pg-probackup-{11,10,9.6,9.5}
64-
apt-get install pg-probackup-{11,10,9.6,9.5}-dbg
61+
sudo echo "deb [arch=amd64] http://repo.postgrespro.ru/pg_probackup/deb/ $(lsb_release -cs) main-$(lsb_release -cs)" > /etc/apt/sources.list.d/pg_probackup.list
62+
sudo wget -O - http://repo.postgrespro.ru/pg_probackup/keys/GPG-KEY-PG_PROBACKUP | sudo apt-key add - && sudo apt-get update
63+
sudo apt-get install pg-probackup-{11,10,9.6,9.5}
64+
sudo apt-get install pg-probackup-{11,10,9.6,9.5}-dbg
6565

6666
#DEB-SRC Packages
67-
echo "deb-src [arch=amd64] http://repo.postgrespro.ru/pg_probackup/deb/ $(lsb_release -cs) main-$(lsb_release -cs)" >>\
67+
sudo echo "deb-src [arch=amd64] http://repo.postgrespro.ru/pg_probackup/deb/ $(lsb_release -cs) main-$(lsb_release -cs)" >>\
6868
/etc/apt/sources.list.d/pg_probackup.list
69-
apt-get source pg-probackup-{11,10,9.6,9.5}
69+
sudo apt-get source pg-probackup-{11,10,9.6,9.5}
7070

7171
#RPM Centos Packages
7272
rpm -ivh http://repo.postgrespro.ru/pg_probackup/keys/pg_probackup-repo-centos.noarch.rpm
@@ -112,7 +112,7 @@ gen_probackup_project.pl C:\path_to_postgresql_source_tree
112112

113113
## Documentation
114114

115-
Currently the latest documentation can be found at [github](https://postgrespro.github.io/pg_probackup)
115+
Currently the latest documentation can be found at [github](https://postgrespro.github.io/pg_probackup).
116116
Slightly outdated documentation can be found at [Postgres Pro Enterprise documentation](https://postgrespro.com/docs/postgrespro/current/app-pgprobackup).
117117

118118
## License

src/backup.c

-1
Original file line numberDiff line numberDiff line change
@@ -2566,7 +2566,6 @@ StreamLog(void *arg)
25662566
stream_arg->startpos -= stream_arg->startpos % instance_config.xlog_seg_size;
25672567

25682568
/* Initialize timeout */
2569-
stream_stop_timeout = 0;
25702569
stream_stop_begin = 0;
25712570

25722571
#if PG_VERSION_NUM >= 100000

src/pg_probackup.c

+5-5
Original file line numberDiff line numberDiff line change
@@ -332,11 +332,11 @@ main(int argc, char *argv[])
332332
|| strcmp(argv[1], "-V") == 0)
333333
{
334334
#ifdef PGPRO_VERSION
335-
fprintf(stderr, "%s %s (Postgres Pro %s %s)\n",
335+
fprintf(stdout, "%s %s (Postgres Pro %s %s)\n",
336336
PROGRAM_NAME, PROGRAM_VERSION,
337337
PGPRO_VERSION, PGPRO_EDITION);
338338
#else
339-
fprintf(stderr, "%s %s (PostgreSQL %s)\n",
339+
fprintf(stdout, "%s %s (PostgreSQL %s)\n",
340340
PROGRAM_NAME, PROGRAM_VERSION, PG_VERSION);
341341
#endif
342342
exit(0);
@@ -669,12 +669,12 @@ main(int argc, char *argv[])
669669
return do_show(current.backup_id);
670670
case DELETE_CMD:
671671
if (delete_expired && backup_id_string)
672-
elog(ERROR, "You cannot specify --delete-expired and --backup-id options together");
672+
elog(ERROR, "You cannot specify --delete-expired and (-i, --backup-id) options together");
673673
if (merge_expired && backup_id_string)
674-
elog(ERROR, "You cannot specify --merge-expired and --backup-id options together");
674+
elog(ERROR, "You cannot specify --merge-expired and (-i, --backup-id) options together");
675675
if (!delete_expired && !merge_expired && !delete_wal && !backup_id_string)
676676
elog(ERROR, "You must specify at least one of the delete options: "
677-
"--expired |--wal |--merge-expired |--delete-invalid |--backup_id");
677+
"--delete-expired |--delete-wal |--merge-expired |(-i, --backup-id)");
678678
if (!backup_id_string)
679679
return do_retention();
680680
else

tests/retention.py

+143-3
Original file line numberDiff line numberDiff line change
@@ -1264,16 +1264,156 @@ def test_window_error_backups(self):
12641264
self.set_archiving(backup_dir, 'node', node)
12651265
node.slow_start()
12661266

1267-
node.pgbench_init(scale=3)
1268-
12691267
# Take FULL BACKUPs
12701268
backup_id_a1 = self.backup_node(backup_dir, 'node', node)
1271-
page_id_a2 = self.backup_node(
1269+
gdb = self.backup_node(
1270+
backup_dir, 'node', node, backup_type='page', gdb=True)
1271+
1272+
page_id_a3 = self.backup_node(
12721273
backup_dir, 'node', node, backup_type='page')
12731274

12741275
# Change FULLb backup status to ERROR
12751276
self.change_backup_status(backup_dir, 'node', backup_id_b, 'ERROR')
12761277

1278+
# Clean after yourself
1279+
self.del_test_dir(module_name, fname)
1280+
1281+
# @unittest.skip("skip")
1282+
def test_window_error_backups_1(self):
1283+
"""
1284+
DELTA
1285+
PAGE ERROR
1286+
FULL
1287+
-------window
1288+
"""
1289+
fname = self.id().split('.')[3]
1290+
node = self.make_simple_node(
1291+
base_dir=os.path.join(module_name, fname, 'node'),
1292+
initdb_params=['--data-checksums'])
1293+
1294+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
1295+
self.init_pb(backup_dir)
1296+
self.add_instance(backup_dir, 'node', node)
1297+
self.set_archiving(backup_dir, 'node', node)
1298+
node.slow_start()
1299+
1300+
# Take FULL BACKUP
1301+
full_id = self.backup_node(backup_dir, 'node', node)
1302+
1303+
# Take PAGE BACKUP
1304+
gdb = self.backup_node(
1305+
backup_dir, 'node', node, backup_type='page', gdb=True)
1306+
1307+
gdb.set_breakpoint('pg_stop_backup')
1308+
gdb.run_until_break()
1309+
gdb.remove_all_breakpoints()
1310+
gdb._execute('signal SIGINT')
1311+
gdb.continue_execution_until_error()
1312+
1313+
page_id = self.show_pb(backup_dir, 'node')[1]['id']
1314+
1315+
# Take DELTA backup
1316+
delta_id = self.backup_node(
1317+
backup_dir, 'node', node, backup_type='delta',
1318+
options=['--retention-window=2', '--delete-expired'])
1319+
1320+
# Take FULL BACKUP
1321+
full2_id = self.backup_node(backup_dir, 'node', node)
1322+
1323+
self.assertEqual(len(self.show_pb(backup_dir, 'node')), 4)
1324+
1325+
# Clean after yourself
1326+
self.del_test_dir(module_name, fname)
1327+
1328+
# @unittest.skip("skip")
1329+
def test_window_error_backups_2(self):
1330+
"""
1331+
DELTA
1332+
PAGE ERROR
1333+
FULL
1334+
-------window
1335+
"""
1336+
fname = self.id().split('.')[3]
1337+
node = self.make_simple_node(
1338+
base_dir=os.path.join(module_name, fname, 'node'),
1339+
initdb_params=['--data-checksums'])
1340+
1341+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
1342+
self.init_pb(backup_dir)
1343+
self.add_instance(backup_dir, 'node', node)
1344+
self.set_archiving(backup_dir, 'node', node)
1345+
node.slow_start()
1346+
1347+
# Take FULL BACKUP
1348+
full_id = self.backup_node(backup_dir, 'node', node)
1349+
1350+
# Take PAGE BACKUP
1351+
gdb = self.backup_node(
1352+
backup_dir, 'node', node, backup_type='page', gdb=True)
1353+
1354+
gdb.set_breakpoint('pg_stop_backup')
1355+
gdb.run_until_break()
1356+
gdb._execute('signal SIGTERM')
1357+
gdb.continue_execution_until_error()
1358+
1359+
page_id = self.show_pb(backup_dir, 'node')[1]['id']
1360+
1361+
# Take DELTA backup
1362+
delta_id = self.backup_node(
1363+
backup_dir, 'node', node, backup_type='delta',
1364+
options=['--retention-window=2', '--delete-expired'])
1365+
1366+
self.assertEqual(len(self.show_pb(backup_dir, 'node')), 3)
1367+
1368+
# Clean after yourself
1369+
# self.del_test_dir(module_name, fname)
1370+
1371+
def test_retention_redundancy_overlapping_chains(self):
1372+
""""""
1373+
fname = self.id().split('.')[3]
1374+
node = self.make_simple_node(
1375+
base_dir=os.path.join(module_name, fname, 'node'),
1376+
initdb_params=['--data-checksums'])
1377+
1378+
if self.get_version(node) < 90600:
1379+
self.del_test_dir(module_name, fname)
1380+
return unittest.skip('Skipped because ptrack support is disabled')
1381+
1382+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
1383+
self.init_pb(backup_dir)
1384+
self.add_instance(backup_dir, 'node', node)
1385+
self.set_archiving(backup_dir, 'node', node)
1386+
node.slow_start()
1387+
1388+
self.set_config(
1389+
backup_dir, 'node', options=['--retention-redundancy=1'])
1390+
1391+
# Make backups to be purged
1392+
self.backup_node(backup_dir, 'node', node)
1393+
self.backup_node(backup_dir, 'node', node, backup_type="page")
1394+
1395+
# Make backups to be keeped
1396+
gdb = self.backup_node(backup_dir, 'node', node, gdb=True)
1397+
gdb.set_breakpoint('backup_files')
1398+
gdb.run_until_break()
1399+
1400+
sleep(1)
1401+
1402+
self.backup_node(backup_dir, 'node', node, backup_type="page")
1403+
1404+
gdb.remove_all_breakpoints()
1405+
gdb.continue_execution_until_exit()
1406+
1407+
self.backup_node(backup_dir, 'node', node, backup_type="page")
1408+
1409+
# Purge backups
1410+
log = self.delete_expired(
1411+
backup_dir, 'node', options=['--expired', '--wal'])
1412+
self.assertEqual(len(self.show_pb(backup_dir, 'node')), 2)
1413+
1414+
# Clean after yourself
1415+
self.del_test_dir(module_name, fname)
1416+
12771417
def test_retention_redundancy_overlapping_chains(self):
12781418
""""""
12791419
fname = self.id().split('.')[3]

0 commit comments

Comments
 (0)