mirror of
https://github.com/postgres/postgres.git
synced 2025-11-09 06:21:09 +03:00
Add new parallel message type to progress reporting.
This commit adds a new type of parallel message 'P' to allow a parallel worker to poke at a leader to update the progress. Currently it supports only incremental progress reporting but it's possible to allow for supporting of other backend progress APIs in the future. There are no users of this new message type as of this commit. That will follow in future commits. Idea from Andres Freund. Author: Sami Imseih Reviewed by: Michael Paquier, Masahiko Sawada Discussion: https://www.postgresql.org/message-id/flat/5478DFCD-2333-401A-B2F0-0D186AB09228@amazon.com
This commit is contained in:
@@ -10,6 +10,8 @@
|
||||
*/
|
||||
#include "postgres.h"
|
||||
|
||||
#include "access/parallel.h"
|
||||
#include "libpq/pqformat.h"
|
||||
#include "port/atomics.h" /* for memory barriers */
|
||||
#include "utils/backend_progress.h"
|
||||
#include "utils/backend_status.h"
|
||||
@@ -79,6 +81,36 @@ pgstat_progress_incr_param(int index, int64 incr)
|
||||
PGSTAT_END_WRITE_ACTIVITY(beentry);
|
||||
}
|
||||
|
||||
/*-----------
|
||||
* pgstat_progress_parallel_incr_param() -
|
||||
*
|
||||
* A variant of pgstat_progress_incr_param to allow a worker to poke at
|
||||
* a leader to do an incremental progress update.
|
||||
*-----------
|
||||
*/
|
||||
void
|
||||
pgstat_progress_parallel_incr_param(int index, int64 incr)
|
||||
{
|
||||
/*
|
||||
* Parallel workers notify a leader through a 'P' protocol message to
|
||||
* update progress, passing the progress index and incremented value.
|
||||
* Leaders can just call pgstat_progress_incr_param directly.
|
||||
*/
|
||||
if (IsParallelWorker())
|
||||
{
|
||||
static StringInfoData progress_message;
|
||||
|
||||
initStringInfo(&progress_message);
|
||||
|
||||
pq_beginmessage(&progress_message, 'P');
|
||||
pq_sendint32(&progress_message, index);
|
||||
pq_sendint64(&progress_message, incr);
|
||||
pq_endmessage(&progress_message);
|
||||
}
|
||||
else
|
||||
pgstat_progress_incr_param(index, incr);
|
||||
}
|
||||
|
||||
/*-----------
|
||||
* pgstat_progress_update_multi_param() -
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user