aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/transam/parallel.c
diff options
context:
space:
mode:
authorMasahiko Sawada <msawada@postgresql.org>2023-07-11 12:33:54 +0900
committerMasahiko Sawada <msawada@postgresql.org>2023-07-11 12:33:54 +0900
commitf1889729dd3ab0352dc0ccc2ffcc1b1901f8e39f (patch)
tree6c82b614a2f73a9f5ab2a83c32da8cdf832d1079 /src/backend/access/transam/parallel.c
parent26dd0284b98f6bf730dc1f7f7e1f917525d71eda (diff)
downloadpostgresql-f1889729dd3ab0352dc0ccc2ffcc1b1901f8e39f.tar.gz
postgresql-f1889729dd3ab0352dc0ccc2ffcc1b1901f8e39f.zip
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
Diffstat (limited to 'src/backend/access/transam/parallel.c')
-rw-r--r--src/backend/access/transam/parallel.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c
index 2b8bc2f58dd..2bd04bd1773 100644
--- a/src/backend/access/transam/parallel.c
+++ b/src/backend/access/transam/parallel.c
@@ -24,6 +24,7 @@
#include "catalog/pg_enum.h"
#include "catalog/storage.h"
#include "commands/async.h"
+#include "commands/progress.h"
#include "commands/vacuum.h"
#include "executor/execParallel.h"
#include "libpq/libpq.h"
@@ -1199,6 +1200,23 @@ HandleParallelMessage(ParallelContext *pcxt, int i, StringInfo msg)
break;
}
+ case 'P': /* Parallel progress reporting */
+ {
+ /*
+ * Only incremental progress reporting is currently supported.
+ * However, it's possible to add more fields to the message to
+ * allow for handling of other backend progress APIs.
+ */
+ int index = pq_getmsgint(msg, 4);
+ int64 incr = pq_getmsgint64(msg);
+
+ pq_getmsgend(msg);
+
+ pgstat_progress_incr_param(index, incr);
+
+ break;
+ }
+
case 'X': /* Terminate, indicating clean exit */
{
shm_mq_detach(pcxt->worker[i].error_mqh);