1
0
mirror of https://github.com/pgbackrest/pgbackrest.git synced 2025-09-16 09:06:18 +02:00

Up to seven standbys can be configured for backup from standby.`

Contributed by Cynthia Shang.
This commit is contained in:
Cynthia Shang
2017-08-31 19:15:44 -04:00
committed by David Steele
parent 206415d4c7
commit 36e576b483
23 changed files with 969 additions and 84 deletions

View File

@@ -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 -->

View File

@@ -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>

View File

@@ -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>

View File

@@ -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);

View File

@@ -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();

View File

@@ -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;

View File

@@ -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';

View File

@@ -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;

View File

@@ -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

View File

@@ -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');

View File

@@ -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` |

View File

@@ -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` |

View File

@@ -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

View File

@@ -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

View File

@@ -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>

View File

@@ -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>

View File

@@ -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

View File

@@ -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]

View File

@@ -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

View File

@@ -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

View File

@@ -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();
}
}
}

View 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;

View File

@@ -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,