Skip to content

Commit faf1c8d

Browse files
committed
[PBCKP-259] tests.backup.BackupTest.test_start_time refinements
1 parent 12e0a9d commit faf1c8d

File tree

3 files changed

+48
-33
lines changed

3 files changed

+48
-33
lines changed

src/pg_probackup.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -993,8 +993,6 @@ main(int argc, char *argv[])
993993
return do_catchup(catchup_source_pgdata, catchup_destination_pgdata, num_threads, !no_sync,
994994
exclude_absolute_paths_list, exclude_relative_paths_list);
995995
case RESTORE_CMD:
996-
if (start_time != INVALID_BACKUP_ID)
997-
current.backup_id = start_time;
998996
return do_restore_or_validate(instanceState, current.backup_id,
999997
recovery_target_options,
1000998
restore_params, no_sync);

tests/backup.py

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import unittest
22
import os
33
from time import sleep, time
4-
from .helpers.ptrack_helpers import ProbackupTest, ProbackupException
4+
from .helpers.ptrack_helpers import base36enc, ProbackupTest, ProbackupException
55
import shutil
66
from distutils.dir_util import copy_tree
77
from testgres import ProcessType, QueryException
@@ -3417,22 +3417,22 @@ def test_start_time(self):
34173417
node.slow_start()
34183418

34193419
# FULL backup
3420-
startTime = str(int(time()))
3420+
startTime = int(time())
34213421
self.backup_node(
34223422
backup_dir, 'node', node, backup_type='full',
3423-
options=['--stream', '--start-time={0}'.format(startTime)])
3424-
# restore FULL backup by the start-time
3425-
node.cleanup()
3423+
options=['--stream', '--start-time={0}'.format(str(startTime))])
3424+
# restore FULL backup by backup_id calculated from start-time
34263425
self.restore_node(
3427-
backup_dir, 'node', node,
3428-
options=['--start-time={0}'.format(startTime)])
3426+
backup_dir, 'node',
3427+
data_dir=os.path.join(self.tmp_path, module_name, fname, 'node_restored_full'),
3428+
backup_id=base36enc(startTime))
34293429

34303430
#FULL backup with incorrect start time
34313431
try:
34323432
startTime = str(int(time()-100000))
34333433
self.backup_node(
3434-
backup_dir, 'node', node, backup_type='full',
3435-
options=['--stream', '--start-time={0}'.format(startTime)])
3434+
backup_dir, 'node', node, backup_type='full',
3435+
options=['--stream', '--start-time={0}'.format(startTime)])
34363436
# we should die here because exception is what we expect to happen
34373437
self.assertEqual(
34383438
1, 0,
@@ -3447,45 +3447,42 @@ def test_start_time(self):
34473447
repr(e.message), self.cmd))
34483448

34493449
# DELTA backup
3450-
node.slow_start()
3451-
startTime = str(int(time()))
3450+
startTime = int(time())
34523451
self.backup_node(
34533452
backup_dir, 'node', node, backup_type='delta',
3454-
options=['--stream', '--start-time={0}'.format(startTime)])
3455-
# restore DELTA backup by the start-time
3456-
node.cleanup()
3453+
options=['--stream', '--start-time={0}'.format(str(startTime))])
3454+
# restore DELTA backup by backup_id calculated from start-time
34573455
self.restore_node(
3458-
backup_dir, 'node', node,
3459-
options=['--start-time={0}'.format(startTime)])
3456+
backup_dir, 'node',
3457+
data_dir=os.path.join(self.tmp_path, module_name, fname, 'node_restored_delta'),
3458+
backup_id=base36enc(startTime))
34603459

34613460
# PAGE backup
3462-
node.slow_start()
3463-
startTime = str(int(time()))
3461+
startTime = int(time())
34643462
self.backup_node(
34653463
backup_dir, 'node', node, backup_type='page',
3466-
options=['--stream', '--start-time={0}'.format(startTime)])
3467-
# restore PAGE backup by the start-time
3468-
node.cleanup()
3464+
options=['--stream', '--start-time={0}'.format(str(startTime))])
3465+
# restore PAGE backup by backup_id calculated from start-time
34693466
self.restore_node(
3470-
backup_dir, 'node', node,
3471-
options=['--start-time={0}'.format(startTime)])
3467+
backup_dir, 'node',
3468+
data_dir=os.path.join(self.tmp_path, module_name, fname, 'node_restored_page'),
3469+
backup_id=base36enc(startTime))
34723470

34733471
# PTRACK backup
34743472
if self.ptrack:
3475-
node.slow_start()
34763473
node.safe_psql(
34773474
'postgres',
34783475
'create extension ptrack')
34793476

3480-
startTime = str(int(time()))
3477+
startTime = int(time())
34813478
self.backup_node(
34823479
backup_dir, 'node', node, backup_type='ptrack',
3483-
options=['--stream', '--start-time={0}'.format(startTime)])
3484-
3485-
node.cleanup()
3480+
options=['--stream', '--start-time={0}'.format(str(startTime))])
3481+
# restore PTRACK backup by backup_id calculated from start-time
34863482
self.restore_node(
3487-
backup_dir, 'node', node,
3488-
options=['--start-time={0}'.format(startTime)])
3483+
backup_dir, 'node',
3484+
data_dir=os.path.join(self.tmp_path, module_name, fname, 'node_restored_ptrack'),
3485+
backup_id=base36enc(startTime))
34893486

34903487
# Clean after yourself
34913488
self.del_test_dir(module_name, fname)

tests/helpers/ptrack_helpers.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,26 @@ def is_nls_enabled():
110110
return b'enable-nls' in p.communicate()[0]
111111

112112

113+
def base36enc(number):
114+
"""Converts an integer to a base36 string."""
115+
alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
116+
base36 = ''
117+
sign = ''
118+
119+
if number < 0:
120+
sign = '-'
121+
number = -number
122+
123+
if 0 <= number < len(alphabet):
124+
return sign + alphabet[number]
125+
126+
while number != 0:
127+
number, i = divmod(number, len(alphabet))
128+
base36 = alphabet[i] + base36
129+
130+
return sign + base36
131+
132+
113133
class ProbackupException(Exception):
114134
def __init__(self, message, cmd):
115135
self.message = message
@@ -947,7 +967,7 @@ def backup_node(
947967
backup_type='full', datname=False, options=[],
948968
asynchronous=False, gdb=False,
949969
old_binary=False, return_id=True, no_remote=False,
950-
env=None, startTime=None
970+
env=None
951971
):
952972
if not node and not data_dir:
953973
print('You must provide ether node or data_dir for backup')

0 commit comments

Comments
 (0)