aboutsummaryrefslogtreecommitdiff
path: root/src/bin/scripts/scripts_parallel.h
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2019-07-19 09:31:58 +0900
committerMichael Paquier <michael@paquier.xyz>2019-07-19 09:31:58 +0900
commit5f3840370b63fdf17f704a285623ccc233fa8d4f (patch)
tree194f7e1322dc8fb871b853e516a13e12e96a81de /src/bin/scripts/scripts_parallel.h
parentb538c90b1bded5464787e2b8e4431302d24eb601 (diff)
downloadpostgresql-5f3840370b63fdf17f704a285623ccc233fa8d4f.tar.gz
postgresql-5f3840370b63fdf17f704a285623ccc233fa8d4f.zip
Refactor parallelization processing code in src/bin/scripts/
The existing facility of vacuumdb to handle parallel connections into a given database with an authentication set is moved to a common file in src/bin/scripts/, named scripts_parallel.c. This introduces a set of routines to initialize, wait and terminate a set of connections, simplifying a bit the code of vacuumdb on the way. More routines related to result handling and database connection are moved to common.c. The initial plan is to use that for reindexdb, but it could be applied to other tools like clusterdb. While on it, clean up a set of variables "progname" which were defined as routine arguments for error messages. Since most of the callers have switched to pg_log_error() and such there is no need for this variable. Author: Julien Rouhaud Reviewed-by: Michael Paquier, Álvaro Herrera Discussion: https://postgr.es/m/CAOBaU_YrnH_Jqo46NhaJ7uRBiWWEcS40VNRQxgFbqYo9kApUsg@mail.gmail.com
Diffstat (limited to 'src/bin/scripts/scripts_parallel.h')
-rw-r--r--src/bin/scripts/scripts_parallel.h36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/bin/scripts/scripts_parallel.h b/src/bin/scripts/scripts_parallel.h
new file mode 100644
index 00000000000..f1a724a64f1
--- /dev/null
+++ b/src/bin/scripts/scripts_parallel.h
@@ -0,0 +1,36 @@
+/*-------------------------------------------------------------------------
+ *
+ * scripts_parallel.h
+ * Parallel support for bin/scripts/
+ *
+ * Copyright (c) 2003-2019, PostgreSQL Global Development Group
+ *
+ * src/bin/scripts/scripts_parallel.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef SCRIPTS_PARALLEL_H
+#define SCRIPTS_PARALLEL_H
+
+
+typedef struct ParallelSlot
+{
+ PGconn *connection; /* One connection */
+ bool isFree; /* Is it known to be idle? */
+} ParallelSlot;
+
+extern ParallelSlot *ParallelSlotsGetIdle(ParallelSlot *slots, int numslots);
+
+extern ParallelSlot *ParallelSlotsSetup(const char *dbname, const char *host,
+ const char *port,
+ const char *username,
+ bool prompt_password,
+ const char *progname, bool echo,
+ PGconn *conn, int numslots);
+
+extern void ParallelSlotsTerminate(ParallelSlot *slots, int numslots);
+
+extern bool ParallelSlotsWaitCompletion(ParallelSlot *slots, int numslots);
+
+
+#endif /* SCRIPTS_PARALLEL_H */