diff options
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/Makefile | 2 | ||||
-rw-r--r-- | src/backend/archive/Makefile | 18 | ||||
-rw-r--r-- | src/backend/archive/meson.build | 5 | ||||
-rw-r--r-- | src/backend/archive/shell_archive.c (renamed from src/backend/postmaster/shell_archive.c) | 41 | ||||
-rw-r--r-- | src/backend/meson.build | 1 | ||||
-rw-r--r-- | src/backend/postmaster/Makefile | 1 | ||||
-rw-r--r-- | src/backend/postmaster/meson.build | 1 | ||||
-rw-r--r-- | src/backend/postmaster/pgarch.c | 27 | ||||
-rw-r--r-- | src/backend/utils/misc/guc_tables.c | 1 |
9 files changed, 68 insertions, 29 deletions
diff --git a/src/backend/Makefile b/src/backend/Makefile index 86e6dcb7925..e4bf0fe9c0e 100644 --- a/src/backend/Makefile +++ b/src/backend/Makefile @@ -17,7 +17,7 @@ subdir = src/backend top_builddir = ../.. include $(top_builddir)/src/Makefile.global -SUBDIRS = access backup bootstrap catalog parser commands executor \ +SUBDIRS = access archive backup bootstrap catalog parser commands executor \ foreign lib libpq \ main nodes optimizer partitioning port postmaster \ regex replication rewrite \ diff --git a/src/backend/archive/Makefile b/src/backend/archive/Makefile new file mode 100644 index 00000000000..8d2860d0dfa --- /dev/null +++ b/src/backend/archive/Makefile @@ -0,0 +1,18 @@ +#------------------------------------------------------------------------- +# +# Makefile-- +# Makefile for src/backend/archive +# +# IDENTIFICATION +# src/backend/archive/Makefile +# +#------------------------------------------------------------------------- + +subdir = src/backend/archive +top_builddir = ../../.. +include $(top_builddir)/src/Makefile.global + +OBJS = \ + shell_archive.o + +include $(top_srcdir)/src/backend/common.mk diff --git a/src/backend/archive/meson.build b/src/backend/archive/meson.build new file mode 100644 index 00000000000..e194282931c --- /dev/null +++ b/src/backend/archive/meson.build @@ -0,0 +1,5 @@ +# Copyright (c) 2023, PostgreSQL Global Development Group + +backend_sources += files( + 'shell_archive.c' +) diff --git a/src/backend/postmaster/shell_archive.c b/src/backend/archive/shell_archive.c index 7771b951b7b..157ca4c751b 100644 --- a/src/backend/postmaster/shell_archive.c +++ b/src/backend/archive/shell_archive.c @@ -9,7 +9,7 @@ * Copyright (c) 2022-2023, PostgreSQL Global Development Group * * IDENTIFICATION - * src/backend/postmaster/shell_archive.c + * src/backend/archive/shell_archive.c * *------------------------------------------------------------------------- */ @@ -18,30 +18,39 @@ #include <sys/wait.h> #include "access/xlog.h" +#include "archive/archive_module.h" +#include "archive/shell_archive.h" #include "common/percentrepl.h" #include "pgstat.h" -#include "postmaster/pgarch.h" -static bool shell_archive_configured(void); -static bool shell_archive_file(const char *file, const char *path); -static void shell_archive_shutdown(void); - -void -shell_archive_init(ArchiveModuleCallbacks *cb) +static bool shell_archive_configured(ArchiveModuleState *state); +static bool shell_archive_file(ArchiveModuleState *state, + const char *file, + const char *path); +static void shell_archive_shutdown(ArchiveModuleState *state); + +static const ArchiveModuleCallbacks shell_archive_callbacks = { + .startup_cb = NULL, + .check_configured_cb = shell_archive_configured, + .archive_file_cb = shell_archive_file, + .shutdown_cb = shell_archive_shutdown +}; + +const ArchiveModuleCallbacks * +shell_archive_init(void) { - cb->check_configured_cb = shell_archive_configured; - cb->archive_file_cb = shell_archive_file; - cb->shutdown_cb = shell_archive_shutdown; + return &shell_archive_callbacks; } static bool -shell_archive_configured(void) +shell_archive_configured(ArchiveModuleState *state) { return XLogArchiveCommand[0] != '\0'; } static bool -shell_archive_file(const char *file, const char *path) +shell_archive_file(ArchiveModuleState *state, const char *file, + const char *path) { char *xlogarchcmd; char *nativePath = NULL; @@ -53,7 +62,9 @@ shell_archive_file(const char *file, const char *path) make_native_path(nativePath); } - xlogarchcmd = replace_percent_placeholders(XLogArchiveCommand, "archive_command", "fp", file, nativePath); + xlogarchcmd = replace_percent_placeholders(XLogArchiveCommand, + "archive_command", "fp", + file, nativePath); if (nativePath) pfree(nativePath); @@ -123,7 +134,7 @@ shell_archive_file(const char *file, const char *path) } static void -shell_archive_shutdown(void) +shell_archive_shutdown(ArchiveModuleState *state) { elog(DEBUG1, "archiver process shutting down"); } diff --git a/src/backend/meson.build b/src/backend/meson.build index b1db3ba75ba..4fdd209b826 100644 --- a/src/backend/meson.build +++ b/src/backend/meson.build @@ -7,6 +7,7 @@ backend_link_with = [pgport_srv, common_srv] generated_backend_sources = [] subdir('access') +subdir('archive') subdir('backup') subdir('bootstrap') subdir('catalog') diff --git a/src/backend/postmaster/Makefile b/src/backend/postmaster/Makefile index 3a794e54d60..047448b34eb 100644 --- a/src/backend/postmaster/Makefile +++ b/src/backend/postmaster/Makefile @@ -22,7 +22,6 @@ OBJS = \ interrupt.o \ pgarch.o \ postmaster.o \ - shell_archive.o \ startup.o \ syslogger.o \ walwriter.o diff --git a/src/backend/postmaster/meson.build b/src/backend/postmaster/meson.build index 9079922de7a..cda921fd10b 100644 --- a/src/backend/postmaster/meson.build +++ b/src/backend/postmaster/meson.build @@ -10,7 +10,6 @@ backend_sources += files( 'interrupt.c', 'pgarch.c', 'postmaster.c', - 'shell_archive.c', 'startup.c', 'syslogger.c', 'walwriter.c', diff --git a/src/backend/postmaster/pgarch.c b/src/backend/postmaster/pgarch.c index e551af29052..46af3495644 100644 --- a/src/backend/postmaster/pgarch.c +++ b/src/backend/postmaster/pgarch.c @@ -31,6 +31,8 @@ #include "access/xlog.h" #include "access/xlog_internal.h" +#include "archive/archive_module.h" +#include "archive/shell_archive.h" #include "lib/binaryheap.h" #include "libpq/pqsignal.h" #include "pgstat.h" @@ -97,7 +99,8 @@ char *XLogArchiveLibrary = ""; */ static time_t last_sigterm_time = 0; static PgArchData *PgArch = NULL; -static ArchiveModuleCallbacks ArchiveContext; +static const ArchiveModuleCallbacks *ArchiveCallbacks; +static ArchiveModuleState *archive_module_state; /* @@ -406,8 +409,8 @@ pgarch_ArchiverCopyLoop(void) HandlePgArchInterrupts(); /* can't do anything if not configured ... */ - if (ArchiveContext.check_configured_cb != NULL && - !ArchiveContext.check_configured_cb()) + if (ArchiveCallbacks->check_configured_cb != NULL && + !ArchiveCallbacks->check_configured_cb(archive_module_state)) { ereport(WARNING, (errmsg("archive_mode enabled, yet archiving is not configured"))); @@ -508,7 +511,7 @@ pgarch_archiveXlog(char *xlog) snprintf(activitymsg, sizeof(activitymsg), "archiving %s", xlog); set_ps_display(activitymsg); - ret = ArchiveContext.archive_file_cb(xlog, pathname); + ret = ArchiveCallbacks->archive_file_cb(archive_module_state, xlog, pathname); if (ret) snprintf(activitymsg, sizeof(activitymsg), "last was %s", xlog); else @@ -814,7 +817,7 @@ HandlePgArchInterrupts(void) /* * LoadArchiveLibrary * - * Loads the archiving callbacks into our local ArchiveContext. + * Loads the archiving callbacks into our local ArchiveCallbacks. */ static void LoadArchiveLibrary(void) @@ -827,8 +830,6 @@ LoadArchiveLibrary(void) errmsg("both archive_command and archive_library set"), errdetail("Only one of archive_command, archive_library may be set."))); - memset(&ArchiveContext, 0, sizeof(ArchiveModuleCallbacks)); - /* * If shell archiving is enabled, use our special initialization function. * Otherwise, load the library and call its _PG_archive_module_init(). @@ -844,12 +845,16 @@ LoadArchiveLibrary(void) ereport(ERROR, (errmsg("archive modules have to define the symbol %s", "_PG_archive_module_init"))); - (*archive_init) (&ArchiveContext); + ArchiveCallbacks = (*archive_init) (); - if (ArchiveContext.archive_file_cb == NULL) + if (ArchiveCallbacks->archive_file_cb == NULL) ereport(ERROR, (errmsg("archive modules must register an archive callback"))); + archive_module_state = (ArchiveModuleState *) palloc0(sizeof(ArchiveModuleState)); + if (ArchiveCallbacks->startup_cb != NULL) + ArchiveCallbacks->startup_cb(archive_module_state); + before_shmem_exit(pgarch_call_module_shutdown_cb, 0); } @@ -859,6 +864,6 @@ LoadArchiveLibrary(void) static void pgarch_call_module_shutdown_cb(int code, Datum arg) { - if (ArchiveContext.shutdown_cb != NULL) - ArchiveContext.shutdown_cb(); + if (ArchiveCallbacks->shutdown_cb != NULL) + ArchiveCallbacks->shutdown_cb(archive_module_state); } diff --git a/src/backend/utils/misc/guc_tables.c b/src/backend/utils/misc/guc_tables.c index 43b9d926600..1c0583fe267 100644 --- a/src/backend/utils/misc/guc_tables.c +++ b/src/backend/utils/misc/guc_tables.c @@ -33,6 +33,7 @@ #include "access/xlog_internal.h" #include "access/xlogprefetcher.h" #include "access/xlogrecovery.h" +#include "archive/archive_module.h" #include "catalog/namespace.h" #include "catalog/storage.h" #include "commands/async.h" |