14
14
15
15
class CheckdbTest (ProbackupTest ,unittest .TestCase ):
16
16
17
- def test_checkdb_index_loss (self ):
17
+ @unittest .skip ("skip" )
18
+ def checkdb_index_loss (self ):
18
19
"""make node, make full and ptrack stream backups,"
19
20
" restore them and check data correctness"""
20
21
fname = self .id ().split ('.' )[3 ]
21
22
backup_dir = os .path .join (self .tmp_path ,module_name ,fname ,'backup' )
22
23
node = self .make_simple_node (
23
24
base_dir = "{0}/{1}/node" .format (module_name ,fname ),
24
25
set_replication = True ,
25
- initdb_params = ['--data-checksums' ],
26
- pg_options = {
27
- 'wal_level' :'replica' ,
28
- 'max_wal_senders' :'2' ,
29
- }
30
- )
26
+ initdb_params = ['--data-checksums' ])
27
+
31
28
self .init_pb (backup_dir )
32
29
self .add_instance (backup_dir ,'node' ,node )
33
30
self .set_archiving (backup_dir ,'node' ,node )
@@ -59,4 +56,54 @@ def test_checkdb_index_loss(self):
59
56
gdb .continue_execution_until_exit ()
60
57
61
58
# Clean after yourself
62
- self .del_test_dir (module_name ,fname )
59
+ self .del_test_dir (module_name ,fname )
60
+
61
+ # @unittest.skip("skip")
62
+ def test_checkdb_block_validation (self ):
63
+ """make node, corrupt some pages, check that checkdb failed"""
64
+ fname = self .id ().split ('.' )[3 ]
65
+ node = self .make_simple_node (
66
+ base_dir = os .path .join (module_name ,fname ,'node' ),
67
+ set_replication = True ,
68
+ initdb_params = ['--data-checksums' ])
69
+
70
+ backup_dir = os .path .join (self .tmp_path ,module_name ,fname ,'backup' )
71
+
72
+ self .init_pb (backup_dir )
73
+ self .add_instance (backup_dir ,'node' ,node )
74
+ node .slow_start ()
75
+
76
+ #self.backup_node(
77
+ # backup_dir, 'node', node,
78
+ # backup_type="full", options=["-j", "4", "--stream"])
79
+
80
+ node .safe_psql (
81
+ "postgres" ,
82
+ "create table t_heap as select 1 as id, md5(i::text) as text, "
83
+ "md5(repeat(i::text,10))::tsvector as tsvector "
84
+ "from generate_series(0,1000) i" )
85
+ node .safe_psql (
86
+ "postgres" ,
87
+ "CHECKPOINT;" )
88
+
89
+ heap_path = node .safe_psql (
90
+ "postgres" ,
91
+ "select pg_relation_filepath('t_heap')" ).rstrip ()
92
+
93
+ with open (os .path .join (node .data_dir ,heap_path ),"rb+" ,0 )as f :
94
+ f .seek (9000 )
95
+ f .write (b"bla" )
96
+ f .flush ()
97
+ f .close
98
+
99
+ with open (os .path .join (node .data_dir ,heap_path ),"rb+" ,0 )as f :
100
+ f .seek (42000 )
101
+ f .write (b"bla" )
102
+ f .flush ()
103
+ f .close
104
+
105
+ print (self .checkdb_node ('node' ,backup_dir ,
106
+ data_dir = node .data_dir ,options = ['--block-validation' ]))
107
+
108
+ # Clean after yourself
109
+ self .del_test_dir (module_name ,fname )