@@ -1242,7 +1242,7 @@ def test_archive_restore_to_restore_point(self):
12421242 # Clean after yourself
12431243 self .del_test_dir (module_name , fname )
12441244
1245- # @unittest.skip("skip")
1245+ @unittest .skip ("skip" )
12461246 # @unittest.expectedFailure
12471247 def test_zags_block_corrupt (self ):
12481248 fname = self .id ().split ('.' )[3 ]
@@ -1314,8 +1314,129 @@ def test_zags_block_corrupt(self):
13141314 backup_dir , 'node' , node_restored )
13151315
13161316 node_restored .append_conf ("postgresql.auto.conf" , "archive_mode = 'off'" )
1317+ node_restored .append_conf ("postgresql.auto.conf" , "hot_standby = 'on'" )
13171318 node_restored .append_conf (
13181319 "postgresql.auto.conf" , "port = {0}" .format (node_restored .port ))
13191320
13201321 node_restored .slow_start ()
1321- exit (1 )
1322+
1323+ @unittest .skip ("skip" )
1324+ # @unittest.expectedFailure
1325+ def test_zags_block_corrupt_1 (self ):
1326+ fname = self .id ().split ('.' )[3 ]
1327+ node = self .make_simple_node (
1328+ base_dir = "{0}/{1}/node" .format (module_name , fname ),
1329+ initdb_params = ['--data-checksums' ],
1330+ pg_options = {
1331+ 'wal_level' : 'replica' ,
1332+ 'autovacuum' : 'off' ,
1333+ 'full_page_write' : 'on' }
1334+ )
1335+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
1336+ self .init_pb (backup_dir )
1337+ self .add_instance (backup_dir , 'node' , node )
1338+ self .set_archiving (backup_dir , 'node' , node )
1339+ node .start ()
1340+
1341+ self .backup_node (backup_dir , 'node' , node )
1342+
1343+ node .safe_psql ('postgres' , 'create table tbl(i int)' )
1344+
1345+ node .safe_psql ('postgres' , 'create index idx ON tbl (i)' )
1346+
1347+ node .safe_psql (
1348+ 'postgres' ,
1349+ 'insert into tbl select i from generate_series(0,100000) as i' )
1350+
1351+ print (node .safe_psql (
1352+ 'postgres' ,
1353+ "select pg_relation_size('idx')" ))
1354+
1355+ node .safe_psql (
1356+ 'postgres' ,
1357+ 'delete from tbl where i%2 = 0' )
1358+
1359+ node .safe_psql (
1360+ 'postgres' ,
1361+ 'explain analyze select i from tbl order by i' )
1362+
1363+ node .safe_psql (
1364+ 'postgres' ,
1365+ 'select i from tbl order by i' )
1366+
1367+ node .safe_psql (
1368+ 'postgres' ,
1369+ 'create extension pageinspect' )
1370+
1371+ print (node .safe_psql (
1372+ 'postgres' ,
1373+ "select * from bt_page_stats('idx',1)" ))
1374+
1375+ node .safe_psql (
1376+ 'postgres' ,
1377+ 'checkpoint' )
1378+
1379+ node .safe_psql (
1380+ 'postgres' ,
1381+ 'insert into tbl select i from generate_series(0,100) as i' )
1382+
1383+ node .safe_psql (
1384+ 'postgres' ,
1385+ 'insert into tbl select i from generate_series(0,100) as i' )
1386+
1387+ node .safe_psql (
1388+ 'postgres' ,
1389+ 'insert into tbl select i from generate_series(0,100) as i' )
1390+
1391+ node .safe_psql (
1392+ 'postgres' ,
1393+ 'insert into tbl select i from generate_series(0,100) as i' )
1394+
1395+ self .switch_wal_segment (node )
1396+
1397+ node_restored = self .make_simple_node (
1398+ base_dir = "{0}/{1}/node_restored" .format (module_name , fname ),
1399+ initdb_params = ['--data-checksums' ],
1400+ pg_options = {'wal_level' : 'replica' }
1401+ )
1402+
1403+ pgdata = self .pgdata_content (node .data_dir )
1404+
1405+ node_restored .cleanup ()
1406+
1407+ self .restore_node (
1408+ backup_dir , 'node' , node_restored )
1409+
1410+ node_restored .append_conf ("postgresql.auto.conf" , "archive_mode = 'off'" )
1411+ node_restored .append_conf ("postgresql.auto.conf" , "hot_standby = 'on'" )
1412+ node_restored .append_conf (
1413+ "postgresql.auto.conf" , "port = {0}" .format (node_restored .port ))
1414+
1415+ node_restored .slow_start ()
1416+
1417+ while True :
1418+ with open (node_restored .pg_log_file , 'r' ) as f :
1419+ if 'selected new timeline ID' in f .read ():
1420+ break
1421+
1422+ with open (node_restored .pg_log_file , 'r' ) as f :
1423+ print (f .read ())
1424+
1425+ pgdata_restored = self .pgdata_content (node_restored .data_dir )
1426+
1427+ self .compare_pgdata (pgdata , pgdata_restored )
1428+
1429+ # pg_xlogdump_path = self.get_bin_path('pg_xlogdump')
1430+
1431+ # pg_xlogdump = self.run_binary(
1432+ # [
1433+ # pg_xlogdump_path, '-b',
1434+ # os.path.join(backup_dir, 'wal', 'node', '000000010000000000000003'),
1435+ # ' | ', 'grep', 'Btree', ''
1436+ # ], async=False)
1437+
1438+ if pg_xlogdump .returncode :
1439+ self .assertFalse (
1440+ True ,
1441+ 'Failed to start pg_wal_dump: {0}' .format (
1442+ pg_receivexlog .communicate ()[1 ]))
0 commit comments