aboutsummaryrefslogtreecommitdiff
path: root/src/include/archive/shell_archive.h
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2023-02-17 14:26:42 +0900
committerMichael Paquier <michael@paquier.xyz>2023-02-17 14:26:42 +0900
commit35739b87dcfef9fc0186aca659f262746fecd778 (patch)
treed0b8e0c9698f1e0096a6ba90808a405246923fe7 /src/include/archive/shell_archive.h
parentd2ea2d310dfdc40328aca5b6c52225de78432e01 (diff)
downloadpostgresql-35739b87dcfef9fc0186aca659f262746fecd778.tar.gz
postgresql-35739b87dcfef9fc0186aca659f262746fecd778.zip
Redesign archive modules
A new callback named startup_cb, called shortly after a module is loaded, is added. This makes possible the initialization of any additional state data required by a module. This initial state data can be saved in a ArchiveModuleState, that is now passed down to all the callbacks that can be defined in a module. With this design, it is possible to have a per-module state, aimed at opening the door to the support of more than one archive module. The initialization of the callbacks is changed so as _PG_archive_module_init() does not anymore give in input a ArchiveModuleCallbacks that a module has to fill in with callback definitions. Instead, a module now needs to return a const ArchiveModuleCallbacks. All the structure and callback definitions of archive modules are moved into their own header, named archive_module.h, from pgarch.h. Command-based archiving follows the same line, with a new set of files named shell_archive.{c,h}. There are a few more items that are under discussion to improve the design of archive modules, like the fact that basic_archive calls sigsetjmp() by itself to define its own error handling flow. These will be adjusted later, the changes done here cover already a good portion of what has been discussed. Any modules created for v15 will need to be adjusted to this new design. Author: Nathan Bossart Reviewed-by: Andres Freund Discussion: https://postgr.es/m/20230130194810.6fztfgbn32e7qarj@awork3.anarazel.de
Diffstat (limited to 'src/include/archive/shell_archive.h')
-rw-r--r--src/include/archive/shell_archive.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/include/archive/shell_archive.h b/src/include/archive/shell_archive.h
new file mode 100644
index 00000000000..9de6f769f12
--- /dev/null
+++ b/src/include/archive/shell_archive.h
@@ -0,0 +1,24 @@
+/*-------------------------------------------------------------------------
+ *
+ * shell_archive.h
+ * Exports for archiving via shell.
+ *
+ * Copyright (c) 2022-2023, PostgreSQL Global Development Group
+ *
+ * src/include/archive/shell_archive.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _SHELL_ARCHIVE_H
+#define _SHELL_ARCHIVE_H
+
+#include "archive/archive_module.h"
+
+/*
+ * Since the logic for archiving via a shell command is in the core server
+ * and does not need to be loaded via a shared library, it has a special
+ * initialization function.
+ */
+extern const ArchiveModuleCallbacks *shell_archive_init(void);
+
+#endif /* _SHELL_ARCHIVE_H */