Tweak logic for when to display:

"Waiting for %d transactions to finish. First PID: %s"

message. Display it on every loop through the SQL_XID_ALIVE check
(i.e. every second), instead of only when the number of transactions
we're waiting on changes -- previously, it was too easy for that
important message to get lost in other messages.

And don't display the message at all when running under pg_regress,
i.e. as part of `make installcheck`. We had been getting occasional
errors from pg_regress when autovacuum was running and that message
got logged.
This commit is contained in:
Josh Kupershmidt 2015-01-11 19:31:09 -05:00
parent 0cb40b6204
commit 8f61e44efd

View File

@ -987,7 +987,6 @@ repack_one_table(repack_table *table, const char *orderby)
PGresult *res = NULL;
const char *params[2];
int num;
int num_waiting = 0;
char *vxid = NULL;
char buffer[12];
StringInfoData sql;
@ -997,6 +996,11 @@ repack_one_table(repack_table *table, const char *orderby)
char indexbuffer[12];
int j;
/* appname will be "pg_repack" in normal use on 9.0+, or
* "pg_regress" when run under `make installcheck`
*/
const char *appname = getenv("PGAPPNAME");
/* Keep track of whether we have gotten through setup to install
* the z_repack_trigger, log table, etc. ourselves. We don't want to
* go through repack_cleanup() if we didn't actually set up the
@ -1312,15 +1316,14 @@ repack_one_table(repack_table *table, const char *orderby)
if (num > 0)
{
/* Wait for old transactions.
* Only display the message below when the number of
* transactions we are waiting on changes (presumably,
* num_waiting should only go down), so as not to
* be too noisy.
* Only display this message if we are NOT
* running under pg_regress, so as not to cause
* noise which would trip up pg_regress.
*/
if (num != num_waiting)
if (!appname || strcmp(appname, "pg_regress") != 0)
{
elog(NOTICE, "Waiting for %d transactions to finish. First PID: %s", num, PQgetvalue(res, 0, 0));
num_waiting = num;
}
CLEARPGRES(res);