You've already forked pgbackrest
							
							
				mirror of
				https://github.com/pgbackrest/pgbackrest.git
				synced 2025-10-30 23:37:45 +02:00 
			
		
		
		
	Up to seven standbys can be configured for backup from standby.`
Contributed by Cynthia Shang.
This commit is contained in:
		
				
					committed by
					
						 David Steele
						David Steele
					
				
			
			
				
	
			
			
			
						parent
						
							206415d4c7
						
					
				
				
					commit
					36e576b483
				
			| @@ -626,7 +626,9 @@ | ||||
|  | ||||
|             <!-- CONFIG - STANZA --> | ||||
|             <config-section id="stanza" name="Stanza"> | ||||
|                 <text>A stanza defines the backup configuration for a specific <postgres/> database cluster.  The stanza section must define the database cluster path and host/user if the database cluster is remote.  Also, any global configuration sections can be overridden to define stanza-specific settings.</text> | ||||
|                 <text>A stanza defines the backup configuration for a specific <postgres/> database cluster.  The stanza section must define the database cluster path and host/user if the database cluster is remote.  Also, any global configuration sections can be overridden to define stanza-specific settings. | ||||
|  | ||||
|                 <b>Indexing</b>: All <setting>db-</setting> options can be indexed for configuring standby replicas. For example if a single standby replica is configured then index the <setting>db-</setting> options as <setting>db2-</setting> (e.g. db2-host, db2-path, etc). If an index is not specified (e.g. db-host) it will be aliased to <setting>db1-</setting> (e.g. db1-host).</text> | ||||
|  | ||||
|                 <config-key-list> | ||||
|                     <!-- CONFIG - STANZA SECTION - DB-CMD KEY --> | ||||
|   | ||||
| @@ -30,6 +30,16 @@ | ||||
|                         <p>Fixed an issue with keep-alives not being sent to the remote from the local process.</p> | ||||
|                     </release-item> | ||||
|                 </release-bug-list> | ||||
|  | ||||
|                 <release-feature-list> | ||||
|                     <release-item> | ||||
|                         <release-item-contributor-list> | ||||
|                             <release-item-contributor id="shang.cynthia"/> | ||||
|                         </release-item-contributor-list> | ||||
|  | ||||
|                         <p>Up to seven standbys can be configured for backup from standby.</p> | ||||
|                     </release-item> | ||||
|                 </release-feature-list> | ||||
|             </release-core-list> | ||||
|  | ||||
|             <release-doc-list> | ||||
|   | ||||
| @@ -2209,7 +2209,7 @@ | ||||
|     <section id="standby-backup" depend="/replication/streaming"> | ||||
|         <title>Backup from a Standby</title> | ||||
|  | ||||
|         <p><backrest/> can perform backups on a standby instead of the master.  Standby backups require the <host>db-standby</host> host to be configured and the <br-option>backup-standby</br-option> option enabled.</p> | ||||
|         <p><backrest/> can perform backups on a standby instead of the master.  Standby backups require the <host>db-standby</host> host to be configured and the <br-option>backup-standby</br-option> option enabled.  If more than one standby is configured then the first running standby found will be used for the backup.</p> | ||||
|  | ||||
|         <backrest-config host="{[host-backup]}" owner="backrest:postgres" file="{[backrest-config-demo]}"> | ||||
|             <title>Configure <br-option>db2-host</br-option>/<br-option>db2-user</br-option> and <br-option>db2-path</br-option></title> | ||||
|   | ||||
| @@ -452,8 +452,8 @@ sub process | ||||
|         $self->{iCopyRemoteIdx} = $self->{iMasterRemoteIdx}; | ||||
|     } | ||||
|  | ||||
|     # If backup from standby option is set but we could not get the standby object then, turn off CFGOPT_BACKUP_STANDBY & warn that | ||||
|     # backups will be performed from the master. | ||||
|     # If backup from standby option is set but a standby was not configured in the config file or on the command line, then turn off | ||||
|     # CFGOPT_BACKUP_STANDBY & warn that backups will be performed from the master. | ||||
|     if (!defined($oDbStandby) && cfgOption(CFGOPT_BACKUP_STANDBY)) | ||||
|     { | ||||
|         cfgOptionSet(CFGOPT_BACKUP_STANDBY, false); | ||||
|   | ||||
| @@ -55,8 +55,9 @@ sub process | ||||
|     # Assign function parameters, defaults, and log debug info | ||||
|     my $strOperation = logDebugParam(__PACKAGE__ . '->process'); | ||||
|  | ||||
|     # Initialize the database object | ||||
|     my $oDb = dbMasterGet(); | ||||
|     # Initialize the database object. This will also check the configured replicas and throw an error if at least one is not | ||||
|     # able to be connected to and warnings for any that cannot be properly connected to. | ||||
|     my ($oDb) = dbObjectGet(); | ||||
|  | ||||
|     # Validate the database configuration | ||||
|     $oDb->configValidate(); | ||||
|   | ||||
| @@ -81,6 +81,9 @@ my $bLogFileFirst; | ||||
| # Allow log to be globally enabled or disabled with logEnable() and logDisable() | ||||
| my $bLogDisable = 0; | ||||
|  | ||||
| # Allow errors to be logged as warnings | ||||
| my $bLogWarnOnError = 0; | ||||
|  | ||||
| # Test globals | ||||
| my $bTest = false; | ||||
| my $fTestDelay; | ||||
| @@ -231,6 +234,26 @@ sub logEnable | ||||
|  | ||||
| push @EXPORT, qw(logEnable); | ||||
|  | ||||
| #################################################################################################################################### | ||||
| # logWarnOnErrorDisable | ||||
| #################################################################################################################################### | ||||
| sub logWarnOnErrorDisable | ||||
| { | ||||
|     $bLogWarnOnError--; | ||||
| } | ||||
|  | ||||
| push @EXPORT, qw(logWarnOnErrorDisable); | ||||
|  | ||||
| #################################################################################################################################### | ||||
| # logWarnOnErrorEnable - when an error is thrown, log it as a warning instead | ||||
| #################################################################################################################################### | ||||
| sub logWarnOnErrorEnable | ||||
| { | ||||
|     $bLogWarnOnError++; | ||||
| } | ||||
|  | ||||
| push @EXPORT, qw(logWarnOnErrorEnable); | ||||
|  | ||||
| #################################################################################################################################### | ||||
| # logDebugParam | ||||
| # | ||||
| @@ -598,7 +621,7 @@ sub log | ||||
|  | ||||
|     # Set operational variables | ||||
|     my $strMessageFormat = $strMessage; | ||||
|     my $iLogLevelRank = $oLogLevelRank{"${strLevel}"}{rank}; | ||||
|     my $iLogLevelRank = $oLogLevelRank{$strLevel}{rank}; | ||||
|  | ||||
|     # If test message | ||||
|     if ($strLevel eq TEST) | ||||
| @@ -664,27 +687,32 @@ sub log | ||||
|     # Format the message text | ||||
|     my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); | ||||
|  | ||||
|     # If logging warnings as errors then change the display level and rank. These will be used to determine if the message will be | ||||
|     # displayed or not. | ||||
|     my $strDisplayLevel = (!$bLogWarnOnError ? $strLevel : WARN); | ||||
|     my $iLogDisplayLevelRank = (!$bLogWarnOnError ? $iLogLevelRank : $oLogLevelRank{$strDisplayLevel}{rank}); | ||||
|  | ||||
|     $strMessageFormat = | ||||
|         ($bLogTimestamp ? timestampFormat() . sprintf('.%03d ', (gettimeofday() - int(gettimeofday())) * 1000) : '') . | ||||
|         sprintf('P%02d', defined($iProcessId) ? $iProcessId : 0) . | ||||
|         (' ' x (7 - length($strLevel))) . "${strLevel}: ${strMessageFormat}\n"; | ||||
|         (' ' x (7 - length($strDisplayLevel))) . "${strDisplayLevel}: ${strMessageFormat}\n"; | ||||
|  | ||||
|     # Skip output if disabled | ||||
|     if (!$bLogDisable) | ||||
|     { | ||||
|         # Output to stderr depending on log level | ||||
|         if (!$rExtra->{bLogConsole} && $iLogLevelRank <= $oLogLevelRank{$strLogLevelStdErr}{rank}) | ||||
|         # Output to stderr if configured log level setting rank is greater than the display level rank. | ||||
|         if (!$rExtra->{bLogConsole} && $iLogDisplayLevelRank <= $oLogLevelRank{$strLogLevelStdErr}{rank}) | ||||
|         { | ||||
|             if ($strLogLevelStdErr ne PROTOCOL) | ||||
|             { | ||||
|                 syswrite(*STDERR, $strLevel . (defined($iCode) ? sprintf(' [%03d]: ', $iCode) : '') . ': '); | ||||
|                 syswrite(*STDERR, $strDisplayLevel . (defined($iCode) ? sprintf(' [%03d]: ', $iCode) : '') . ': '); | ||||
|             } | ||||
|  | ||||
|             syswrite(*STDERR, "${strMessage}\n"); | ||||
|             $rExtra->{bLogConsole} = true; | ||||
|         } | ||||
|         # Else output to stdout depending on log level and test flag | ||||
|         elsif (!$rExtra->{bLogConsole} && $iLogLevelRank <= $oLogLevelRank{$strLogLevelConsole}{rank} || | ||||
|         # Else output to stdout if configured log level setting rank is greater than the display level rank or test flag is set. | ||||
|         elsif (!$rExtra->{bLogConsole} && $iLogDisplayLevelRank <= $oLogLevelRank{$strLogLevelConsole}{rank} || | ||||
|                $bTest && $strLevel eq TEST) | ||||
|         { | ||||
|             if (!$bSuppressLog) | ||||
| @@ -709,8 +737,8 @@ sub log | ||||
|             $rExtra->{bLogConsole} = true; | ||||
|         } | ||||
|  | ||||
|         # Output to file depending on log level and test flag | ||||
|         if (!$rExtra->{bLogLogFile} && $iLogLevelRank <= $oLogLevelRank{$strLogLevelFile}{rank}) | ||||
|         # Output to file if configured log level setting rank is greater than the display level rank or test flag is set. | ||||
|         if (!$rExtra->{bLogLogFile} && $iLogDisplayLevelRank <= $oLogLevelRank{$strLogLevelFile}{rank}) | ||||
|         { | ||||
|             if (defined($hLogFile) || (defined($strLogLevelFile) && $strLogLevelFile ne OFF)) | ||||
|             { | ||||
| @@ -726,8 +754,8 @@ sub log | ||||
|                         $strLogFileCache .= $strMessageFormat; | ||||
|                     } | ||||
|  | ||||
|                     if ($strLevel eq ASSERT || | ||||
|                         ($strLevel eq ERROR && ($strLogLevelFile eq DEBUG || $strLogLevelFile eq TRACE))) | ||||
|                     if ($strDisplayLevel eq ASSERT || | ||||
|                         ($strDisplayLevel eq ERROR && ($strLogLevelFile eq DEBUG || $strLogLevelFile eq TRACE))) | ||||
|                     { | ||||
|                         my $strStackTrace = longmess() . "\n"; | ||||
|                         $strStackTrace =~ s/\n/\n                                   /g; | ||||
|   | ||||
| @@ -6,7 +6,7 @@ | ||||
| # section meaning the rules defined there apply to all commands listed for the option. | ||||
| # | ||||
| # CFGBLDDEF_RULE_COMMAND: | ||||
| #     List of commands the option can be used with this option.  An empty hash signifies that the command does no deviate from the | ||||
| #     List of commands the option can be used with this option.  An empty hash signifies that the command does not deviate from the | ||||
| #     option defaults.  Otherwise, overrides can be specified. | ||||
| # | ||||
| # NOTE: If the option (A) has a dependency on another option (B) then the CFGCMD_ must also be specified in the other option | ||||
| @@ -284,7 +284,7 @@ use constant CFGOPT_RECOVERY_OPTION                                 => 'recovery | ||||
| # Stanza options | ||||
| #----------------------------------------------------------------------------------------------------------------------------------- | ||||
| # Determines how many databases can be configured | ||||
| use constant CFGDEF_INDEX_DB                                        => 2; | ||||
| use constant CFGDEF_INDEX_DB                                        => 8; | ||||
|  | ||||
| # Prefix that must be used by all db options that allow multiple configurations | ||||
| use constant CFGDEF_PREFIX_DB                                       => 'db'; | ||||
|   | ||||
| @@ -962,7 +962,15 @@ sub replayWait | ||||
| sub dbObjectGet | ||||
| { | ||||
|     # Assign function parameters, defaults, and log debug info | ||||
|     my ($strOperation) = logDebugParam(__PACKAGE__ . '::dbObjectGet'); | ||||
|     my ( | ||||
|             $strOperation, | ||||
|             $bMasterOnly, | ||||
|         ) = | ||||
|             logDebugParam | ||||
|             ( | ||||
|                 __PACKAGE__ . '::dbObjectGet', \@_, | ||||
|                 {name => 'bMasterOnly', optional => true, default => false}, | ||||
|             ); | ||||
|  | ||||
|     my $iStandbyIdx = undef; | ||||
|     my $iMasterRemoteIdx = 1; | ||||
| @@ -971,7 +979,7 @@ sub dbObjectGet | ||||
|  | ||||
|     # Only iterate databases if online and more than one is defined.  It might be better to check the version of each database but | ||||
|     # this is simple and works. | ||||
|     if (cfgOptionTest(CFGOPT_ONLINE) && cfgOption(CFGOPT_ONLINE) && cfgOptionTest(cfgOptionIndex(CFGOPT_DB_PATH, 2))) | ||||
|     if (!$bMasterOnly && cfgOptionTest(CFGOPT_ONLINE) && cfgOption(CFGOPT_ONLINE) && multipleDb()) | ||||
|     { | ||||
|         for (my $iRemoteIdx = 1; $iRemoteIdx <= cfgOptionIndexTotal(CFGOPT_DB_HOST); $iRemoteIdx++) | ||||
|         { | ||||
| @@ -980,37 +988,50 @@ sub dbObjectGet | ||||
|                 cfgOptionTest(cfgOptionIndex(CFGOPT_DB_HOST, $iRemoteIdx))) | ||||
|             { | ||||
|                 # Create the db object | ||||
|                 my $oDb = new pgBackRest::Db($iRemoteIdx); | ||||
|                 my $oDb; | ||||
|  | ||||
|                 logWarnOnErrorEnable(); | ||||
|                 eval | ||||
|                 { | ||||
|                     $oDb = new pgBackRest::Db($iRemoteIdx); | ||||
|                     return true; | ||||
|                 } | ||||
|                 or do {}; | ||||
|  | ||||
|                 logWarnOnErrorDisable(); | ||||
|                 my $bAssigned = false; | ||||
|  | ||||
|                 # If able to connect then test if the database is a master or a standby.  It's OK if some databases cannot be | ||||
|                 # reached as long as the databases required for the backup type are present. | ||||
|                 if ($oDb->connect(true)) | ||||
|                 if (defined($oDb)) | ||||
|                 { | ||||
|                     # If this db is a standby | ||||
|                     if ($oDb->isStandby()) | ||||
|                     # If able to connect then test if the database is a master or a standby.  It's OK if some databases cannot be | ||||
|                     # reached as long as the databases required for the backup type are present. | ||||
|                     if ($oDb->connect(true)) | ||||
|                     { | ||||
|                         # If standby backup is requested then use the first standby found | ||||
|                         if (cfgOption(CFGOPT_BACKUP_STANDBY) && !defined($oDbStandby)) | ||||
|                         # If this db is a standby | ||||
|                         if ($oDb->isStandby()) | ||||
|                         { | ||||
|                             $oDbStandby = $oDb; | ||||
|                             $iStandbyIdx = $iRemoteIdx; | ||||
|                             # If standby backup is requested then use the first standby found | ||||
|                             if (cfgOption(CFGOPT_BACKUP_STANDBY) && !defined($oDbStandby)) | ||||
|                             { | ||||
|                                 $oDbStandby = $oDb; | ||||
|                                 $iStandbyIdx = $iRemoteIdx; | ||||
|                                 $bAssigned = true; | ||||
|                             } | ||||
|                         } | ||||
|                         # Else this db is a master | ||||
|                         else | ||||
|                         { | ||||
|                             # Error if more than one master is found | ||||
|                             if (defined($oDbMaster)) | ||||
|                             { | ||||
|                                 confess &log(ERROR, 'more than one master database found'); | ||||
|                             } | ||||
|  | ||||
|                             $oDbMaster = $oDb; | ||||
|                             $iMasterRemoteIdx = $iRemoteIdx; | ||||
|                             $bAssigned = true; | ||||
|                         } | ||||
|                     } | ||||
|                     # Else this db is a master | ||||
|                     else | ||||
|                     { | ||||
|                         # Error if more than one master is found | ||||
|                         if (defined($oDbMaster)) | ||||
|                         { | ||||
|                             confess &log(ERROR, 'more than one master database found'); | ||||
|                         } | ||||
|  | ||||
|                         $oDbMaster = $oDb; | ||||
|                         $iMasterRemoteIdx = $iRemoteIdx; | ||||
|                         $bAssigned = true; | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 # If the db was not used then destroy the protocol object underneath it | ||||
| @@ -1021,16 +1042,18 @@ sub dbObjectGet | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         # Make sure the standby database is defined when backup from standby requested | ||||
|         # Make sure a standby database is defined when backup from standby option is set | ||||
|         if (cfgOption(CFGOPT_BACKUP_STANDBY) && !defined($oDbStandby)) | ||||
|         { | ||||
|             confess &log(ERROR, 'unable to find standby database - cannot proceed'); | ||||
|             # Throw an error that is distinct from connecting to the master for testing purposes | ||||
|             confess &log(ERROR, 'unable to find standby database - cannot proceed', ERROR_HOST_CONNECT); | ||||
|         } | ||||
|  | ||||
|         # A master database is always required | ||||
|         if (!defined($oDbMaster)) | ||||
|         { | ||||
|             confess &log(ERROR, 'unable to find master database - cannot proceed'); | ||||
|             # Throw an error that is distinct from connecting to a standy for testing purposes | ||||
|             confess &log(ERROR, 'unable to find master database - cannot proceed', ERROR_DB_CONNECT); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -1064,7 +1087,7 @@ sub dbMasterGet | ||||
|     # Assign function parameters, defaults, and log debug info | ||||
|     my ($strOperation) = logDebugParam(__PACKAGE__ . '::dbMasterGet'); | ||||
|  | ||||
|     my ($oDbMaster) = dbObjectGet(); | ||||
|     my ($oDbMaster) = dbObjectGet({bMasterOnly => true}); | ||||
|  | ||||
|     # Return from function and log return values if any | ||||
|     return logDebugReturn | ||||
| @@ -1076,4 +1099,23 @@ sub dbMasterGet | ||||
|  | ||||
| push @EXPORT, qw(dbMasterGet); | ||||
|  | ||||
| #################################################################################################################################### | ||||
| # multipleDb | ||||
| # | ||||
| # Helper function to determine if there is more than one database defined. | ||||
| #################################################################################################################################### | ||||
| sub multipleDb | ||||
| { | ||||
|     for (my $iDbPathIdx = 2; $iDbPathIdx <= cfgOptionIndexTotal(CFGOPT_DB_PATH); $iDbPathIdx++) | ||||
|     { | ||||
|         # If an index exists above 1 then return true | ||||
|         if (cfgOptionTest(cfgOptionIndex(CFGOPT_DB_PATH, $iDbPathIdx))) | ||||
|         { | ||||
|             return true; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     return false; | ||||
| } | ||||
|  | ||||
| 1; | ||||
|   | ||||
| @@ -46,7 +46,7 @@ sub new | ||||
|     my $strOperation = logDebugParam(__PACKAGE__ . '->new'); | ||||
|  | ||||
|     # Initialize the database object | ||||
|     $self->{oDb} = dbMasterGet(); | ||||
|     ($self->{oDb}) = dbObjectGet(); | ||||
|     $self->dbInfoGet(); | ||||
|  | ||||
|     # Return from function and log return values if any | ||||
|   | ||||
| @@ -59,7 +59,7 @@ ok (!cfgRuleOptionDependValueValid(CFGCMD_RESTORE, CFGOPT_TARGET, 'bogus')); | ||||
|  | ||||
| ok (cfgRuleOptionHint(CFGCMD_BACKUP, CFGOPT_DB1_PATH) eq 'does this stanza exist?'); | ||||
|  | ||||
| ok (cfgOptionIndexTotal(CFGOPT_DB_PATH) == 2); | ||||
| ok (cfgOptionIndexTotal(CFGOPT_DB_PATH) == 8); | ||||
| ok (cfgOptionIndexTotal(CFGOPT_REPO_PATH) == 1); | ||||
|  | ||||
| ok (cfgRuleOptionNameAlt(CFGOPT_DB1_HOST) eq 'db-host'); | ||||
|   | ||||
| @@ -10,19 +10,67 @@ This function is valid when `cfgRuleOptionValid()` = `true`. Permutations that r | ||||
|  | ||||
| | Function | uiOptionId | Result | | ||||
| | -------- | ---------- | ------ | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB1_CMD` | `2` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB1_CONFIG` | `2` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB1_HOST` | `2` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB1_PATH` | `2` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB1_PORT` | `2` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB1_SOCKET_PATH` | `2` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB1_SSH_PORT` | `2` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB1_USER` | `2` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB2_CMD` | `2` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB2_CONFIG` | `2` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB2_HOST` | `2` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB2_PATH` | `2` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB2_PORT` | `2` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB2_SOCKET_PATH` | `2` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB2_SSH_PORT` | `2` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB2_USER` | `2` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB1_CMD` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB1_CONFIG` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB1_HOST` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB1_PATH` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB1_PORT` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB1_SOCKET_PATH` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB1_SSH_PORT` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB1_USER` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB2_CMD` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB2_CONFIG` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB2_HOST` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB2_PATH` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB2_PORT` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB2_SOCKET_PATH` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB2_SSH_PORT` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB2_USER` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB3_CMD` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB3_CONFIG` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB3_HOST` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB3_PATH` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB3_PORT` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB3_SOCKET_PATH` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB3_SSH_PORT` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB3_USER` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB4_CMD` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB4_CONFIG` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB4_HOST` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB4_PATH` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB4_PORT` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB4_SOCKET_PATH` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB4_SSH_PORT` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB4_USER` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB5_CMD` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB5_CONFIG` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB5_HOST` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB5_PATH` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB5_PORT` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB5_SOCKET_PATH` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB5_SSH_PORT` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB5_USER` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB6_CMD` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB6_CONFIG` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB6_HOST` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB6_PATH` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB6_PORT` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB6_SOCKET_PATH` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB6_SSH_PORT` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB6_USER` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB7_CMD` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB7_CONFIG` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB7_HOST` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB7_PATH` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB7_PORT` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB7_SOCKET_PATH` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB7_SSH_PORT` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB7_USER` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB8_CMD` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB8_CONFIG` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB8_HOST` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB8_PATH` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB8_PORT` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB8_SOCKET_PATH` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB8_SSH_PORT` | `8` | | ||||
| | cfgOptionIndexTotal | `CFGOPT_DB8_USER` | `8` | | ||||
|   | ||||
| @@ -203,6 +203,24 @@ This function is valid when `cfgRuleOptionValid()` = `true`. Permutations that r | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB2_CONFIG` | `"/etc/pgbackrest.conf"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB2_PORT` | `"5432"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB2_USER` | `"postgres"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB3_CONFIG` | `"/etc/pgbackrest.conf"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB3_PORT` | `"5432"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB3_USER` | `"postgres"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB4_CONFIG` | `"/etc/pgbackrest.conf"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB4_PORT` | `"5432"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB4_USER` | `"postgres"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB5_CONFIG` | `"/etc/pgbackrest.conf"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB5_PORT` | `"5432"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB5_USER` | `"postgres"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB6_CONFIG` | `"/etc/pgbackrest.conf"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB6_PORT` | `"5432"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB6_USER` | `"postgres"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB7_CONFIG` | `"/etc/pgbackrest.conf"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB7_PORT` | `"5432"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB7_USER` | `"postgres"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB8_CONFIG` | `"/etc/pgbackrest.conf"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB8_PORT` | `"5432"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DB8_USER` | `"postgres"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_DELTA` | `"0"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_FORCE` | `"0"` | | ||||
| | cfgRuleOptionDefault | _\<ANY\>_ | `CFGOPT_HARDLINK` | `"0"` | | ||||
| @@ -258,6 +276,30 @@ This function is valid when `cfgRuleOptionValid()` = `true`. Permutations that r | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB2_CONFIG` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB2_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB2_USER` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB3_CMD` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB3_CONFIG` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB3_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB3_USER` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB4_CMD` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB4_CONFIG` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB4_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB4_USER` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB5_CMD` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB5_CONFIG` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB5_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB5_USER` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB6_CMD` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB6_CONFIG` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB6_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB6_USER` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB7_CMD` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB7_CONFIG` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB7_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB7_USER` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB8_CMD` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB8_CONFIG` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB8_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_DB8_USER` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_RECOVERY_OPTION` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_REPO_S3_BUCKET` | `true` | | ||||
| | cfgRuleOptionDepend | _\<ANY\>_ | `CFGOPT_REPO_S3_CA_FILE` | `true` | | ||||
| @@ -300,6 +342,30 @@ This function is valid when `cfgRuleOptionDepend()` = `true`. | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB2_CONFIG` | `CFGOPT_DB2_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB2_SSH_PORT` | `CFGOPT_DB2_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB2_USER` | `CFGOPT_DB2_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB3_CMD` | `CFGOPT_DB3_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB3_CONFIG` | `CFGOPT_DB3_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB3_SSH_PORT` | `CFGOPT_DB3_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB3_USER` | `CFGOPT_DB3_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB4_CMD` | `CFGOPT_DB4_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB4_CONFIG` | `CFGOPT_DB4_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB4_SSH_PORT` | `CFGOPT_DB4_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB4_USER` | `CFGOPT_DB4_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB5_CMD` | `CFGOPT_DB5_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB5_CONFIG` | `CFGOPT_DB5_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB5_SSH_PORT` | `CFGOPT_DB5_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB5_USER` | `CFGOPT_DB5_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB6_CMD` | `CFGOPT_DB6_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB6_CONFIG` | `CFGOPT_DB6_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB6_SSH_PORT` | `CFGOPT_DB6_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB6_USER` | `CFGOPT_DB6_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB7_CMD` | `CFGOPT_DB7_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB7_CONFIG` | `CFGOPT_DB7_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB7_SSH_PORT` | `CFGOPT_DB7_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB7_USER` | `CFGOPT_DB7_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB8_CMD` | `CFGOPT_DB8_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB8_CONFIG` | `CFGOPT_DB8_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB8_SSH_PORT` | `CFGOPT_DB8_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_DB8_USER` | `CFGOPT_DB8_HOST` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_FORCE` | `CFGOPT_ONLINE` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_RECOVERY_OPTION` | `CFGOPT_TYPE` | | ||||
| | cfgRuleOptionDependOption | _\<ANY\>_ | `CFGOPT_REPO_S3_BUCKET` | `CFGOPT_REPO_TYPE` | | ||||
| @@ -385,6 +451,30 @@ This function is valid when `cfgRuleOptionDepend()` = `true`. | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB2_CONFIG` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB2_SSH_PORT` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB2_USER` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB3_CMD` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB3_CONFIG` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB3_SSH_PORT` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB3_USER` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB4_CMD` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB4_CONFIG` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB4_SSH_PORT` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB4_USER` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB5_CMD` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB5_CONFIG` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB5_SSH_PORT` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB5_USER` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB6_CMD` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB6_CONFIG` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB6_SSH_PORT` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB6_USER` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB7_CMD` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB7_CONFIG` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB7_SSH_PORT` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB7_USER` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB8_CMD` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB8_CONFIG` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB8_SSH_PORT` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_DB8_USER` | `0` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_FORCE` | `1` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_RECOVERY_OPTION` | `4` | | ||||
| | cfgRuleOptionDependValueTotal | _\<ANY\>_ | `CFGOPT_REPO_S3_BUCKET` | `1` | | ||||
| @@ -416,6 +506,12 @@ This function is valid when `cfgRuleOptionValid()` = `true`. Permutations that r | ||||
| | -------- | ----------- | ---------- | ------ | | ||||
| | cfgRuleOptionHint | _\<ANY\>_ | `CFGOPT_DB1_PATH` | `"does this stanza exist?"` | | ||||
| | cfgRuleOptionHint | _\<ANY\>_ | `CFGOPT_DB2_PATH` | `"does this stanza exist?"` | | ||||
| | cfgRuleOptionHint | _\<ANY\>_ | `CFGOPT_DB3_PATH` | `"does this stanza exist?"` | | ||||
| | cfgRuleOptionHint | _\<ANY\>_ | `CFGOPT_DB4_PATH` | `"does this stanza exist?"` | | ||||
| | cfgRuleOptionHint | _\<ANY\>_ | `CFGOPT_DB5_PATH` | `"does this stanza exist?"` | | ||||
| | cfgRuleOptionHint | _\<ANY\>_ | `CFGOPT_DB6_PATH` | `"does this stanza exist?"` | | ||||
| | cfgRuleOptionHint | _\<ANY\>_ | `CFGOPT_DB7_PATH` | `"does this stanza exist?"` | | ||||
| | cfgRuleOptionHint | _\<ANY\>_ | `CFGOPT_DB8_PATH` | `"does this stanza exist?"` | | ||||
|  | ||||
| ## cfgRuleOptionNameAlt | ||||
|  | ||||
| @@ -490,6 +586,54 @@ Permutations that return `NULL` are excluded for brevity. | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB2_SOCKET_PATH` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB2_SSH_PORT` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB2_USER` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB3_CMD` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB3_CONFIG` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB3_HOST` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB3_PATH` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB3_PORT` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB3_SOCKET_PATH` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB3_SSH_PORT` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB3_USER` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB4_CMD` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB4_CONFIG` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB4_HOST` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB4_PATH` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB4_PORT` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB4_SOCKET_PATH` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB4_SSH_PORT` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB4_USER` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB5_CMD` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB5_CONFIG` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB5_HOST` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB5_PATH` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB5_PORT` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB5_SOCKET_PATH` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB5_SSH_PORT` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB5_USER` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB6_CMD` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB6_CONFIG` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB6_HOST` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB6_PATH` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB6_PORT` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB6_SOCKET_PATH` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB6_SSH_PORT` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB6_USER` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB7_CMD` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB7_CONFIG` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB7_HOST` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB7_PATH` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB7_PORT` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB7_SOCKET_PATH` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB7_SSH_PORT` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB7_USER` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB8_CMD` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB8_CONFIG` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB8_HOST` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB8_PATH` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB8_PORT` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB8_SOCKET_PATH` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB8_SSH_PORT` | `"db"` | | ||||
| | cfgRuleOptionPrefix | `CFGOPT_DB8_USER` | `"db"` | | ||||
|  | ||||
| ## cfgRuleOptionRequired | ||||
|  | ||||
| @@ -614,6 +758,54 @@ Permutations that return `NULL` are excluded for brevity. | ||||
| | cfgRuleOptionSection | `CFGOPT_DB2_SOCKET_PATH` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB2_SSH_PORT` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB2_USER` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB3_CMD` | `"global"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB3_CONFIG` | `"global"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB3_HOST` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB3_PATH` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB3_PORT` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB3_SOCKET_PATH` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB3_SSH_PORT` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB3_USER` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB4_CMD` | `"global"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB4_CONFIG` | `"global"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB4_HOST` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB4_PATH` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB4_PORT` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB4_SOCKET_PATH` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB4_SSH_PORT` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB4_USER` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB5_CMD` | `"global"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB5_CONFIG` | `"global"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB5_HOST` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB5_PATH` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB5_PORT` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB5_SOCKET_PATH` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB5_SSH_PORT` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB5_USER` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB6_CMD` | `"global"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB6_CONFIG` | `"global"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB6_HOST` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB6_PATH` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB6_PORT` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB6_SOCKET_PATH` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB6_SSH_PORT` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB6_USER` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB7_CMD` | `"global"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB7_CONFIG` | `"global"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB7_HOST` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB7_PATH` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB7_PORT` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB7_SOCKET_PATH` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB7_SSH_PORT` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB7_USER` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB8_CMD` | `"global"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB8_CONFIG` | `"global"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB8_HOST` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB8_PATH` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB8_PORT` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB8_SOCKET_PATH` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB8_SSH_PORT` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_DB8_USER` | `"stanza"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_HARDLINK` | `"global"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_LINK_ALL` | `"global"` | | ||||
| | cfgRuleOptionSection | `CFGOPT_LINK_MAP` | `"global"` | | ||||
| @@ -709,6 +901,54 @@ Secure options can never be passed on the commmand-line. | ||||
| | cfgRuleOptionType | `CFGOPT_DB2_SOCKET_PATH` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB2_SSH_PORT` | `CFGOPTDEF_TYPE_INTEGER` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB2_USER` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB3_CMD` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB3_CONFIG` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB3_HOST` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB3_PATH` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB3_PORT` | `CFGOPTDEF_TYPE_INTEGER` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB3_SOCKET_PATH` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB3_SSH_PORT` | `CFGOPTDEF_TYPE_INTEGER` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB3_USER` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB4_CMD` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB4_CONFIG` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB4_HOST` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB4_PATH` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB4_PORT` | `CFGOPTDEF_TYPE_INTEGER` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB4_SOCKET_PATH` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB4_SSH_PORT` | `CFGOPTDEF_TYPE_INTEGER` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB4_USER` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB5_CMD` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB5_CONFIG` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB5_HOST` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB5_PATH` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB5_PORT` | `CFGOPTDEF_TYPE_INTEGER` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB5_SOCKET_PATH` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB5_SSH_PORT` | `CFGOPTDEF_TYPE_INTEGER` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB5_USER` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB6_CMD` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB6_CONFIG` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB6_HOST` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB6_PATH` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB6_PORT` | `CFGOPTDEF_TYPE_INTEGER` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB6_SOCKET_PATH` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB6_SSH_PORT` | `CFGOPTDEF_TYPE_INTEGER` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB6_USER` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB7_CMD` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB7_CONFIG` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB7_HOST` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB7_PATH` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB7_PORT` | `CFGOPTDEF_TYPE_INTEGER` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB7_SOCKET_PATH` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB7_SSH_PORT` | `CFGOPTDEF_TYPE_INTEGER` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB7_USER` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB8_CMD` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB8_CONFIG` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB8_HOST` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB8_PATH` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB8_PORT` | `CFGOPTDEF_TYPE_INTEGER` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB8_SOCKET_PATH` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB8_SSH_PORT` | `CFGOPTDEF_TYPE_INTEGER` | | ||||
| | cfgRuleOptionType | `CFGOPT_DB8_USER` | `CFGOPTDEF_TYPE_STRING` | | ||||
| | cfgRuleOptionType | `CFGOPT_DELTA` | `CFGOPTDEF_TYPE_BOOLEAN` | | ||||
| | cfgRuleOptionType | `CFGOPT_FORCE` | `CFGOPTDEF_TYPE_BOOLEAN` | | ||||
| | cfgRuleOptionType | `CFGOPT_HARDLINK` | `CFGOPTDEF_TYPE_BOOLEAN` | | ||||
| @@ -785,6 +1025,12 @@ Permutations that return `false` are excluded for brevity. | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_DB_TIMEOUT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_DB1_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_DB2_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_DB3_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_DB4_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_DB5_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_DB6_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_DB7_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_DB8_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_LOCK_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_LOG_LEVEL_CONSOLE` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_LOG_LEVEL_FILE` | `true` | | ||||
| @@ -827,6 +1073,24 @@ Permutations that return `false` are excluded for brevity. | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB2_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB2_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB2_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB3_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB3_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB3_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB4_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB4_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB4_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB5_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB5_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB5_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB6_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB6_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB6_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB7_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB7_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB7_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB8_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB8_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB8_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_LOCK_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_LOG_LEVEL_CONSOLE` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_LOG_LEVEL_FILE` | `true` | | ||||
| @@ -880,6 +1144,54 @@ Permutations that return `false` are excluded for brevity. | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB2_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB2_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB2_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB3_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB3_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB3_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB3_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB3_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB3_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB3_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB3_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB4_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB4_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB4_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB4_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB4_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB4_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB4_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB4_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB5_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB5_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB5_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB5_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB5_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB5_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB5_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB5_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB6_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB6_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB6_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB6_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB6_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB6_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB6_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB6_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB7_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB7_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB7_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB7_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB7_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB7_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB7_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB7_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB8_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB8_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB8_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB8_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB8_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB8_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB8_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB8_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_FORCE` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_HARDLINK` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_LOCK_PATH` | `true` | | ||||
| @@ -946,6 +1258,54 @@ Permutations that return `false` are excluded for brevity. | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB2_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB2_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB2_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB3_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB3_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB3_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB3_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB3_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB3_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB3_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB3_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB4_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB4_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB4_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB4_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB4_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB4_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB4_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB4_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB5_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB5_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB5_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB5_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB5_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB5_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB5_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB5_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB6_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB6_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB6_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB6_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB6_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB6_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB6_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB6_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB7_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB7_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB7_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB7_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB7_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB7_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB7_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB7_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB8_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB8_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB8_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB8_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB8_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB8_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB8_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB8_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_LOG_LEVEL_CONSOLE` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_LOG_LEVEL_FILE` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_LOG_LEVEL_STDERR` | `true` | | ||||
| @@ -977,6 +1337,30 @@ Permutations that return `false` are excluded for brevity. | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB2_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB2_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB2_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB3_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB3_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB3_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB3_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB4_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB4_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB4_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB4_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB5_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB5_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB5_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB5_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB6_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB6_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB6_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB6_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB7_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB7_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB7_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB7_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB8_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB8_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB8_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB8_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_LOCK_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_LOG_LEVEL_CONSOLE` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_LOG_LEVEL_FILE` | `true` | | ||||
| @@ -1056,6 +1440,48 @@ Permutations that return `false` are excluded for brevity. | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB2_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB2_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB2_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB3_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB3_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB3_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB3_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB3_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB3_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB3_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB4_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB4_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB4_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB4_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB4_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB4_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB4_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB5_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB5_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB5_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB5_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB5_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB5_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB5_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB6_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB6_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB6_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB6_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB6_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB6_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB6_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB7_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB7_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB7_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB7_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB7_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB7_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB7_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB8_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB8_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB8_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB8_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB8_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB8_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB8_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_HOST_ID` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_LOCK_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_LOG_LEVEL_STDERR` | `true` | | ||||
| @@ -1088,6 +1514,24 @@ Permutations that return `false` are excluded for brevity. | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB2_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB2_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB2_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB3_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB3_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB3_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB4_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB4_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB4_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB5_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB5_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB5_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB6_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB6_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB6_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB7_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB7_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB7_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB8_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB8_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB8_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_LOCK_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_LOG_LEVEL_STDERR` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_LOG_PATH` | `true` | | ||||
| @@ -1121,6 +1565,12 @@ Permutations that return `false` are excluded for brevity. | ||||
| | cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_DB_INCLUDE` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_DB1_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_DB2_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_DB3_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_DB4_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_DB5_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_DB6_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_DB7_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_DB8_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_DELTA` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_FORCE` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_LINK_ALL` | `true` | | ||||
| @@ -1183,6 +1633,54 @@ Permutations that return `false` are excluded for brevity. | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB2_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB2_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB2_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB3_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB3_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB3_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB3_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB3_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB3_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB3_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB3_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB4_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB4_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB4_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB4_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB4_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB4_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB4_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB4_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB5_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB5_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB5_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB5_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB5_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB5_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB5_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB5_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB6_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB6_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB6_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB6_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB6_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB6_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB6_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB6_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB7_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB7_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB7_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB7_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB7_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB7_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB7_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB7_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB8_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB8_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB8_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB8_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB8_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB8_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB8_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB8_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_FORCE` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_LOCK_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_LOG_LEVEL_CONSOLE` | `true` | | ||||
| @@ -1232,6 +1730,54 @@ Permutations that return `false` are excluded for brevity. | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB2_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB2_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB2_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB3_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB3_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB3_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB3_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB3_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB3_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB3_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB3_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB4_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB4_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB4_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB4_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB4_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB4_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB4_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB4_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB5_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB5_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB5_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB5_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB5_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB5_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB5_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB5_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB6_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB6_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB6_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB6_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB6_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB6_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB6_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB6_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB7_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB7_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB7_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB7_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB7_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB7_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB7_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB7_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB8_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB8_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB8_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB8_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB8_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB8_SOCKET_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB8_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB8_USER` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_LOCK_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_LOG_LEVEL_CONSOLE` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_LOG_LEVEL_FILE` | `true` | | ||||
| @@ -1267,6 +1813,30 @@ Permutations that return `false` are excluded for brevity. | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB2_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB2_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB2_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB3_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB3_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB3_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB3_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB4_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB4_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB4_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB4_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB5_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB5_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB5_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB5_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB6_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB6_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB6_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB6_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB7_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB7_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB7_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB7_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB8_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB8_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB8_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB8_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_LOCK_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_LOG_LEVEL_CONSOLE` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_LOG_LEVEL_FILE` | `true` | | ||||
| @@ -1301,6 +1871,30 @@ Permutations that return `false` are excluded for brevity. | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB2_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB2_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB2_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB3_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB3_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB3_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB3_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB4_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB4_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB4_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB4_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB5_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB5_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB5_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB5_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB6_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB6_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB6_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB6_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB7_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB7_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB7_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB7_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB8_CMD` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB8_CONFIG` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB8_HOST` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB8_SSH_PORT` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_FORCE` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_LOCK_PATH` | `true` | | ||||
| | cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_LOG_LEVEL_CONSOLE` | `true` | | ||||
|   | ||||
| @@ -88,6 +88,7 @@ P00  DEBUG:     Backup::Common::backupRegExpGet(): bAnchor = <true>, bDifferenti | ||||
| P00  DEBUG:     Backup::Common::backupRegExpGet=>: strRegExp = ^[0-9]{8}\-[0-9]{6}F(\_[0-9]{8}\-[0-9]{6}(D|I)){0,1}$ | ||||
| P00  DEBUG:     Storage::Local->list(): bIgnoreMissing = <false>, strExpression = ^[0-9]{8}\-[0-9]{6}F(\_[0-9]{8}\-[0-9]{6}(D|I)){0,1}$, strPathExp = [TEST_PATH]/db-master/repo/backup/db, strSortOrder = <forward> | ||||
| P00  DEBUG:     Storage::Local->list=>: stryFileList = () | ||||
| P00  DEBUG:     Db::dbObjectGet(): bMasterOnly = <false> | ||||
| P00  DEBUG:     Db->new(): iRemoteIdx = 1 | ||||
| P00  DEBUG:     Db::dbObjectGet=>: iDbMasterIdx = 1, iDbStandbyIdx = [undef], oDbMaster = [object], oDbStandby = [undef] | ||||
| P00  DEBUG:     Storage::Local->new(): bAllowTemp = <true>, hRule = [undef], lBufferMax = 16384, oDriver = [object], strDefaultFileMode = <0640>, strDefaultPathMode = <0750>, strPathBase = [TEST_PATH]/db-master/db/base, strTempExtension = pgbackrest.tmp | ||||
| @@ -468,6 +469,7 @@ P00  DEBUG:     Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master | ||||
| P00  DEBUG:     Storage::Local->pathExists=>: bExists = true | ||||
| P00  DEBUG:     Storage::Local->exists(): strFileExp = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-1]/backup.manifest | ||||
| P00  DEBUG:     Storage::Local->exists=>: bExists = true | ||||
| P00  DEBUG:     Db::dbObjectGet(): bMasterOnly = <false> | ||||
| P00  DEBUG:     Db->new(): iRemoteIdx = 1 | ||||
| P00  DEBUG:     Db::dbObjectGet=>: iDbMasterIdx = 1, iDbStandbyIdx = [undef], oDbMaster = [object], oDbStandby = [undef] | ||||
| P00  DEBUG:     Storage::Local->new(): bAllowTemp = <true>, hRule = [undef], lBufferMax = 4194304, oDriver = [object], strDefaultFileMode = <0640>, strDefaultPathMode = <0750>, strPathBase = [TEST_PATH]/db-master/db/base, strTempExtension = pgbackrest.tmp | ||||
| @@ -635,6 +637,7 @@ P00  DEBUG:     Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master | ||||
| P00  DEBUG:     Storage::Local->pathExists=>: bExists = false | ||||
| P00   WARN: backup [BACKUP-FULL-1] missing in repository removed from backup.info | ||||
| P00  DEBUG:     Backup::Info->delete(): strBackupLabel = [BACKUP-FULL-1] | ||||
| P00  DEBUG:     Db::dbObjectGet(): bMasterOnly = <false> | ||||
| P00  DEBUG:     Db->new(): iRemoteIdx = 1 | ||||
| P00  DEBUG:     Db::dbObjectGet=>: iDbMasterIdx = 1, iDbStandbyIdx = [undef], oDbMaster = [object], oDbStandby = [undef] | ||||
| P00  DEBUG:     Storage::Local->new(): bAllowTemp = <true>, hRule = [undef], lBufferMax = 4194304, oDriver = [object], strDefaultFileMode = <0640>, strDefaultPathMode = <0750>, strPathBase = [TEST_PATH]/db-master/db/base, strTempExtension = pgbackrest.tmp | ||||
| @@ -1530,6 +1533,7 @@ P00  DEBUG:     Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master | ||||
| P00  DEBUG:     Storage::Local->pathExists=>: bExists = true | ||||
| P00  DEBUG:     Storage::Local->exists(): strFileExp = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-2]/backup.manifest | ||||
| P00  DEBUG:     Storage::Local->exists=>: bExists = true | ||||
| P00  DEBUG:     Db::dbObjectGet(): bMasterOnly = <false> | ||||
| P00  DEBUG:     Db->new(): iRemoteIdx = 1 | ||||
| P00  DEBUG:     Db::dbObjectGet=>: iDbMasterIdx = 1, iDbStandbyIdx = [undef], oDbMaster = [object], oDbStandby = [undef] | ||||
| P00  DEBUG:     Storage::Local->new(): bAllowTemp = <true>, hRule = [undef], lBufferMax = 4194304, oDriver = [object], strDefaultFileMode = <0640>, strDefaultPathMode = <0750>, strPathBase = [TEST_PATH]/db-master/db/base, strTempExtension = pgbackrest.tmp | ||||
| @@ -1834,6 +1838,7 @@ P00  DEBUG:     Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master | ||||
| P00  DEBUG:     Storage::Local->pathExists=>: bExists = false | ||||
| P00   WARN: backup [BACKUP-INCR-1] missing in repository removed from backup.info | ||||
| P00  DEBUG:     Backup::Info->delete(): strBackupLabel = [BACKUP-INCR-1] | ||||
| P00  DEBUG:     Db::dbObjectGet(): bMasterOnly = <false> | ||||
| P00  DEBUG:     Db->new(): iRemoteIdx = 1 | ||||
| P00  DEBUG:     Db::dbObjectGet=>: iDbMasterIdx = 1, iDbStandbyIdx = [undef], oDbMaster = [object], oDbStandby = [undef] | ||||
| P00  DEBUG:     Storage::Local->new(): bAllowTemp = <true>, hRule = [undef], lBufferMax = 4194304, oDriver = [object], strDefaultFileMode = <0640>, strDefaultPathMode = <0750>, strPathBase = [TEST_PATH]/db-master/db/base, strTempExtension = pgbackrest.tmp | ||||
|   | ||||
| @@ -88,6 +88,7 @@ P00  DEBUG:     Backup::Common::backupRegExpGet(): bAnchor = <true>, bDifferenti | ||||
| P00  DEBUG:     Backup::Common::backupRegExpGet=>: strRegExp = ^[0-9]{8}\-[0-9]{6}F(\_[0-9]{8}\-[0-9]{6}(D|I)){0,1}$ | ||||
| P00  DEBUG:     Storage::Local->list(): bIgnoreMissing = <false>, strExpression = ^[0-9]{8}\-[0-9]{6}F(\_[0-9]{8}\-[0-9]{6}(D|I)){0,1}$, strPathExp = [TEST_PATH]/backup/repo/backup/db, strSortOrder = <forward> | ||||
| P00  DEBUG:     Storage::Local->list=>: stryFileList = () | ||||
| P00  DEBUG:     Db::dbObjectGet(): bMasterOnly = <false> | ||||
| P00  DEBUG:     Db->new(): iRemoteIdx = 1 | ||||
| P00  DEBUG:     Protocol::Helper::protocolGet(): bCache = <true>, iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = <backup>, strRemoteType = db | ||||
| P00  DEBUG:     Protocol::Helper::protocolGet: create (cached) remote protocol | ||||
| @@ -467,6 +468,7 @@ P00  DEBUG:     Storage::Local->pathExists(): strPathExp = [TEST_PATH]/backup/re | ||||
| P00  DEBUG:     Storage::Local->pathExists=>: bExists = true | ||||
| P00  DEBUG:     Storage::Local->exists(): strFileExp = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-1]/backup.manifest | ||||
| P00  DEBUG:     Storage::Local->exists=>: bExists = true | ||||
| P00  DEBUG:     Db::dbObjectGet(): bMasterOnly = <false> | ||||
| P00  DEBUG:     Db->new(): iRemoteIdx = 1 | ||||
| P00  DEBUG:     Protocol::Helper::protocolGet(): bCache = <true>, iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = <backup>, strRemoteType = db | ||||
| P00  DEBUG:     Protocol::Helper::protocolGet: create (cached) remote protocol | ||||
| @@ -564,6 +566,7 @@ P00  DEBUG:     Storage::Local->pathExists(): strPathExp = [TEST_PATH]/backup/re | ||||
| P00  DEBUG:     Storage::Local->pathExists=>: bExists = true | ||||
| P00  DEBUG:     Storage::Local->exists(): strFileExp = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-1]/backup.manifest | ||||
| P00  DEBUG:     Storage::Local->exists=>: bExists = true | ||||
| P00  DEBUG:     Db::dbObjectGet(): bMasterOnly = <false> | ||||
| P00  DEBUG:     Db->new(): iRemoteIdx = 1 | ||||
| P00  DEBUG:     Protocol::Helper::protocolGet(): bCache = <true>, iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = <backup>, strRemoteType = db | ||||
| P00  DEBUG:     Protocol::Helper::protocolGet: create (cached) remote protocol | ||||
| @@ -648,6 +651,7 @@ P00  DEBUG:     Storage::Local->pathExists(): strPathExp = [TEST_PATH]/backup/re | ||||
| P00  DEBUG:     Storage::Local->pathExists=>: bExists = true | ||||
| P00  DEBUG:     Storage::Local->exists(): strFileExp = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-1]/backup.manifest | ||||
| P00  DEBUG:     Storage::Local->exists=>: bExists = true | ||||
| P00  DEBUG:     Db::dbObjectGet(): bMasterOnly = <false> | ||||
| P00  DEBUG:     Db->new(): iRemoteIdx = 1 | ||||
| P00  DEBUG:     Protocol::Helper::protocolGet(): bCache = <true>, iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = <backup>, strRemoteType = db | ||||
| P00  DEBUG:     Protocol::Helper::protocolGet: create (cached) remote protocol | ||||
| @@ -718,6 +722,7 @@ P00  DEBUG:     Storage::Local->pathExists(): strPathExp = [TEST_PATH]/backup/re | ||||
| P00  DEBUG:     Storage::Local->pathExists=>: bExists = true | ||||
| P00  DEBUG:     Storage::Local->exists(): strFileExp = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-1]/backup.manifest | ||||
| P00  DEBUG:     Storage::Local->exists=>: bExists = true | ||||
| P00  DEBUG:     Db::dbObjectGet(): bMasterOnly = <false> | ||||
| P00  DEBUG:     Db->new(): iRemoteIdx = 1 | ||||
| P00  DEBUG:     Protocol::Helper::protocolGet(): bCache = <true>, iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = <backup>, strRemoteType = db | ||||
| P00  DEBUG:     Protocol::Helper::protocolGet: create (cached) remote protocol | ||||
| @@ -810,6 +815,7 @@ P00  DEBUG:     Storage::Local->pathExists(): strPathExp = [TEST_PATH]/backup/re | ||||
| P00  DEBUG:     Storage::Local->pathExists=>: bExists = true | ||||
| P00  DEBUG:     Storage::Local->exists(): strFileExp = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-1]/backup.manifest | ||||
| P00  DEBUG:     Storage::Local->exists=>: bExists = true | ||||
| P00  DEBUG:     Db::dbObjectGet(): bMasterOnly = <false> | ||||
| P00  DEBUG:     Db->new(): iRemoteIdx = 1 | ||||
| P00  DEBUG:     Protocol::Helper::protocolGet(): bCache = <true>, iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = <backup>, strRemoteType = db | ||||
| P00  DEBUG:     Protocol::Helper::protocolGet: create (cached) remote protocol | ||||
| @@ -919,6 +925,7 @@ P00  DEBUG:     Storage::Local->pathExists(): strPathExp = [TEST_PATH]/backup/re | ||||
| P00  DEBUG:     Storage::Local->pathExists=>: bExists = false | ||||
| P00   WARN: backup [BACKUP-FULL-1] missing in repository removed from backup.info | ||||
| P00  DEBUG:     Backup::Info->delete(): strBackupLabel = [BACKUP-FULL-1] | ||||
| P00  DEBUG:     Db::dbObjectGet(): bMasterOnly = <false> | ||||
| P00  DEBUG:     Db->new(): iRemoteIdx = 1 | ||||
| P00  DEBUG:     Protocol::Helper::protocolGet(): bCache = <true>, iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = <backup>, strRemoteType = db | ||||
| P00  DEBUG:     Protocol::Helper::protocolGet: create (cached) remote protocol | ||||
| @@ -1630,6 +1637,7 @@ P00  DEBUG:     Storage::Local->pathExists(): strPathExp = [TEST_PATH]/backup/re | ||||
| P00  DEBUG:     Storage::Local->pathExists=>: bExists = true | ||||
| P00  DEBUG:     Storage::Local->exists(): strFileExp = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest | ||||
| P00  DEBUG:     Storage::Local->exists=>: bExists = true | ||||
| P00  DEBUG:     Db::dbObjectGet(): bMasterOnly = <false> | ||||
| P00  DEBUG:     Db->new(): iRemoteIdx = 1 | ||||
| P00  DEBUG:     Protocol::Helper::protocolGet(): bCache = <true>, iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = <backup>, strRemoteType = db | ||||
| P00  DEBUG:     Protocol::Helper::protocolGet: create (cached) remote protocol | ||||
| @@ -1960,6 +1968,7 @@ P00  DEBUG:     Storage::Local->pathExists(): strPathExp = [TEST_PATH]/backup/re | ||||
| P00  DEBUG:     Storage::Local->pathExists=>: bExists = false | ||||
| P00   WARN: backup [BACKUP-INCR-1] missing in repository removed from backup.info | ||||
| P00  DEBUG:     Backup::Info->delete(): strBackupLabel = [BACKUP-INCR-1] | ||||
| P00  DEBUG:     Db::dbObjectGet(): bMasterOnly = <false> | ||||
| P00  DEBUG:     Db->new(): iRemoteIdx = 1 | ||||
| P00  DEBUG:     Protocol::Helper::protocolGet(): bCache = <true>, iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = <backup>, strRemoteType = db | ||||
| P00  DEBUG:     Protocol::Helper::protocolGet: create (cached) remote protocol | ||||
|   | ||||
| @@ -103,6 +103,7 @@ P00   INFO: get WAL segment 000000010000000100000001 | ||||
| P00  DEBUG:     Archive::Get::Get->get(): strDestinationFile = [TEST_PATH]/db-master/db/base/pg_xlog/RECOVERYXLOG, strSourceArchive = 000000010000000100000001 | ||||
| P00  DEBUG:     Storage::Local->new(): bAllowTemp = <true>, hRule = [hash], lBufferMax = 4194304, oDriver = [object], strDefaultFileMode = <0640>, strDefaultPathMode = <0750>, strPathBase = [TEST_PATH]/db-master/repo, strTempExtension = pgbackrest.tmp | ||||
| P00  DEBUG:     Archive::Base->getCheck(): strDbVersion = [undef], strWalFile = 000000010000000100000001, ullDbSysId = [undef] | ||||
| P00  DEBUG:     Db::dbObjectGet(): bMasterOnly = true | ||||
| P00  DEBUG:     Db->new(): iRemoteIdx = 1 | ||||
| P00  DEBUG:     Db::dbObjectGet=>: iDbMasterIdx = 1, iDbStandbyIdx = [undef], oDbMaster = [object], oDbStandby = [undef] | ||||
| P00  DEBUG:     Db->info(): strDbPath = <[TEST_PATH]/db-master/db/base> | ||||
|   | ||||
| @@ -103,6 +103,7 @@ P00  DEBUG:     Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompress | ||||
| P00  DEBUG:     Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 6, iCompressLevelNetwork = 3, iProtocolTimeout = 60, strCommand = ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no backrest@backup '[BACKREST-BIN] --buffer-size=4194304 --command=archive-get --compress-level=6 --compress-level-network=3 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --stanza=db --type=backup remote', strId = 'backup remote', strName = remote | ||||
| P00  DEBUG:     Protocol::Storage::Remote->new(): oProtocol = [object] | ||||
| P00  DEBUG:     Archive::Base->getCheck(): strDbVersion = [undef], strWalFile = 000000010000000100000001, ullDbSysId = [undef] | ||||
| P00  DEBUG:     Db::dbObjectGet(): bMasterOnly = true | ||||
| P00  DEBUG:     Db->new(): iRemoteIdx = 1 | ||||
| P00  DEBUG:     Db::dbObjectGet=>: iDbMasterIdx = 1, iDbStandbyIdx = [undef], oDbMaster = [object], oDbStandby = [undef] | ||||
| P00  DEBUG:     Db->info(): strDbPath = <[TEST_PATH]/db-master/db/base> | ||||
|   | ||||
| @@ -17,9 +17,14 @@ db-port=[PORT-1] | ||||
| db-socket-path=[TEST_PATH]/db-master/db | ||||
| db2-cmd=[BACKREST-BIN] | ||||
| db2-config=[TEST_PATH]/db-standby/pgbackrest.conf | ||||
| db2-host=db-standby | ||||
| db2-host=bogus | ||||
| db2-path=[TEST_PATH]/db-standby/db/base | ||||
| db2-user=[USER-1] | ||||
| db8-cmd=[BACKREST-BIN] | ||||
| db8-config=[TEST_PATH]/db-standby/pgbackrest.conf | ||||
| db8-host=db-standby | ||||
| db8-path=[TEST_PATH]/db-standby/db/base | ||||
| db8-user=[USER-1] | ||||
|  | ||||
| [global] | ||||
| compress=n | ||||
| @@ -69,6 +74,10 @@ primary_conninfo = 'host=db-master port=6543 user=replicator' | ||||
| standby_mode = 'on' | ||||
| restore_command = '[BACKREST-BIN] --config=[TEST_PATH]/db-standby/pgbackrest.conf --stanza=db archive-get %f "%p"' | ||||
|  | ||||
| full backup - backup from standby, failure to access at least one standby (db-master host) | ||||
| > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --db8-host=bogus --backup-standby --type=full --stanza=db backup | ||||
| ------------------------------------------------------------------------------------------------------------------------------------ | ||||
|  | ||||
| full backup - backup from standby (db-master host) | ||||
| > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --retention-full=1 --backup-standby --type=full --stanza=db backup | ||||
| ------------------------------------------------------------------------------------------------------------------------------------ | ||||
| @@ -81,9 +90,14 @@ db-port=[PORT-1] | ||||
| db-socket-path=[TEST_PATH]/db-master/db | ||||
| db2-cmd=[BACKREST-BIN] | ||||
| db2-config=[TEST_PATH]/db-standby/pgbackrest.conf | ||||
| db2-host=db-standby | ||||
| db2-host=bogus | ||||
| db2-path=[TEST_PATH]/db-standby/db/base | ||||
| db2-user=[USER-1] | ||||
| db8-cmd=[BACKREST-BIN] | ||||
| db8-config=[TEST_PATH]/db-standby/pgbackrest.conf | ||||
| db8-host=db-standby | ||||
| db8-path=[TEST_PATH]/db-standby/db/base | ||||
| db8-user=[USER-1] | ||||
|  | ||||
| [global] | ||||
| archive-async=y | ||||
| @@ -142,9 +156,14 @@ db-port=[PORT-1] | ||||
| db-socket-path=[TEST_PATH]/db-master/db | ||||
| db2-cmd=[BACKREST-BIN] | ||||
| db2-config=[TEST_PATH]/db-standby/pgbackrest.conf | ||||
| db2-host=db-standby | ||||
| db2-host=bogus | ||||
| db2-path=[TEST_PATH]/db-standby/db/base | ||||
| db2-user=[USER-1] | ||||
| db8-cmd=[BACKREST-BIN] | ||||
| db8-config=[TEST_PATH]/db-standby/pgbackrest.conf | ||||
| db8-host=db-standby | ||||
| db8-path=[TEST_PATH]/db-standby/db/base | ||||
| db8-user=[USER-1] | ||||
|  | ||||
| [global] | ||||
| archive-async=y | ||||
|   | ||||
| @@ -39,9 +39,14 @@ db-port=[PORT-2] | ||||
| db-socket-path=[TEST_PATH]/db-standby/db | ||||
| db2-cmd=[BACKREST-BIN] | ||||
| db2-config=[TEST_PATH]/db-master/pgbackrest.conf | ||||
| db2-host=db-master | ||||
| db2-host=bogus | ||||
| db2-path=[TEST_PATH]/db-master/db/base | ||||
| db2-user=[USER-1] | ||||
| db8-cmd=[BACKREST-BIN] | ||||
| db8-config=[TEST_PATH]/db-master/pgbackrest.conf | ||||
| db8-host=db-master | ||||
| db8-path=[TEST_PATH]/db-master/db/base | ||||
| db8-user=[USER-1] | ||||
|  | ||||
| [global] | ||||
| compress=n | ||||
| @@ -69,6 +74,10 @@ primary_conninfo = 'host=db-master port=6543 user=replicator' | ||||
| standby_mode = 'on' | ||||
| restore_command = '[BACKREST-BIN] --config=[TEST_PATH]/db-standby/pgbackrest.conf --stanza=db archive-get %f "%p"' | ||||
|  | ||||
| full backup - backup from standby, failure to reach master (db-standby host) | ||||
| > [CONTAINER-EXEC] db-standby [BACKREST-BIN] --config=[TEST_PATH]/db-standby/pgbackrest.conf --db8-host=bogus --backup-standby --type=full --stanza=db backup | ||||
| ------------------------------------------------------------------------------------------------------------------------------------ | ||||
|  | ||||
| full backup - backup from standby (db-standby host) | ||||
| > [CONTAINER-EXEC] db-standby [BACKREST-BIN] --config=[TEST_PATH]/db-standby/pgbackrest.conf --retention-full=1 --backup-standby --type=full --stanza=db backup | ||||
| ------------------------------------------------------------------------------------------------------------------------------------ | ||||
| @@ -103,9 +112,14 @@ db-port=[PORT-2] | ||||
| db-socket-path=[TEST_PATH]/db-standby/db | ||||
| db2-cmd=[BACKREST-BIN] | ||||
| db2-config=[TEST_PATH]/db-master/pgbackrest.conf | ||||
| db2-host=db-master | ||||
| db2-host=bogus | ||||
| db2-path=[TEST_PATH]/db-master/db/base | ||||
| db2-user=[USER-1] | ||||
| db8-cmd=[BACKREST-BIN] | ||||
| db8-config=[TEST_PATH]/db-master/pgbackrest.conf | ||||
| db8-host=db-master | ||||
| db8-path=[TEST_PATH]/db-master/db/base | ||||
| db8-user=[USER-1] | ||||
|  | ||||
| [db:restore] | ||||
|  | ||||
| @@ -164,9 +178,14 @@ db-port=[PORT-2] | ||||
| db-socket-path=[TEST_PATH]/db-standby/db | ||||
| db2-cmd=[BACKREST-BIN] | ||||
| db2-config=[TEST_PATH]/db-master/pgbackrest.conf | ||||
| db2-host=db-master | ||||
| db2-host=bogus | ||||
| db2-path=[TEST_PATH]/db-master/db/base | ||||
| db2-user=[USER-1] | ||||
| db8-cmd=[BACKREST-BIN] | ||||
| db8-config=[TEST_PATH]/db-master/pgbackrest.conf | ||||
| db8-host=db-master | ||||
| db8-path=[TEST_PATH]/db-master/db/base | ||||
| db8-user=[USER-1] | ||||
|  | ||||
| [db:restore] | ||||
|  | ||||
|   | ||||
| @@ -64,10 +64,15 @@ db1-port=[PORT-1] | ||||
| db1-user=[USER-2] | ||||
| db2-cmd=[BACKREST-BIN] | ||||
| db2-config=[TEST_PATH]/db-standby/pgbackrest.conf | ||||
| db2-host=db-standby | ||||
| db2-host=bogus | ||||
| db2-path=[TEST_PATH]/db-standby/db/base | ||||
| db2-port=[PORT-2] | ||||
| db2-user=[USER-2] | ||||
| db8-cmd=[BACKREST-BIN] | ||||
| db8-config=[TEST_PATH]/db-standby/pgbackrest.conf | ||||
| db8-host=db-standby | ||||
| db8-path=[TEST_PATH]/db-standby/db/base | ||||
| db8-port=[PORT-2] | ||||
| db8-user=[USER-2] | ||||
|  | ||||
| [global] | ||||
| compress=n | ||||
| @@ -94,6 +99,10 @@ primary_conninfo = 'host=db-master port=6543 user=replicator' | ||||
| standby_mode = 'on' | ||||
| restore_command = '[BACKREST-BIN] --config=[TEST_PATH]/db-standby/pgbackrest.conf --stanza=db archive-get %f "%p"' | ||||
|  | ||||
| full backup - backup from standby, failure to access at least one standby (backup host) | ||||
| > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --db8-host=bogus --backup-standby --type=full --stanza=db backup | ||||
| ------------------------------------------------------------------------------------------------------------------------------------ | ||||
|  | ||||
| full backup - backup from standby (backup host) | ||||
| > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --retention-full=1 --backup-standby --type=full --stanza=db backup | ||||
| ------------------------------------------------------------------------------------------------------------------------------------ | ||||
| @@ -155,10 +164,15 @@ db1-port=[PORT-1] | ||||
| db1-user=[USER-2] | ||||
| db2-cmd=[BACKREST-BIN] | ||||
| db2-config=[TEST_PATH]/db-standby/pgbackrest.conf | ||||
| db2-host=db-standby | ||||
| db2-host=bogus | ||||
| db2-path=[TEST_PATH]/db-standby/db/base | ||||
| db2-port=[PORT-2] | ||||
| db2-user=[USER-2] | ||||
| db8-cmd=[BACKREST-BIN] | ||||
| db8-config=[TEST_PATH]/db-standby/pgbackrest.conf | ||||
| db8-host=db-standby | ||||
| db8-path=[TEST_PATH]/db-standby/db/base | ||||
| db8-port=[PORT-2] | ||||
| db8-user=[USER-2] | ||||
|  | ||||
| [global] | ||||
| archive-async=y | ||||
| @@ -241,10 +255,15 @@ db1-port=[PORT-1] | ||||
| db1-user=[USER-2] | ||||
| db2-cmd=[BACKREST-BIN] | ||||
| db2-config=[TEST_PATH]/db-standby/pgbackrest.conf | ||||
| db2-host=db-standby | ||||
| db2-host=bogus | ||||
| db2-path=[TEST_PATH]/db-standby/db/base | ||||
| db2-port=[PORT-2] | ||||
| db2-user=[USER-2] | ||||
| db8-cmd=[BACKREST-BIN] | ||||
| db8-config=[TEST_PATH]/db-standby/pgbackrest.conf | ||||
| db8-host=db-standby | ||||
| db8-path=[TEST_PATH]/db-standby/db/base | ||||
| db8-port=[PORT-2] | ||||
| db8-user=[USER-2] | ||||
|  | ||||
| [global] | ||||
| archive-async=y | ||||
|   | ||||
| @@ -124,6 +124,15 @@ my $oTestDef = | ||||
|                         'Common/Io/Process' => TESTDEF_COVERAGE_PARTIAL, | ||||
|                     }, | ||||
|                 }, | ||||
|                 { | ||||
|                     &TESTDEF_NAME => 'log', | ||||
|                     &TESTDEF_TOTAL => 1, | ||||
|  | ||||
|                     &TESTDEF_COVERAGE => | ||||
|                     { | ||||
|                         'Common/Log' => TESTDEF_COVERAGE_PARTIAL, | ||||
|                     }, | ||||
|                 }, | ||||
|             ] | ||||
|         }, | ||||
|         # Help tests | ||||
|   | ||||
| @@ -1036,16 +1036,27 @@ sub configCreate | ||||
|  | ||||
|         if (defined($oHostDb2)) | ||||
|         { | ||||
|             $oParamHash{$strStanza}{$self->optionIndexName(CFGOPT_DB_HOST, 2)} = $oHostDb2->nameGet(); | ||||
|             $oParamHash{$strStanza}{$self->optionIndexName(CFGOPT_DB_USER, 2)} = $oHostDb2->userGet(); | ||||
|             $oParamHash{$strStanza}{$self->optionIndexName(CFGOPT_DB_CMD, 2)} = $oHostDb2->backrestExe(); | ||||
|             $oParamHash{$strStanza}{$self->optionIndexName(CFGOPT_DB_CONFIG, 2)} = $oHostDb2->backrestConfig(); | ||||
|             $oParamHash{$strStanza}{$self->optionIndexName(CFGOPT_DB_PATH, 2)} = $oHostDb2->dbBasePath(); | ||||
|             # Add an invalid replica to simulate more than one replica. A warning should be thrown by dbObjectGet when a stanza is | ||||
|             # created and a valid replica should be chosen. | ||||
|             my $iInvalidReplica = 2; | ||||
|             $oParamHash{$strStanza}{$self->optionIndexName(CFGOPT_DB_HOST, $iInvalidReplica)} = BOGUS; | ||||
|             $oParamHash{$strStanza}{$self->optionIndexName(CFGOPT_DB_USER, $iInvalidReplica)} = $oHostDb2->userGet(); | ||||
|             $oParamHash{$strStanza}{$self->optionIndexName(CFGOPT_DB_CMD, $iInvalidReplica)} = $oHostDb2->backrestExe(); | ||||
|             $oParamHash{$strStanza}{$self->optionIndexName(CFGOPT_DB_CONFIG, $iInvalidReplica)} = $oHostDb2->backrestConfig(); | ||||
|             $oParamHash{$strStanza}{$self->optionIndexName(CFGOPT_DB_PATH, $iInvalidReplica)} = $oHostDb2->dbBasePath(); | ||||
|  | ||||
|             # Set a valid replica to the last possible index to ensure skipping indexes does not make a difference. | ||||
|             my $iValidReplica = cfgOptionIndexTotal(CFGOPT_DB_PATH); | ||||
|             $oParamHash{$strStanza}{$self->optionIndexName(CFGOPT_DB_HOST, $iValidReplica)} = $oHostDb2->nameGet(); | ||||
|             $oParamHash{$strStanza}{$self->optionIndexName(CFGOPT_DB_USER, $iValidReplica)} = $oHostDb2->userGet(); | ||||
|             $oParamHash{$strStanza}{$self->optionIndexName(CFGOPT_DB_CMD, $iValidReplica)} = $oHostDb2->backrestExe(); | ||||
|             $oParamHash{$strStanza}{$self->optionIndexName(CFGOPT_DB_CONFIG, $iValidReplica)} = $oHostDb2->backrestConfig(); | ||||
|             $oParamHash{$strStanza}{$self->optionIndexName(CFGOPT_DB_PATH, $iValidReplica)} = $oHostDb2->dbBasePath(); | ||||
|  | ||||
|             # Only test explicit ports on the backup server.  This is so locally configured ports are also tested. | ||||
|             if (!$self->synthetic() && $self->nameTest(HOST_BACKUP)) | ||||
|             { | ||||
|                 $oParamHash{$strStanza}{$self->optionIndexName(CFGOPT_DB_PORT, 2)} = $oHostDb2->pgPort(); | ||||
|                 $oParamHash{$strStanza}{$self->optionIndexName(CFGOPT_DB_PORT, $iValidReplica)} = $oHostDb2->pgPort(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|   | ||||
							
								
								
									
										43
									
								
								test/lib/pgBackRestTest/Module/Common/CommonLogTest.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								test/lib/pgBackRestTest/Module/Common/CommonLogTest.pm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | ||||
| #################################################################################################################################### | ||||
| # CommonLogTest.pm - Unit tests for Log module | ||||
| #################################################################################################################################### | ||||
| package pgBackRestTest::Module::Common::CommonLogTest; | ||||
| use parent 'pgBackRestTest::Common::RunTest'; | ||||
|  | ||||
| #################################################################################################################################### | ||||
| # Perl includes | ||||
| #################################################################################################################################### | ||||
| use strict; | ||||
| use warnings FATAL => qw(all); | ||||
| use Carp qw(confess); | ||||
| use English '-no_match_vars'; | ||||
|  | ||||
| use pgBackRest::Common::Exception; | ||||
| use pgBackRest::Common::Ini; | ||||
| use pgBackRest::Common::Log; | ||||
| use pgBackRest::Version; | ||||
|  | ||||
| use pgBackRestTest::Common::ExecuteTest; | ||||
| use pgBackRestTest::Common::RunTest; | ||||
|  | ||||
| #################################################################################################################################### | ||||
| # run | ||||
| #################################################################################################################################### | ||||
| sub run | ||||
| { | ||||
|     my $self = shift; | ||||
|  | ||||
|     ################################################################################################################################ | ||||
|     if ($self->begin("log()")) | ||||
|     { | ||||
|         logWarnOnErrorEnable(); | ||||
|         $self->testResult(sub {&log(ERROR, "my test log", 27)}, "[object]", 'log error as warning', | ||||
|             {strLogExpect => "WARN: [027]: my test log"}); | ||||
|  | ||||
|         logWarnOnErrorDisable(); | ||||
|         $self->testResult(sub {&log(ERROR, "my test log", 27)}, "[object]", 'log error', | ||||
|             {strLogExpect => "ERROR: [027]: my test log"}); | ||||
|     } | ||||
| } | ||||
|  | ||||
| 1; | ||||
| @@ -461,6 +461,30 @@ sub run | ||||
|             # Update message for standby | ||||
|             $oHostDbMaster->sqlExecute("update test set message = '$strStandbyMessage'"); | ||||
|  | ||||
|             if ($oHostDbStandby->pgVersion() >= PG_VERSION_BACKUP_STANDBY) | ||||
|             { | ||||
|                 # If there is only a master and a replica and the replica is the backup destination, then if db2-host and db3-host | ||||
|                 # are BOGUS, confirm failure to reach the master | ||||
|                 if (!$bHostBackup && $bHostStandby && $strBackupDestination eq HOST_DB_STANDBY) | ||||
|                 { | ||||
|                     my $strStandbyBackup = $oHostBackup->backup( | ||||
|                         CFGOPTVAL_BACKUP_TYPE_FULL, 'backup from standby, failure to reach master', | ||||
|                         {bStandby => true, | ||||
|                          iExpectedExitStatus => ERROR_DB_CONNECT, | ||||
|                          strOptionalParam => '--' . | ||||
|                          $oHostBackup->optionIndexName(CFGOPT_DB_HOST, cfgOptionIndexTotal(CFGOPT_DB_PATH)) . '=' . BOGUS}); | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     my $strStandbyBackup = $oHostBackup->backup( | ||||
|                         CFGOPTVAL_BACKUP_TYPE_FULL, 'backup from standby, failure to access at least one standby', | ||||
|                         {bStandby => true, | ||||
|                          iExpectedExitStatus => ERROR_HOST_CONNECT, | ||||
|                          strOptionalParam => '--' . | ||||
|                          $oHostBackup->optionIndexName(CFGOPT_DB_HOST, cfgOptionIndexTotal(CFGOPT_DB_PATH)) . '=' . BOGUS}); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             my $strStandbyBackup = $oHostBackup->backup( | ||||
|                 CFGOPTVAL_BACKUP_TYPE_FULL, 'backup from standby', | ||||
|                 {bStandby => true, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user