From: | Andres Freund <andres(at)anarazel(dot)de> |
---|---|
To: | Simon Riggs <simon(at)2ndquadrant(dot)com>, pgsql-hackers(at)postgresql(dot)org |
Subject: | Small Bug in pgstat display during recovery conflict resolution |
Date: | 2010-02-07 20:47:39 |
Message-ID: | 201002072147.41688.andres@anarazel.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi Simon, Hi all,
if (!logged && (wait_s > 0 || wait_us > 500000))
{
const char *oldactivitymsg;
int len;
oldactivitymsg = get_ps_display(&len);
snprintf(waitactivitymsg, sizeof(waitactivitymsg),
"waiting for max_standby_delay (%u s)",
MaxStandbyDelay);
set_ps_display(waitactivitymsg, false);
if (len > 100)
len = 100;
memcpy(waitactivitymsg, oldactivitymsg, len);
pgstat_report_waiting(true);
logged = true;
}
..
if (logged)
{
set_ps_display(waitactivitymsg, false);
pgstat_report_waiting(false);
}
That doesnt work because get_ps_display returns the internal buffer. This
leads to the situation that after conflict resolution the
"waiting for max_standby_delay ..."
message is displayed until the next segment starts where its replaced
again by the
"... recovering ..." line.
Additionally the old code may print unintialized memory if get_ps_display
returns a string without a \0 terminator.
The attached patch fixes that.
Andres
Attachment | Content-Type | Size |
---|---|---|
0001-The-stat-reporting-in-ResolveRecoveryConflictWithVir.patch | text/x-patch | 2.4 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2010-02-07 20:48:13 | pgsql: Create a "relation mapping" infrastructure to support changing |
Previous Message | Josh Berkus | 2010-02-07 20:37:56 | Re: damage control mode |