@@ -981,10 +981,9 @@ do_amcheck(void)
981
981
pthread_t * threads ;
982
982
backup_files_arg * threads_args ;
983
983
bool backup_isok = true;
984
- const char * dbname ;
985
984
PGresult * res_db ;
986
985
int n_databases = 0 ;
987
- bool first_db_with_amcheck = false ;
986
+ bool first_db_with_amcheck = true ;
988
987
PGconn * db_conn = NULL ;
989
988
990
989
pgBackupGetPath (& current , database_path , lengthof (database_path ),
@@ -993,7 +992,6 @@ do_amcheck(void)
993
992
res_db = pgut_execute (backup_conn , "SELECT datname, oid, dattablespace FROM pg_database" ,
994
993
0 , NULL );
995
994
n_databases = PQntuples (res_db );
996
- elog (WARNING , "number of databases found: %d" , n_databases );
997
995
998
996
/* TODO Warn user that one connection is used for snaphot */
999
997
if (num_threads > 1 )
@@ -1002,10 +1000,14 @@ do_amcheck(void)
1002
1000
/* For each database check indexes. In parallel. */
1003
1001
for (i = 0 ; i < n_databases ; i ++ )
1004
1002
{
1003
+ int j ;
1004
+
1005
1005
if (index_list != NULL )
1006
+ {
1006
1007
free (index_list );
1008
+ index_list = NULL ;
1009
+ }
1007
1010
1008
- elog (WARNING , "get index list for db %d of %d" , i , n_databases );
1009
1011
index_list = get_index_list (res_db , i ,
1010
1012
& first_db_with_amcheck , db_conn );
1011
1013
if (index_list == NULL )
@@ -1019,9 +1021,9 @@ do_amcheck(void)
1019
1021
threads = (pthread_t * ) palloc (sizeof (pthread_t ) * num_threads );
1020
1022
threads_args = (backup_files_arg * ) palloc (sizeof (backup_files_arg )* num_threads );
1021
1023
1022
- for (i = 0 ; i < num_threads ; i ++ )
1024
+ for (j = 0 ; j < num_threads ; j ++ )
1023
1025
{
1024
- backup_files_arg * arg = & (threads_args [i ]);
1026
+ backup_files_arg * arg = & (threads_args [j ]);
1025
1027
1026
1028
arg -> from_root = instance_config .pgdata ;
1027
1029
arg -> to_root = database_path ;
@@ -1037,32 +1039,31 @@ do_amcheck(void)
1037
1039
1038
1040
pgut_atexit_push (threads_conn_disconnect , NULL );
1039
1041
1040
- /* TODO write better info message */
1041
- elog (INFO , "Start checking data files" );
1042
+ elog (INFO , "Start checking indexes with amcheck" );
1042
1043
1043
1044
/* Run threads */
1044
- for (i = 0 ; i < num_threads ; i ++ )
1045
+ for (j = 0 ; j < num_threads ; j ++ )
1045
1046
{
1046
- backup_files_arg * arg = & (threads_args [i ]);
1047
+ backup_files_arg * arg = & (threads_args [j ]);
1047
1048
1048
- elog (VERBOSE , "Start thread num: %i" , i );
1049
+ elog (VERBOSE , "Start thread num: %i" , j );
1049
1050
1050
- pthread_create (& threads [i ], NULL , check_indexes , arg );
1051
+ pthread_create (& threads [j ], NULL , check_indexes , arg );
1051
1052
}
1052
1053
1053
1054
/* Wait threads */
1054
- for (i = 0 ; i < num_threads ; i ++ )
1055
+ for (j = 0 ; j < num_threads ; j ++ )
1055
1056
{
1056
- pthread_join (threads [i ], NULL );
1057
- if (threads_args [i ].ret == 1 )
1057
+ pthread_join (threads [j ], NULL );
1058
+ if (threads_args [j ].ret == 1 )
1058
1059
backup_isok = false;
1059
1060
}
1060
1061
pgut_disconnect (db_conn );
1061
1062
}
1062
1063
1063
1064
/* TODO write better info message */
1064
1065
if (backup_isok )
1065
- elog (INFO , "Indexes are checked" );
1066
+ elog (INFO , "Indexes are checked" );
1066
1067
else
1067
1068
elog (ERROR , "Indexs checking failed" );
1068
1069
@@ -2476,7 +2477,6 @@ check_files(void *arg)
2476
2477
int i ;
2477
2478
backup_files_arg * arguments = (backup_files_arg * ) arg ;
2478
2479
int n_backup_files_list = 0 ;
2479
- char dbname [NAMEDATALEN ];
2480
2480
2481
2481
if (arguments -> files_list )
2482
2482
n_backup_files_list = parray_num (arguments -> files_list );
@@ -2536,7 +2536,8 @@ check_files(void *arg)
2536
2536
join_path_components (to_path , arguments -> to_root ,
2537
2537
file -> path + strlen (arguments -> from_root ) + 1 );
2538
2538
2539
- check_data_file (arguments , file );
2539
+ if (!check_data_file (arguments , file ))
2540
+ arguments -> ret = 1 ;
2540
2541
}
2541
2542
}
2542
2543
else
@@ -2565,7 +2566,6 @@ check_indexes(void *arg)
2565
2566
if (arguments -> index_list )
2566
2567
n_indexes = parray_num (arguments -> index_list );
2567
2568
2568
- elog (WARNING , "n_indexes %d" , n_indexes );
2569
2569
for (i = 0 ; i < n_indexes ; i ++ )
2570
2570
{
2571
2571
pg_indexEntry * ind = (pg_indexEntry * ) parray_get (arguments -> index_list , i );
@@ -2606,14 +2606,15 @@ check_indexes(void *arg)
2606
2606
free (query );
2607
2607
}
2608
2608
2609
- amcheck_one_index (arguments , ind );
2609
+ /* remember that we have a failed check */
2610
+ if (!amcheck_one_index (arguments , ind ))
2611
+ arguments -> ret = 1 ;
2610
2612
}
2611
2613
2612
2614
/* Close connection */
2613
2615
if (arguments -> backup_conn )
2614
2616
pgut_disconnect (arguments -> backup_conn );
2615
2617
2616
- /* Data files transferring is successful */
2617
2618
/* TODO where should we set arguments->ret to 1? */
2618
2619
arguments -> ret = 0 ;
2619
2620
@@ -3324,19 +3325,12 @@ get_index_list(PGresult *res_db, int db_number,
3324
3325
PGresult * res ;
3325
3326
char * nspname = NULL ;
3326
3327
char * snapshot = NULL ;
3327
- Oid dbOid , tblspcOid ;
3328
- Oid indexrelid ;
3329
3328
int i ;
3330
3329
3331
3330
dbname = PQgetvalue (res_db , db_number , 0 );
3332
3331
if (strcmp (dbname , "template0" ) == 0 )
3333
3332
return NULL ;
3334
3333
3335
- elog (WARNING , "get_index_list db_number %d dbname %s" , db_number , dbname );
3336
-
3337
- dbOid = atoi (PQgetvalue (res_db , db_number , 1 ));
3338
- tblspcOid = atoi (PQgetvalue (res_db , db_number , 2 ));
3339
-
3340
3334
db_conn = pgut_connect (instance_config .pghost , instance_config .pgport ,
3341
3335
dbname ,
3342
3336
instance_config .pguser );
@@ -3360,15 +3354,13 @@ get_index_list(PGresult *res_db, int db_number,
3360
3354
3361
3355
nspname = pgut_malloc (strlen (PQgetvalue (res , 0 , 1 )) + 1 );
3362
3356
strcpy (nspname , PQgetvalue (res , 0 , 1 ));
3363
- elog (WARNING , "index_list for db %s nspname %s" , dbname , nspname );
3364
3357
3365
3358
/*
3366
3359
* In order to avoid duplicates, select global indexes
3367
3360
* (tablespace pg_global with oid 1664) only once
3368
3361
*/
3369
3362
if (* first_db_with_amcheck )
3370
3363
{
3371
- elog (WARNING , "FIRST AMCHECK for db %s nspname %s" , dbname , nspname );
3372
3364
res = pgut_execute (db_conn , "BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;" , 0 , NULL );
3373
3365
PQclear (res );
3374
3366
@@ -3380,7 +3372,6 @@ get_index_list(PGresult *res_db, int db_number,
3380
3372
snapshot = pgut_malloc (strlen (PQgetvalue (res , 0 , 0 )) + 1 );
3381
3373
strcpy (snapshot , PQgetvalue (res , 0 , 0 ));
3382
3374
3383
- elog (WARNING , "exported snapshot '%s'" , snapshot );
3384
3375
PQclear (res );
3385
3376
3386
3377
res = pgut_execute (db_conn , "SELECT cls.oid, cls.relname"
@@ -3393,8 +3384,6 @@ get_index_list(PGresult *res_db, int db_number,
3393
3384
}
3394
3385
else
3395
3386
{
3396
- elog (WARNING , "NOT FIRST AMCHECK for db %s nspname %s" , dbname , nspname );
3397
-
3398
3387
res = pgut_execute (db_conn , "BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;" , 0 , NULL );
3399
3388
PQclear (res );
3400
3389
@@ -3408,7 +3397,6 @@ get_index_list(PGresult *res_db, int db_number,
3408
3397
snapshot = pgut_malloc (strlen (PQgetvalue (res , 0 , 0 )) + 1 );
3409
3398
strcpy (snapshot , PQgetvalue (res , 0 , 0 ));
3410
3399
3411
- elog (WARNING , "exported snapshot '%s'" , snapshot );
3412
3400
PQclear (res );
3413
3401
3414
3402
res = pgut_execute (db_conn , "SELECT cls.oid, cls.relname"
@@ -3459,13 +3447,12 @@ amcheck_one_index(backup_files_arg *arguments,
3459
3447
{
3460
3448
PGresult * res ;
3461
3449
char * params [1 ];
3462
- char * result ;
3463
3450
char * query ;
3464
3451
params [0 ] = palloc (64 );
3465
3452
3466
3453
sprintf (params [0 ], "%i" , ind -> indexrelid );
3467
3454
3468
- // elog(WARNING , "amcheck_one_index %s ", ind->name);
3455
+ elog (VERBOSE , "amcheck index: '%s' " , ind -> name );
3469
3456
3470
3457
query = palloc (strlen (ind -> amcheck_nspname )+ strlen ("SELECT .bt_index_check($1)" )+ 1 );
3471
3458
sprintf (query , "SELECT %s.bt_index_check($1)" , ind -> amcheck_nspname );
0 commit comments