Small Bug in pgstat display during recovery conflict resolution
От | Andres Freund |
---|---|
Тема | Small Bug in pgstat display during recovery conflict resolution |
Дата | |
Msg-id | 201002072147.41688.andres@anarazel.de обсуждение исходный текст |
Ответы |
Re: Small Bug in pgstat display during recovery conflict resolution
|
Список | 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_displayreturns a string without a \0 terminator. The attached patch fixes that. Andres
В списке pgsql-hackers по дате отправления: