1
1
import os
2
2
import unittest
3
3
from .helpers .ptrack_helpers import ProbackupTest , idx_ptrack
4
+ import time
4
5
5
6
6
7
module_name = 'ptrack_clean'
@@ -32,14 +33,25 @@ def test_ptrack_clean(self):
32
33
# Create table and indexes
33
34
node .safe_psql (
34
35
"postgres" ,
35
- "create sequence t_seq; create table t_heap tablespace somedata as select i as id, nextval('t_seq') as t_seq, md5(i::text) as text, md5(repeat(i::text,10))::tsvector as tsvector from generate_series(0,256) i" )
36
+ "create sequence t_seq; create table t_heap tablespace somedata "
37
+ "as select i as id, nextval('t_seq') as t_seq, "
38
+ "md5(i::text) as text, "
39
+ "md5(repeat(i::text,10))::tsvector as tsvector "
40
+ "from generate_series(0,256) i" )
36
41
for i in idx_ptrack :
37
42
if idx_ptrack [i ]['type' ] != 'heap' and idx_ptrack [i ]['type' ] != 'seq' :
38
- node .safe_psql ("postgres" , "create index {0} on {1} using {2}({3}) tablespace somedata" .format (
39
- i , idx_ptrack [i ]['relation' ], idx_ptrack [i ]['type' ], idx_ptrack [i ]['column' ]))
43
+ node .safe_psql (
44
+ "postgres" ,
45
+ "create index {0} on {1} using {2}({3}) "
46
+ "tablespace somedata" .format (
47
+ i , idx_ptrack [i ]['relation' ],
48
+ idx_ptrack [i ]['type' ],
49
+ idx_ptrack [i ]['column' ]))
40
50
41
51
# Take FULL backup to clean every ptrack
42
- self .backup_node (backup_dir , 'node' , node , options = ['-j10' , '--stream' ])
52
+ self .backup_node (
53
+ backup_dir , 'node' , node ,
54
+ options = ['-j10' , '--stream' ])
43
55
node .safe_psql ('postgres' , 'checkpoint' )
44
56
45
57
for i in idx_ptrack :
@@ -53,13 +65,17 @@ def test_ptrack_clean(self):
53
65
self .check_ptrack_clean (idx_ptrack [i ], idx_ptrack [i ]['size' ])
54
66
55
67
# Update everything and vacuum it
56
- node .safe_psql ('postgres' , "update t_heap set t_seq = nextval('t_seq'), text = md5(text), tsvector = md5(repeat(tsvector::text, 10))::tsvector;" )
68
+ node .safe_psql (
69
+ 'postgres' ,
70
+ "update t_heap set t_seq = nextval('t_seq'), "
71
+ "text = md5(text), "
72
+ "tsvector = md5(repeat(tsvector::text, 10))::tsvector;" )
57
73
node .safe_psql ('postgres' , 'vacuum t_heap' )
58
74
59
75
# Take PTRACK backup to clean every ptrack
60
76
backup_id = self .backup_node (
61
77
backup_dir , 'node' , node , backup_type = 'ptrack' ,
62
- options = ['-j100 ' , '--log-level-file=verbose' ])
78
+ options = ['-j10 ' , '--log-level-file=verbose' ])
63
79
node .safe_psql ('postgres' , 'checkpoint' )
64
80
65
81
for i in idx_ptrack :
@@ -74,11 +90,17 @@ def test_ptrack_clean(self):
74
90
self .check_ptrack_clean (idx_ptrack [i ], idx_ptrack [i ]['size' ])
75
91
76
92
# Update everything and vacuum it
77
- node .safe_psql ('postgres' , "update t_heap set t_seq = nextval('t_seq'), text = md5(text), tsvector = md5(repeat(tsvector::text, 10))::tsvector;" )
93
+ node .safe_psql (
94
+ 'postgres' ,
95
+ "update t_heap set t_seq = nextval('t_seq'), "
96
+ "text = md5(text), "
97
+ "tsvector = md5(repeat(tsvector::text, 10))::tsvector;" )
78
98
node .safe_psql ('postgres' , 'vacuum t_heap' )
79
99
80
100
# Take PAGE backup to clean every ptrack
81
- self .backup_node (backup_dir , 'node' , node , backup_type = 'page' , options = ['-j10' ])
101
+ self .backup_node (
102
+ backup_dir , 'node' , node ,
103
+ backup_type = 'page' , options = ['-j10' ])
82
104
node .safe_psql ('postgres' , 'checkpoint' )
83
105
84
106
for i in idx_ptrack :
@@ -100,39 +122,58 @@ def test_ptrack_clean(self):
100
122
def test_ptrack_clean_replica (self ):
101
123
"""Take backups of every available types from master and check that PTRACK on replica is clean"""
102
124
fname = self .id ().split ('.' )[3 ]
103
- master = self .make_simple_node (base_dir = "{0}/{1}/master" .format (module_name , fname ),
125
+ master = self .make_simple_node (
126
+ base_dir = "{0}/{1}/master" .format (module_name , fname ),
104
127
set_replication = True ,
105
128
initdb_params = ['--data-checksums' ],
106
- pg_options = {'ptrack_enable' : 'on' , 'wal_level' : 'replica' , 'max_wal_senders' : '2' })
129
+ pg_options = {
130
+ 'ptrack_enable' : 'on' ,
131
+ 'wal_level' : 'replica' ,
132
+ 'max_wal_senders' : '2' })
107
133
backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
108
134
self .init_pb (backup_dir )
109
135
self .add_instance (backup_dir , 'master' , master )
110
136
master .start ()
111
137
112
138
self .backup_node (backup_dir , 'master' , master , options = ['--stream' ])
113
139
114
- replica = self .make_simple_node (base_dir = "{0}/{1}/replica" .format (module_name , fname ))
140
+ replica = self .make_simple_node (
141
+ base_dir = "{0}/{1}/replica" .format (module_name , fname ))
115
142
replica .cleanup ()
116
143
117
144
self .restore_node (backup_dir , 'master' , replica )
118
145
119
146
self .add_instance (backup_dir , 'replica' , replica )
120
- self .set_replica (master , replica )
147
+ self .set_replica (master , replica , synchronous = True )
121
148
self .set_archiving (backup_dir , 'replica' , replica , replica = True )
122
149
replica .start ()
123
150
124
151
# Create table and indexes
125
152
master .safe_psql (
126
153
"postgres" ,
127
- "create sequence t_seq; create table t_heap as select i as id, nextval('t_seq') as t_seq, md5(i::text) as text, md5(repeat(i::text,10))::tsvector as tsvector from generate_series(0,256) i" )
154
+ "create sequence t_seq; create table t_heap as select i as id, "
155
+ "nextval('t_seq') as t_seq, md5(i::text) as text, "
156
+ "md5(repeat(i::text,10))::tsvector as tsvector "
157
+ "from generate_series(0,256) i" )
128
158
for i in idx_ptrack :
129
159
if idx_ptrack [i ]['type' ] != 'heap' and idx_ptrack [i ]['type' ] != 'seq' :
130
- master .safe_psql ("postgres" , "create index {0} on {1} using {2}({3})" .format (
131
- i , idx_ptrack [i ]['relation' ], idx_ptrack [i ]['type' ], idx_ptrack [i ]['column' ]))
160
+ master .safe_psql (
161
+ "postgres" ,
162
+ "create index {0} on {1} using {2}({3})" .format (
163
+ i , idx_ptrack [i ]['relation' ],
164
+ idx_ptrack [i ]['type' ],
165
+ idx_ptrack [i ]['column' ]))
132
166
133
167
# Take FULL backup to clean every ptrack
134
- self .backup_node (backup_dir , 'replica' , replica , options = ['-j10' , '--stream' ,
135
- '--master-host=localhost' , '--master-db=postgres' , '--master-port={0}' .format (master .port )])
168
+ self .backup_node (
169
+ backup_dir ,
170
+ 'replica' ,
171
+ replica ,
172
+ options = [
173
+ '-j10' , '--stream' ,
174
+ '--master-host=localhost' ,
175
+ '--master-db=postgres' ,
176
+ '--master-port={0}' .format (master .port )])
136
177
master .safe_psql ('postgres' , 'checkpoint' )
137
178
138
179
for i in idx_ptrack :
@@ -146,12 +187,24 @@ def test_ptrack_clean_replica(self):
146
187
self .check_ptrack_clean (idx_ptrack [i ], idx_ptrack [i ]['size' ])
147
188
148
189
# Update everything and vacuum it
149
- master .safe_psql ('postgres' , "update t_heap set t_seq = nextval('t_seq'), text = md5(text), tsvector = md5(repeat(tsvector::text, 10))::tsvector;" )
190
+ master .safe_psql (
191
+ 'postgres' ,
192
+ "update t_heap set t_seq = nextval('t_seq'), "
193
+ "text = md5(text), "
194
+ "tsvector = md5(repeat(tsvector::text, 10))::tsvector;" )
150
195
master .safe_psql ('postgres' , 'vacuum t_heap' )
151
196
152
197
# Take PTRACK backup to clean every ptrack
153
- backup_id = self .backup_node (backup_dir , 'replica' , replica , backup_type = 'ptrack' , options = ['-j10' , '--stream' ,
154
- '--master-host=localhost' , '--master-db=postgres' , '--master-port={0}' .format (master .port )])
198
+ backup_id = self .backup_node (
199
+ backup_dir ,
200
+ 'replica' ,
201
+ replica ,
202
+ backup_type = 'ptrack' ,
203
+ options = [
204
+ '-j10' , '--stream' ,
205
+ '--master-host=localhost' ,
206
+ '--master-db=postgres' ,
207
+ '--master-port={0}' .format (master .port )])
155
208
master .safe_psql ('postgres' , 'checkpoint' )
156
209
157
210
for i in idx_ptrack :
@@ -166,16 +219,25 @@ def test_ptrack_clean_replica(self):
166
219
self .check_ptrack_clean (idx_ptrack [i ], idx_ptrack [i ]['size' ])
167
220
168
221
# Update everything and vacuum it
169
- master .safe_psql ('postgres' , "update t_heap set t_seq = nextval('t_seq'), text = md5(text), tsvector = md5(repeat(tsvector::text, 10))::tsvector;" )
222
+ master .safe_psql (
223
+ 'postgres' ,
224
+ "update t_heap set t_seq = nextval('t_seq'), text = md5(text), "
225
+ "tsvector = md5(repeat(tsvector::text, 10))::tsvector;" )
170
226
master .safe_psql ('postgres' , 'vacuum t_heap' )
171
227
master .safe_psql ('postgres' , 'checkpoint' )
172
228
173
229
# Take PAGE backup to clean every ptrack
174
- self .backup_node (backup_dir , 'replica' , replica , backup_type = 'page' , options = ['-j10' ,
175
- '--master-host=localhost' , '--master-db=postgres' , '--master-port={0}' .format (master .port )])
230
+ self .backup_node (
231
+ backup_dir ,
232
+ 'replica' ,
233
+ replica ,
234
+ backup_type = 'page' ,
235
+ options = [
236
+ '-j10' , '--master-host=localhost' ,
237
+ '--master-db=postgres' ,
238
+ '--master-port={0}' .format (master .port )])
176
239
master .safe_psql ('postgres' , 'checkpoint' )
177
240
178
-
179
241
for i in idx_ptrack :
180
242
# get new size of heap and indexes and calculate it in pages
181
243
idx_ptrack [i ]['size' ] = self .get_fork_size (replica , i )
0 commit comments