@@ -1242,7 +1242,7 @@ def test_archive_restore_to_restore_point(self):
1242
1242
# Clean after yourself
1243
1243
self .del_test_dir (module_name , fname )
1244
1244
1245
- # @unittest.skip("skip")
1245
+ @unittest .skip ("skip" )
1246
1246
# @unittest.expectedFailure
1247
1247
def test_zags_block_corrupt (self ):
1248
1248
fname = self .id ().split ('.' )[3 ]
@@ -1314,8 +1314,129 @@ def test_zags_block_corrupt(self):
1314
1314
backup_dir , 'node' , node_restored )
1315
1315
1316
1316
node_restored .append_conf ("postgresql.auto.conf" , "archive_mode = 'off'" )
1317
+ node_restored .append_conf ("postgresql.auto.conf" , "hot_standby = 'on'" )
1317
1318
node_restored .append_conf (
1318
1319
"postgresql.auto.conf" , "port = {0}" .format (node_restored .port ))
1319
1320
1320
1321
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