diff --git a/build/lib/pgBackRestBuild/Config/Data.pm b/build/lib/pgBackRestBuild/Config/Data.pm index 75aaa2f92..f424181be 100644 --- a/build/lib/pgBackRestBuild/Config/Data.pm +++ b/build/lib/pgBackRestBuild/Config/Data.pm @@ -80,6 +80,8 @@ use constant CFGCMD_ARCHIVE_GET_ASYNC => 'archive- push @EXPORT, qw(CFGCMD_ARCHIVE_GET_ASYNC); use constant CFGCMD_ARCHIVE_PUSH => 'archive-push'; push @EXPORT, qw(CFGCMD_ARCHIVE_PUSH); +use constant CFGCMD_ARCHIVE_PUSH_ASYNC => 'archive-push-async'; + push @EXPORT, qw(CFGCMD_ARCHIVE_PUSH_ASYNC); use constant CFGCMD_BACKUP => 'backup'; push @EXPORT, qw(CFGCMD_BACKUP); use constant CFGCMD_CHECK => 'check'; @@ -590,6 +592,14 @@ my $rhCommandDefine = &CFGDEF_PARAMETER_ALLOWED => true, }, + &CFGCMD_ARCHIVE_PUSH_ASYNC => + { + &CFGDEF_LOG_FILE => true, + &CFGDEF_LOCK_REQUIRED => true, + &CFGDEF_LOCK_TYPE => CFGDEF_LOCK_TYPE_ARCHIVE, + &CFGDEF_PARAMETER_ALLOWED => true, + }, + &CFGCMD_BACKUP => { &CFGDEF_LOCK_REQUIRED => true, @@ -684,6 +694,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_EXPIRE => {}, @@ -783,6 +794,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_EXPIRE => {}, @@ -1091,6 +1103,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_EXPIRE => {}, @@ -1115,6 +1128,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_LOCAL => {}, @@ -1147,6 +1161,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_RESTORE => {}, } @@ -1163,6 +1178,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_INFO => {}, @@ -1186,6 +1202,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_INFO => {}, @@ -1208,6 +1225,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_EXPIRE => {}, @@ -1232,6 +1250,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_EXPIRE => {}, @@ -1256,6 +1275,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_EXPIRE => {}, &CFGCMD_INFO => {}, @@ -1280,6 +1300,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_EXPIRE => {}, @@ -1306,6 +1327,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_EXPIRE => {}, @@ -1331,6 +1353,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_INFO => {}, @@ -1417,6 +1440,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => { &CFGDEF_INTERNAL => true, @@ -1462,6 +1486,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_CHECK => {}, &CFGCMD_INFO => {}, &CFGCMD_LOCAL => {}, @@ -1696,6 +1721,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_EXPIRE => {}, @@ -1803,6 +1829,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_EXPIRE => {}, @@ -1843,6 +1870,7 @@ my %hConfigDefine = &CFGDEF_DEPEND_LIST => [true], }, }, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, }, }, @@ -1857,6 +1885,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_RESTORE => {}, } @@ -1884,6 +1913,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_EXPIRE => {}, @@ -1908,6 +1938,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_EXPIRE => {}, @@ -1940,6 +1971,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_EXPIRE => {}, @@ -1965,6 +1997,7 @@ my %hConfigDefine = &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_GET_ASYNC => {}, &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_EXPIRE => {}, @@ -2015,6 +2048,7 @@ my %hConfigDefine = &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_PUSH => {}, + &CFGCMD_ARCHIVE_PUSH_ASYNC => {}, }, }, @@ -2259,6 +2293,10 @@ my %hConfigDefine = { &CFGDEF_INTERNAL => true, }, + &CFGCMD_ARCHIVE_PUSH_ASYNC => + { + &CFGDEF_INTERNAL => true, + }, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_EXPIRE => {}, @@ -2380,6 +2418,10 @@ my %hConfigDefine = { &CFGDEF_REQUIRED => false }, + &CFGCMD_ARCHIVE_PUSH_ASYNC => + { + &CFGDEF_REQUIRED => false + }, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_LOCAL => diff --git a/doc/lib/BackRestDoc/Common/DocConfig.pm b/doc/lib/BackRestDoc/Common/DocConfig.pm index 1219484b5..48cdc0841 100644 --- a/doc/lib/BackRestDoc/Common/DocConfig.pm +++ b/doc/lib/BackRestDoc/Common/DocConfig.pm @@ -195,7 +195,8 @@ sub process foreach my $strCommand (cfgDefineCommandList()) { - if ($strCommand eq CFGCMD_REMOTE || $strCommand eq CFGCMD_LOCAL || $strCommand eq CFGCMD_ARCHIVE_GET_ASYNC) + if ($strCommand eq CFGCMD_REMOTE || $strCommand eq CFGCMD_LOCAL || $strCommand eq CFGCMD_ARCHIVE_GET_ASYNC || + $strCommand eq CFGCMD_ARCHIVE_PUSH_ASYNC) { next; } diff --git a/doc/xml/release.xml b/doc/xml/release.xml index ba1346184..2273b6fb5 100644 --- a/doc/xml/release.xml +++ b/doc/xml/release.xml @@ -15,6 +15,10 @@ + +

Add separate archive-push-async command.

+
+

Add CIFS storage driver.

diff --git a/lib/pgBackRest/Archive/Push/Push.pm b/lib/pgBackRest/Archive/Push/Push.pm index 957210ad1..6f1fbe354 100644 --- a/lib/pgBackRest/Archive/Push/Push.pm +++ b/lib/pgBackRest/Archive/Push/Push.pm @@ -38,11 +38,13 @@ sub process ( $strOperation, $strWalPathFile, + $bAsync, ) = logDebugParam ( __PACKAGE__ . '->process', \@_, {name => 'strWalPathFile', required => false}, + {name => 'bAsync', required => true}, ); # Make sure the command happens on the db side @@ -61,7 +63,7 @@ sub process my $strWalFile = basename($strWalPathFile); # Start the async process and wait for WAL to complete - if (cfgOption(CFGOPT_ARCHIVE_ASYNC)) + if ($bAsync) { # Load module dynamically require pgBackRest::Archive::Push::Async; diff --git a/lib/pgBackRest/LibCAuto.pm b/lib/pgBackRest/LibCAuto.pm index 264729b46..65b8234e9 100644 --- a/lib/pgBackRest/LibCAuto.pm +++ b/lib/pgBackRest/LibCAuto.pm @@ -106,6 +106,7 @@ sub libcAutoExportTag 'CFGCMD_ARCHIVE_GET', 'CFGCMD_ARCHIVE_GET_ASYNC', 'CFGCMD_ARCHIVE_PUSH', + 'CFGCMD_ARCHIVE_PUSH_ASYNC', 'CFGCMD_BACKUP', 'CFGCMD_CHECK', 'CFGCMD_EXPIRE', diff --git a/lib/pgBackRest/Main.pm b/lib/pgBackRest/Main.pm index 3defdc622..2ae85ce02 100644 --- a/lib/pgBackRest/Main.pm +++ b/lib/pgBackRest/Main.pm @@ -77,7 +77,18 @@ sub main require pgBackRest::Archive::Push::Push; pgBackRest::Archive::Push::Push->import(); - new pgBackRest::Archive::Push::Push()->process($stryCommandArg[0]); + new pgBackRest::Archive::Push::Push()->process($stryCommandArg[0], false); + } + + # Process archive-push-async command + # -------------------------------------------------------------------------------------------------------------------------- + elsif (cfgCommandTest(CFGCMD_ARCHIVE_PUSH_ASYNC)) + { + # Load module dynamically + require pgBackRest::Archive::Push::Push; + pgBackRest::Archive::Push::Push->import(); + + new pgBackRest::Archive::Push::Push()->process($stryCommandArg[0], true); } # Process remote command diff --git a/src/Makefile b/src/Makefile index 9d014f316..da5f50fa6 100644 --- a/src/Makefile +++ b/src/Makefile @@ -211,7 +211,7 @@ command/archive/get/get.o: command/archive/get/get.c command/archive/common.h co command/archive/get/protocol.o: command/archive/get/protocol.c command/archive/get/file.h command/archive/get/protocol.h common/assert.h common/crypto/common.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/io.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/string.h common/type/stringList.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h protocol/server.h storage/fileRead.h storage/fileWrite.h storage/helper.h storage/info.h storage/storage.h $(CC) $(CFLAGS) -c command/archive/get/protocol.c -o command/archive/get/protocol.o -command/archive/push/push.o: command/archive/push/push.c command/archive/common.h command/command.h common/assert.h common/debug.h common/error.auto.h common/error.h common/fork.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/string.h common/type/stringList.h common/type/variant.h common/type/variantList.h common/wait.h config/config.auto.h config/config.h config/define.auto.h config/define.h config/load.h perl/exec.h storage/fileRead.h storage/fileWrite.h storage/helper.h storage/info.h storage/storage.h +command/archive/push/push.o: command/archive/push/push.c command/archive/common.h command/command.h common/assert.h common/debug.h common/error.auto.h common/error.h common/fork.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/string.h common/type/stringList.h common/type/variant.h common/type/variantList.h common/wait.h config/config.auto.h config/config.h config/define.auto.h config/define.h config/exec.h perl/exec.h storage/fileRead.h storage/fileWrite.h storage/helper.h storage/info.h storage/storage.h $(CC) $(CFLAGS) -c command/archive/push/push.c -o command/archive/push/push.o command/command.o: command/command.c common/assert.h common/debug.h common/error.auto.h common/error.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/string.h common/type/stringList.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h version.h diff --git a/src/command/archive/push/push.c b/src/command/archive/push/push.c index 3564f2ff9..bcafcf84a 100644 --- a/src/command/archive/push/push.c +++ b/src/command/archive/push/push.c @@ -11,7 +11,7 @@ Archive Push Command #include "common/memContext.h" #include "common/wait.h" #include "config/config.h" -#include "config/load.h" +#include "config/exec.h" #include "perl/exec.h" #include "storage/helper.h" @@ -39,7 +39,6 @@ cmdArchivePush(void) bool pushed = false; // Has the WAL segment been pushed yet? bool forked = false; // Has the async process been forked yet? bool confessOnError = false; // Should we confess errors? - bool server = false; // Is this the async server process? // Loop and wait for the WAL segment to be pushed Wait *wait = waitNew((TimeMSec)(cfgOptionDbl(cfgOptArchiveTimeout) * MSEC_PER_SEC)); @@ -56,74 +55,52 @@ cmdArchivePush(void) if (!pushed && !forked && lockAcquire(cfgOptionStr(cfgOptLockPath), cfgOptionStr(cfgOptStanza), cfgLockType(), 0, false)) { + // The async process should not output on the console at all + KeyValue *optionReplace = kvNew(); + + kvPut(optionReplace, varNewStr(strNew(cfgOptionName(cfgOptLogLevelConsole))), varNewStrZ("off")); + kvPut(optionReplace, varNewStr(strNew(cfgOptionName(cfgOptLogLevelStderr))), varNewStrZ("off")); + + // Generate command options + StringList *commandExec = cfgExecParam(cfgCmdArchivePushAsync, optionReplace); + strLstInsert(commandExec, 0, cfgExe()); + strLstAdd(commandExec, strLstGet(commandParam, 0)); + + // Release the lock and mark the async process as forked + lockRelease(true); + forked = true; + // Fork off the async process if (fork() == 0) { - // This is the server process - server = true; - - // The async process should not output on the console at all - cfgOptionSet(cfgOptLogLevelConsole, cfgSourceParam, varNewStrZ("off")); - cfgOptionSet(cfgOptLogLevelStderr, cfgSourceParam, varNewStrZ("off")); - cfgLoadLogSetting(); - - // Open the log file - cfgLoadLogFile( - strNewFmt("%s/%s-%s-async.log", strPtr(cfgOptionStr(cfgOptLogPath)), - strPtr(cfgOptionStr(cfgOptStanza)), cfgCommandName(cfgCommand()))); - - // Log command info since we are starting a new log - cmdBegin(true); - // Detach from parent process forkDetach(); - // Execute async process and catch exceptions - TRY_BEGIN() - { - perlExec(); - } - CATCH_ANY() - { - RETHROW(); - } - FINALLY() - { - // Release the lock (mostly here for testing since it would be freed in exitSafe() anyway) - lockRelease(true); - } - TRY_END(); - } - // Else mark async process as forked - else - { - lockClear(true); - forked = true; + // Execute the binary. This statement will not return if it is successful. + THROW_ON_SYS_ERROR_FMT( + execvp(strPtr(cfgExe()), (char ** const)strLstPtr(commandExec)) == -1, + ExecuteError, "unable to execute '%s'", cfgCommandName(cfgCmdArchiveGetAsync)); } } // Now that the async process has been launched, confess any errors that are found confessOnError = true; } - while (!server && !pushed && waitMore(wait)); + while (!pushed && waitMore(wait)); - // The aysnc server does not give notifications - if (!server) + // If the WAL segment was not pushed then error + if (!pushed) { - // If the WAL segment was not pushed then error - if (!pushed) - { - THROW_FMT( - ArchiveTimeoutError, "unable to push WAL segment '%s' asynchronously after %lg second(s)", - strPtr(walSegment), cfgOptionDbl(cfgOptArchiveTimeout)); - } - - // Log success - LOG_INFO("pushed WAL segment %s asynchronously", strPtr(walSegment)); + THROW_FMT( + ArchiveTimeoutError, "unable to push WAL segment '%s' asynchronously after %lg second(s)", + strPtr(walSegment), cfgOptionDbl(cfgOptArchiveTimeout)); } + + // Log success + LOG_INFO("pushed WAL segment %s asynchronously", strPtr(walSegment)); } else - THROW(AssertError, "archive-push in C does not support synchronous mode"); + perlExec(); } MEM_CONTEXT_TEMP_END(); diff --git a/src/config/config.auto.c b/src/config/config.auto.c index 57989eb49..0446b6204 100644 --- a/src/config/config.auto.c +++ b/src/config/config.auto.c @@ -45,6 +45,18 @@ static ConfigCommandData configCommandData[CFG_COMMAND_TOTAL] = CONFIG_COMMAND_L CONFIG_COMMAND_PARAMETER_ALLOWED(true) ) + CONFIG_COMMAND + ( + CONFIG_COMMAND_NAME("archive-push-async") + + CONFIG_COMMAND_LOG_FILE(true) + CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo) + CONFIG_COMMAND_LOG_LEVEL_STDERR_MAX(logLevelTrace) + CONFIG_COMMAND_LOCK_REQUIRED(true) + CONFIG_COMMAND_LOCK_TYPE(lockTypeArchive) + CONFIG_COMMAND_PARAMETER_ALLOWED(true) + ) + CONFIG_COMMAND ( CONFIG_COMMAND_NAME("backup") diff --git a/src/config/config.auto.h b/src/config/config.auto.h index 1e07740a9..9f4303730 100644 --- a/src/config/config.auto.h +++ b/src/config/config.auto.h @@ -9,7 +9,7 @@ Automatically generated by Build.pm -- do not modify directly. /*********************************************************************************************************************************** Command constants ***********************************************************************************************************************************/ -#define CFG_COMMAND_TOTAL 18 +#define CFG_COMMAND_TOTAL 19 /*********************************************************************************************************************************** Option constants @@ -24,6 +24,7 @@ typedef enum cfgCmdArchiveGet, cfgCmdArchiveGetAsync, cfgCmdArchivePush, + cfgCmdArchivePushAsync, cfgCmdBackup, cfgCmdCheck, cfgCmdExpire, diff --git a/src/config/define.auto.c b/src/config/define.auto.c index cb27f62cb..8553960ae 100644 --- a/src/config/define.auto.c +++ b/src/config/define.auto.c @@ -36,6 +36,11 @@ static ConfigDefineCommandData configDefineCommandData[] = CFGDEFDATA_COMMAND_LI ) ) + CFGDEFDATA_COMMAND + ( + CFGDEFDATA_COMMAND_NAME("archive-push-async") + ) + CFGDEFDATA_COMMAND ( CFGDEFDATA_COMMAND_NAME("backup") @@ -420,6 +425,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND_LIST ( CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) ) CFGDEFDATA_OPTION_OPTIONAL_LIST @@ -530,6 +536,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -616,6 +623,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -678,6 +686,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) ) @@ -712,6 +721,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) @@ -757,6 +767,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) @@ -799,6 +810,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -844,6 +856,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -892,6 +905,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -969,6 +983,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) @@ -1282,6 +1297,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) @@ -1333,6 +1349,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -1394,6 +1411,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -1474,6 +1492,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -1530,6 +1549,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -1574,6 +1594,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -1619,6 +1640,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -1701,6 +1723,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -1843,6 +1866,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -1881,6 +1905,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -1919,6 +1944,13 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_OPTIONAL_INTERNAL(true) ) + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdArchivePushAsync) + + CFGDEFDATA_OPTION_OPTIONAL_INTERNAL(true) + ) + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE ( CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdRestore) @@ -2205,6 +2237,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) @@ -2241,6 +2274,13 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_OPTIONAL_REQUIRED(false) ) + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdArchivePushAsync) + + CFGDEFDATA_OPTION_OPTIONAL_REQUIRED(false) + ) + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE ( CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdLocal) @@ -2402,6 +2442,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) ) @@ -2439,6 +2480,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) @@ -2527,6 +2569,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -2582,6 +2625,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -2669,6 +2713,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -2749,6 +2794,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) @@ -2790,6 +2836,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) @@ -2832,6 +2879,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) @@ -2873,6 +2921,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) @@ -2913,6 +2962,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) @@ -2957,6 +3007,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) @@ -3003,6 +3054,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -3209,6 +3261,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -3259,6 +3312,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -3309,6 +3363,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -3359,6 +3414,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -3409,6 +3465,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -3459,6 +3516,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -3523,6 +3581,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -3587,6 +3646,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -3637,6 +3697,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -3688,6 +3749,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -3743,6 +3805,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) @@ -3877,6 +3940,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) ) @@ -3939,6 +4003,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGetAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePushAsync) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) diff --git a/src/config/define.auto.h b/src/config/define.auto.h index db0806d78..69b28a889 100644 --- a/src/config/define.auto.h +++ b/src/config/define.auto.h @@ -14,6 +14,7 @@ typedef enum cfgDefCmdArchiveGet, cfgDefCmdArchiveGetAsync, cfgDefCmdArchivePush, + cfgDefCmdArchivePushAsync, cfgDefCmdBackup, cfgDefCmdCheck, cfgDefCmdExpire, diff --git a/src/config/define.c b/src/config/define.c index 2d01dff6d..5ad20dbd5 100644 --- a/src/config/define.c +++ b/src/config/define.c @@ -53,7 +53,7 @@ typedef struct ConfigDefineOptionData unsigned int section:2; // Config section (e.g. global, stanza, cmd-line) bool required:1; // Is the option required? bool secure:1; // Does the option need to be redacted on logs and cmd-line? - unsigned int commandValid:17; // Bitmap for commands that the option is valid for + unsigned int commandValid:18; // Bitmap for commands that the option is valid for const char *helpSection; // Classify the option const char *helpSummary; // Brief summary of the option diff --git a/src/main.c b/src/main.c index fc15a3b1e..52d1b052c 100644 --- a/src/main.c +++ b/src/main.c @@ -94,9 +94,9 @@ main(int argListSize, const char *argList[]) cmdArchiveGetAsync(); } - // Archive push command. Currently only implements local operations of async archive push. + // Archive push command. // ------------------------------------------------------------------------------------------------------------------------- - else if (cfgCommand() == cfgCmdArchivePush && cfgOptionBool(cfgOptArchiveAsync)) + else if (cfgCommand() == cfgCmdArchivePush) { cmdArchivePush(); } diff --git a/src/perl/embed.auto.c b/src/perl/embed.auto.c index 6e273daba..ba60263db 100644 --- a/src/perl/embed.auto.c +++ b/src/perl/embed.auto.c @@ -1534,11 +1534,13 @@ static const EmbeddedModule embeddedModule[] = "(\n" "$strOperation,\n" "$strWalPathFile,\n" + "$bAsync,\n" ") =\n" "logDebugParam\n" "(\n" "__PACKAGE__ . '->process', \\@_,\n" "{name => 'strWalPathFile', required => false},\n" + "{name => 'bAsync', required => true},\n" ");\n" "\n\n" "if (!isDbLocal())\n" @@ -1554,7 +1556,7 @@ static const EmbeddedModule embeddedModule[] = "my $strWalPath = dirname(walPath($strWalPathFile, cfgOption(CFGOPT_PG_PATH, false), cfgCommandName(cfgCommandGet())));\n" "my $strWalFile = basename($strWalPathFile);\n" "\n\n" - "if (cfgOption(CFGOPT_ARCHIVE_ASYNC))\n" + "if ($bAsync)\n" "{\n" "\n" "require pgBackRest::Archive::Push::Async;\n" @@ -10215,6 +10217,7 @@ static const EmbeddedModule embeddedModule[] = "'CFGCMD_ARCHIVE_GET',\n" "'CFGCMD_ARCHIVE_GET_ASYNC',\n" "'CFGCMD_ARCHIVE_PUSH',\n" + "'CFGCMD_ARCHIVE_PUSH_ASYNC',\n" "'CFGCMD_BACKUP',\n" "'CFGCMD_CHECK',\n" "'CFGCMD_EXPIRE',\n" @@ -10528,7 +10531,16 @@ static const EmbeddedModule embeddedModule[] = "require pgBackRest::Archive::Push::Push;\n" "pgBackRest::Archive::Push::Push->import();\n" "\n" - "new pgBackRest::Archive::Push::Push()->process($stryCommandArg[0]);\n" + "new pgBackRest::Archive::Push::Push()->process($stryCommandArg[0], false);\n" + "}\n" + "\n\n\n" + "elsif (cfgCommandTest(CFGCMD_ARCHIVE_PUSH_ASYNC))\n" + "{\n" + "\n" + "require pgBackRest::Archive::Push::Push;\n" + "pgBackRest::Archive::Push::Push->import();\n" + "\n" + "new pgBackRest::Archive::Push::Push()->process($stryCommandArg[0], true);\n" "}\n" "\n\n\n" "elsif (cfgCommandTest(CFGCMD_REMOTE))\n" diff --git a/test/lib/pgBackRestTest/Module/Command/CommandArchivePushPerlTest.pm b/test/lib/pgBackRestTest/Module/Command/CommandArchivePushPerlTest.pm index f2a3cc796..36b482c00 100644 --- a/test/lib/pgBackRestTest/Module/Command/CommandArchivePushPerlTest.pm +++ b/test/lib/pgBackRestTest/Module/Command/CommandArchivePushPerlTest.pm @@ -548,20 +548,21 @@ sub run $self->optionTestSet(CFGOPT_PG_HOST, BOGUS); $self->configTestLoad(CFGCMD_ARCHIVE_PUSH); - $self->testException(sub {$oPush->process(undef)}, ERROR_HOST_INVALID, 'archive-push operation must run on db host'); + $self->testException(sub {$oPush->process(undef, false)}, ERROR_HOST_INVALID, 'archive-push operation must run on db host'); #--------------------------------------------------------------------------------------------------------------------------- # Reset pg-host $self->optionTestClear(CFGOPT_PG_HOST); $self->configTestLoad(CFGCMD_ARCHIVE_PUSH); - $self->testException(sub {$oPush->process(undef)}, ERROR_PARAM_REQUIRED, 'WAL file to push required'); + $self->testException(sub {$oPush->process(undef, false)}, ERROR_PARAM_REQUIRED, 'WAL file to push required'); #--------------------------------------------------------------------------------------------------------------------------- my $strSegment = $self->walSegment($iWalTimeline, $iWalMajor, $iWalMinor++); $self->walGenerate($self->{strWalPath}, PG_VERSION_94, 1, $strSegment); - $self->testResult(sub {$oPush->process("pg_xlog/${strSegment}")}, undef, "${strSegment} WAL pushed (with relative path)"); + $self->testResult( + sub {$oPush->process("pg_xlog/${strSegment}", false)}, undef, "${strSegment} WAL pushed (with relative path)"); $self->testResult( sub {walSegmentFind(storageRepo(), $self->{strArchiveId}, $strSegment)}, "${strSegment}-$self->{strWalHash}", @@ -577,7 +578,7 @@ sub run $strSegment = $self->walSegment($iWalTimeline, $iWalMajor, $iWalMinor++); $self->walGenerate($self->{strWalPath}, PG_VERSION_94, 1, $strSegment); - $self->testResult(sub {$oPush->process("$self->{strWalPath}/${strSegment}")}, undef, "${strSegment} WAL dropped"); + $self->testResult(sub {$oPush->process("$self->{strWalPath}/${strSegment}", false)}, undef, "${strSegment} WAL dropped"); $self->testResult( sub {walSegmentFind(storageRepo(), $self->{strArchiveId}, $strSegment)}, '[undef]', "${strSegment} WAL in archive"); @@ -586,7 +587,7 @@ sub run $self->optionTestSet(CFGOPT_ARCHIVE_PUSH_QUEUE_MAX, PG_WAL_SIZE_TEST * 4); $self->configTestLoad(CFGCMD_ARCHIVE_PUSH); - $self->testResult(sub {$oPush->process("$self->{strWalPath}/${strSegment}")}, undef, "${strSegment} WAL pushed"); + $self->testResult(sub {$oPush->process("$self->{strWalPath}/${strSegment}", false)}, undef, "${strSegment} WAL pushed"); $self->testResult( sub {walSegmentFind(storageRepo(), $self->{strArchiveId}, $strSegment)}, "${strSegment}-$self->{strWalHash}", "${strSegment} WAL in archive"); @@ -605,7 +606,8 @@ sub run $strSegment = $self->walSegment($iWalTimeline, $iWalMajor, $iWalMinor++); $self->walGenerate($self->{strWalPath}, PG_VERSION_94, 1, $strSegment); - $self->testResult(sub {$oPush->process("$self->{strWalPath}/${strSegment}")}, undef, "${strSegment} WAL pushed async"); + $self->testResult( + sub {$oPush->process("$self->{strWalPath}/${strSegment}", true)}, undef, "${strSegment} WAL pushed async"); $self->testResult( sub {walSegmentFind(storageRepo(), $self->{strArchiveId}, $strSegment, 5)}, "${strSegment}-$self->{strWalHash}", @@ -622,7 +624,7 @@ sub run $self->optionTestSet(CFGOPT_ARCHIVE_TIMEOUT, 5); $self->configTestLoad(CFGCMD_ARCHIVE_PUSH); - $self->testResult(sub {$oPush->process("$self->{strWalPath}/${strSegment}")}, undef, 'process connect error'); + $self->testResult(sub {$oPush->process("$self->{strWalPath}/${strSegment}", true)}, undef, 'process connect error'); # Check contents of error file my $strErrorFile = STORAGE_SPOOL_ARCHIVE_OUT . "/${strSegment}.error"; diff --git a/test/src/module/command/archivePushTest.c b/test/src/module/command/archivePushTest.c index df90d64ea..51f84028a 100644 --- a/test/src/module/command/archivePushTest.c +++ b/test/src/module/command/archivePushTest.c @@ -21,7 +21,7 @@ testRun(void) if (testBegin("cmdArchivePush()")) { StringList *argList = strLstNew(); - strLstAddZ(argList, "pgbackrest"); + strLstAddZ(argList, "pgbackrest-bogus"); strLstAddZ(argList, "--archive-timeout=1"); strLstAddZ(argList, "--stanza=db"); strLstAddZ(argList, "archive-push"); @@ -33,7 +33,7 @@ testRun(void) strLstAddZ(argList, "000000010000000100000001"); harnessCfgLoad(strLstSize(argList), strLstPtr(argList)); - TEST_ERROR(cmdArchivePush(), AssertError, "archive-push in C does not support synchronous mode"); + TEST_ERROR(cmdArchivePush(), OptionRequiredError , "===PERL-EMBED-ERROR==="); // Make sure the process times out when there is nothing to archive // -------------------------------------------------------------------------------------------------------------------------