diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/replication/basebackup.c | 11 | ||||
-rw-r--r-- | src/backend/replication/basebackup_copy.c | 172 | ||||
-rw-r--r-- | src/include/replication/basebackup_sink.h | 1 |
3 files changed, 13 insertions, 171 deletions
diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c index 10ce2406c0f..fcd9161f749 100644 --- a/src/backend/replication/basebackup.c +++ b/src/backend/replication/basebackup.c @@ -56,7 +56,6 @@ typedef enum { BACKUP_TARGET_BLACKHOLE, - BACKUP_TARGET_COMPAT, BACKUP_TARGET_CLIENT, BACKUP_TARGET_SERVER } backup_target_type; @@ -719,7 +718,7 @@ parse_basebackup_options(List *options, basebackup_options *opt) bool o_compression_level = false; MemSet(opt, 0, sizeof(*opt)); - opt->target = BACKUP_TARGET_COMPAT; + opt->target = BACKUP_TARGET_CLIENT; opt->manifest = MANIFEST_OPTION_NO; opt->manifest_checksum_type = CHECKSUM_TYPE_CRC32C; opt->compression = BACKUP_COMPRESSION_NONE; @@ -992,16 +991,11 @@ SendBaseBackup(BaseBackupCmd *cmd) * protocol. If the target is specifically 'client' then set up to stream * the backup to the client; otherwise, it's being sent someplace else and * should not be sent to the client. - * - * If the TARGET option was not specified, we must fall back to the older - * and less capable copy-tablespace protocol. */ if (opt.target == BACKUP_TARGET_CLIENT) sink = bbsink_copystream_new(true); - else if (opt.target != BACKUP_TARGET_COMPAT) - sink = bbsink_copystream_new(false); else - sink = bbsink_copytblspc_new(); + sink = bbsink_copystream_new(false); /* * If a non-default backup target is in use, arrange to send the data @@ -1012,7 +1006,6 @@ SendBaseBackup(BaseBackupCmd *cmd) case BACKUP_TARGET_BLACKHOLE: /* Nothing to do, just discard data. */ break; - case BACKUP_TARGET_COMPAT: case BACKUP_TARGET_CLIENT: /* Nothing to do, handling above is sufficient. */ break; diff --git a/src/backend/replication/basebackup_copy.c b/src/backend/replication/basebackup_copy.c index 938e19a6a43..de7875552ce 100644 --- a/src/backend/replication/basebackup_copy.c +++ b/src/backend/replication/basebackup_copy.c @@ -3,25 +3,18 @@ * basebackup_copy.c * send basebackup archives using COPY OUT * - * We have two different ways of doing this. + * We send a result set with information about the tabelspaces to be included + * in the backup before starting COPY OUT. Then, we start a single COPY OUT + * operation and transmits all the archives and the manifest if present during + * the course of that single COPY OUT. Each CopyData message begins with a + * type byte, allowing us to signal the start of a new archive, or the + * manifest, by some means other than ending the COPY stream. This also allows + * for future protocol extensions, since we can include arbitrary information + * in the message stream as long as we're certain that the client will know + * what to do with it. * - * 'copytblspc' is an older method still supported for compatibility - * with releases prior to v15. In this method, a separate COPY OUT - * operation is used for each tablespace. The manifest, if it is sent, - * uses an additional COPY OUT operation. - * - * 'copystream' sends a starts a single COPY OUT operation and transmits - * all the archives and the manifest if present during the course of that - * single COPY OUT. Each CopyData message begins with a type byte, - * allowing us to signal the start of a new archive, or the manifest, - * by some means other than ending the COPY stream. This also allows - * this protocol to be extended more easily, since we can include - * arbitrary information in the message stream as long as we're certain - * that the client will know what to do with it. - * - * Regardless of which method is used, we sent a result set with - * information about the tabelspaces to be included in the backup before - * starting COPY OUT. This result has the same format in every method. + * An older method that sent each archive using a separate COPY OUT + * operation is no longer supported. * * Portions Copyright (c) 2010-2022, PostgreSQL Global Development Group * @@ -87,20 +80,7 @@ static void bbsink_copystream_end_backup(bbsink *sink, XLogRecPtr endptr, TimeLineID endtli); static void bbsink_copystream_cleanup(bbsink *sink); -static void bbsink_copytblspc_begin_backup(bbsink *sink); -static void bbsink_copytblspc_begin_archive(bbsink *sink, - const char *archive_name); -static void bbsink_copytblspc_archive_contents(bbsink *sink, size_t len); -static void bbsink_copytblspc_end_archive(bbsink *sink); -static void bbsink_copytblspc_begin_manifest(bbsink *sink); -static void bbsink_copytblspc_manifest_contents(bbsink *sink, size_t len); -static void bbsink_copytblspc_end_manifest(bbsink *sink); -static void bbsink_copytblspc_end_backup(bbsink *sink, XLogRecPtr endptr, - TimeLineID endtli); -static void bbsink_copytblspc_cleanup(bbsink *sink); - static void SendCopyOutResponse(void); -static void SendCopyData(const char *data, size_t len); static void SendCopyDone(void); static void SendXlogRecPtrResult(XLogRecPtr ptr, TimeLineID tli); static void SendTablespaceList(List *tablespaces); @@ -118,18 +98,6 @@ const bbsink_ops bbsink_copystream_ops = { .cleanup = bbsink_copystream_cleanup }; -const bbsink_ops bbsink_copytblspc_ops = { - .begin_backup = bbsink_copytblspc_begin_backup, - .begin_archive = bbsink_copytblspc_begin_archive, - .archive_contents = bbsink_copytblspc_archive_contents, - .end_archive = bbsink_copytblspc_end_archive, - .begin_manifest = bbsink_copytblspc_begin_manifest, - .manifest_contents = bbsink_copytblspc_manifest_contents, - .end_manifest = bbsink_copytblspc_end_manifest, - .end_backup = bbsink_copytblspc_end_backup, - .cleanup = bbsink_copytblspc_cleanup -}; - /* * Create a new 'copystream' bbsink. */ @@ -339,115 +307,6 @@ bbsink_copystream_cleanup(bbsink *sink) } /* - * Create a new 'copytblspc' bbsink. - */ -bbsink * -bbsink_copytblspc_new(void) -{ - bbsink *sink = palloc0(sizeof(bbsink)); - - *((const bbsink_ops **) &sink->bbs_ops) = &bbsink_copytblspc_ops; - - return sink; -} - -/* - * Begin backup. - */ -static void -bbsink_copytblspc_begin_backup(bbsink *sink) -{ - bbsink_state *state = sink->bbs_state; - - /* Create a suitable buffer. */ - sink->bbs_buffer = palloc(sink->bbs_buffer_length); - - /* Tell client the backup start location. */ - SendXlogRecPtrResult(state->startptr, state->starttli); - - /* Send client a list of tablespaces. */ - SendTablespaceList(state->tablespaces); - - /* Send a CommandComplete message */ - pq_puttextmessage('C', "SELECT"); -} - -/* - * Each archive is set as a separate stream of COPY data, and thus begins - * with a CopyOutResponse message. - */ -static void -bbsink_copytblspc_begin_archive(bbsink *sink, const char *archive_name) -{ - SendCopyOutResponse(); -} - -/* - * Each chunk of data within the archive is sent as a CopyData message. - */ -static void -bbsink_copytblspc_archive_contents(bbsink *sink, size_t len) -{ - SendCopyData(sink->bbs_buffer, len); -} - -/* - * The archive is terminated by a CopyDone message. - */ -static void -bbsink_copytblspc_end_archive(bbsink *sink) -{ - SendCopyDone(); -} - -/* - * The backup manifest is sent as a separate stream of COPY data, and thus - * begins with a CopyOutResponse message. - */ -static void -bbsink_copytblspc_begin_manifest(bbsink *sink) -{ - SendCopyOutResponse(); -} - -/* - * Each chunk of manifest data is sent using a CopyData message. - */ -static void -bbsink_copytblspc_manifest_contents(bbsink *sink, size_t len) -{ - SendCopyData(sink->bbs_buffer, len); -} - -/* - * When we've finished sending the manifest, send a CopyDone message. - */ -static void -bbsink_copytblspc_end_manifest(bbsink *sink) -{ - SendCopyDone(); -} - -/* - * Send end-of-backup wire protocol messages. - */ -static void -bbsink_copytblspc_end_backup(bbsink *sink, XLogRecPtr endptr, - TimeLineID endtli) -{ - SendXlogRecPtrResult(endptr, endtli); -} - -/* - * Cleanup. - */ -static void -bbsink_copytblspc_cleanup(bbsink *sink) -{ - /* Nothing to do. */ -} - -/* * Send a CopyOutResponse message. */ static void @@ -462,15 +321,6 @@ SendCopyOutResponse(void) } /* - * Send a CopyData message. - */ -static void -SendCopyData(const char *data, size_t len) -{ - pq_putmessage('d', data, len); -} - -/* * Send a CopyDone message. */ static void diff --git a/src/include/replication/basebackup_sink.h b/src/include/replication/basebackup_sink.h index d3276b2487b..2cfa816bb81 100644 --- a/src/include/replication/basebackup_sink.h +++ b/src/include/replication/basebackup_sink.h @@ -283,7 +283,6 @@ extern void bbsink_forward_cleanup(bbsink *sink); /* Constructors for various types of sinks. */ extern bbsink *bbsink_copystream_new(bool send_to_client); -extern bbsink *bbsink_copytblspc_new(void); extern bbsink *bbsink_gzip_new(bbsink *next, int compresslevel); extern bbsink *bbsink_progress_new(bbsink *next, bool estimate_backup_size); extern bbsink *bbsink_server_new(bbsink *next, char *pathname); |