Skip to content

Commit

Permalink
Add temporary debug info to help debug 019_replslot_limit.pl failures.
Browse files Browse the repository at this point in the history
I have not been able to reproduce the occasional failures of
019_replslot_limit.pl we are seeing in the buildfarm and not for lack of
trying. The additional logging and increased log level will hopefully help.

Will be reverted once the cause is identified.

Discussion: https://postgr.es/m/[email protected]
  • Loading branch information
anarazel committed Feb 23, 2022
1 parent 9467321 commit afdeff1
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 2 deletions.
21 changes: 21 additions & 0 deletions src/backend/replication/slot.c
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,10 @@ ReplicationSlotInitialize(void)
static void
ReplicationSlotShmemExit(int code, Datum arg)
{
/* temp debugging aid to analyze 019_replslot_limit failures */
elog(DEBUG3, "replication slot exit hook, %s active slot",
MyReplicationSlot != NULL ? "with" : "without");

/* Make sure active replication slots are released */
if (MyReplicationSlot != NULL)
ReplicationSlotRelease();
Expand Down Expand Up @@ -554,6 +558,9 @@ ReplicationSlotCleanup(void)
Assert(MyReplicationSlot == NULL);

restart:
/* temp debugging aid to analyze 019_replslot_limit failures */
elog(DEBUG3, "temporary replication slot cleanup: begin");

LWLockAcquire(ReplicationSlotControlLock, LW_SHARED);
for (i = 0; i < max_replication_slots; i++)
{
Expand All @@ -579,6 +586,8 @@ ReplicationSlotCleanup(void)
}

LWLockRelease(ReplicationSlotControlLock);

elog(DEBUG3, "temporary replication slot cleanup: done");
}

/*
Expand Down Expand Up @@ -1284,6 +1293,12 @@ InvalidatePossiblyObsoleteSlot(ReplicationSlot *s, XLogRecPtr oldestLSN,
(void) kill(active_pid, SIGTERM);
last_signaled_pid = active_pid;
}
else
{
/* temp debugging aid to analyze 019_replslot_limit failures */
elog(DEBUG3, "not signalling process %d during invalidation of slot \"%s\"",
active_pid, NameStr(slotname));
}

/* Wait until the slot is released. */
ConditionVariableSleep(&s->active_cv,
Expand Down Expand Up @@ -1347,6 +1362,10 @@ InvalidateObsoleteReplicationSlots(XLogSegNo oldestSegno)
XLogSegNoOffsetToRecPtr(oldestSegno, 0, wal_segment_size, oldestLSN);

restart:
/* temp debugging aid to analyze 019_replslot_limit failures */
elog(DEBUG3, "begin invalidating obsolete replication slots older than %X/%X",
LSN_FORMAT_ARGS(oldestLSN));

LWLockAcquire(ReplicationSlotControlLock, LW_SHARED);
for (int i = 0; i < max_replication_slots; i++)
{
Expand All @@ -1372,6 +1391,8 @@ InvalidateObsoleteReplicationSlots(XLogSegNo oldestSegno)
ReplicationSlotsComputeRequiredLSN();
}

elog(DEBUG3, "done invalidating obsolete replication slots");

return invalidated;
}

Expand Down
10 changes: 9 additions & 1 deletion src/bin/pg_basebackup/pg_basebackup.c
Original file line number Diff line number Diff line change
Expand Up @@ -700,8 +700,16 @@ StartLogStreamer(char *startpos, uint32 timeline, char *sysidentifier)
bgchild = fork();
if (bgchild == 0)
{
int ret;

/* in child process */
exit(LogStreamerMain(param));
ret = LogStreamerMain(param);

/* temp debugging aid to analyze 019_replslot_limit failures */
if (verbose)
pg_log_info("log streamer with pid %d exiting", getpid());

exit(ret);
}
else if (bgchild < 0)
{
Expand Down
5 changes: 4 additions & 1 deletion src/test/recovery/t/019_replslot_limit.pl
Original file line number Diff line number Diff line change
Expand Up @@ -316,13 +316,16 @@
max_wal_size = 2MB
log_checkpoints = yes
max_slot_wal_keep_size = 1MB
# temp debugging aid to analyze 019_replslot_limit failures
log_min_messages=debug3
));
$node_primary3->start;
$node_primary3->safe_psql('postgres',
"SELECT pg_create_physical_replication_slot('rep3')");
# Take backup
$backup_name = 'my_backup';
$node_primary3->backup($backup_name);
$node_primary3->backup($backup_name, backup_options => ['--verbose']);
# Create standby
my $node_standby3 = PostgreSQL::Test::Cluster->new('standby_3');
$node_standby3->init_from_backup($node_primary3, $backup_name,
Expand Down

0 comments on commit afdeff1

Please sign in to comment.