diff --git a/build/lib/pgBackRestBuild/Build.pm b/build/lib/pgBackRestBuild/Build.pm index cb055b5a9..a36916768 100644 --- a/build/lib/pgBackRestBuild/Build.pm +++ b/build/lib/pgBackRestBuild/Build.pm @@ -18,9 +18,6 @@ use pgBackRest::Storage::Local; use pgBackRest::Storage::Posix::Driver; use pgBackRestBuild::Build::Common; -use pgBackRestBuild::CodeGen::Common; -use pgBackRestBuild::CodeGen::Truth; -use pgBackRestBuild::Config::Build; #################################################################################################################################### # Define generator used for auto generated warning messages @@ -33,6 +30,8 @@ use constant GENERATOR => 'Build.pm sub buildAll { my $strBuildPath = shift; + my $rhBuild = shift; + my $strFileExt = shift; # Storage object my $oStorage = new pgBackRest::Storage::Local( @@ -40,102 +39,73 @@ sub buildAll # Build and output source code #------------------------------------------------------------------------------------------------------------------------------- - my $rhBuild = + foreach my $strBuild (sort(keys(%{$rhBuild}))) { - 'src/config' => buildConfig(), - }; + my $strPath = $rhBuild->{$strBuild}{&BLD_PATH}; - foreach my $strPath (sort(keys(%{$rhBuild}))) - { - foreach my $strFile (sort(keys(%{$rhBuild->{$strPath}{&BLD_FILE}}))) + foreach my $strFile (sort(keys(%{$rhBuild->{$strBuild}{&BLD_DATA}{&BLD_FILE}}))) { - my $rhFile = $rhBuild->{$strPath}{&BLD_FILE}{$strFile}; - my $rhFileFunction = $rhFile->{&BLD_FUNCTION}; + my $rhFile = $rhBuild->{$strBuild}{&BLD_DATA}{&BLD_FILE}{$strFile}; my $rhFileConstant = $rhFile->{&BLD_CONSTANT_GROUP}; + my $rhFileEnum = $rhFile->{&BLD_ENUM}; + my $rhFileData = $rhFile->{&BLD_DATA}; my $rhSource; - # Build the markdown documentation - #------------------------------------------------------------------------------------------------------------------------------- - if (defined($rhFileFunction)) - { - my $strTruthTable = '# ' . $rhFile->{&BLD_SUMMARY} . "\n"; - - foreach my $strFunction (sort(keys(%{$rhFileFunction}))) - { - my $rhFunction = $rhFileFunction->{$strFunction}; - - next if !defined($rhFunction->{&BLD_MATRIX}); - - # Build function summary - my $strSummary = ucfirst($rhFunction->{&BLD_SUMMARY}); - $strSummary .= $strSummary =~ /\?$/ ? '' : '.'; - - $strTruthTable .= - "\n## ${strFunction}\n\n" . - "${strSummary}\n\n" . - "### Truth Table:\n\n"; - - my $strTruthDefault; - my $strTruthSummary; - - # Does this function depend on the result of another function - if (defined($rhFunction->{&BLD_FUNCTION_DEPEND})) - { - $strTruthSummary .= - 'This function is valid when `' . $rhFunction->{&BLD_FUNCTION_DEPEND} . '()` = `' . - cgenTypeFormat(CGEN_DATATYPE_BOOL, $rhFunction->{&BLD_FUNCTION_DEPEND_RESULT}) . '`.'; - } - - # Are there permutations which are excluded? - if (exists($rhFunction->{&BLD_TRUTH_DEFAULT})) - { - $strTruthDefault = - defined($rhFunction->{&BLD_TRUTH_DEFAULT}) ? $rhFunction->{&BLD_TRUTH_DEFAULT} : CGEN_DATAVAL_NULL; - - $strTruthSummary .= - (defined($strTruthSummary) ? ' ' : '') . - 'Permutations that return `' . - cgenTypeFormat( - $rhFunction->{&BLD_RETURN_TYPE}, - defined($rhFunction->{&BLD_RETURN_VALUE_MAP}) && - defined($rhFunction->{&BLD_RETURN_VALUE_MAP}->{$strTruthDefault}) ? - $rhFunction->{&BLD_RETURN_VALUE_MAP}->{$strTruthDefault} : $strTruthDefault) . - "` are excluded for brevity."; - } - - # Build the truth table - $strTruthTable .= - (defined($strTruthSummary) ? "${strTruthSummary}\n\n" : '') . - cgenTruthTable( - $strFunction, $rhFunction->{&BLD_PARAM}, $rhFunction->{&BLD_RETURN_TYPE}, $strTruthDefault, - $rhFunction->{&BLD_MATRIX}, BLDLCL_PARAM_COMMANDID, $rhBuild->{$strPath}{&BLD_PARAM_LABEL}, - $rhFunction->{&BLD_RETURN_VALUE_MAP}); - } - - $rhSource->{&BLD_MD} = $strTruthTable; - } - # Build general banner #------------------------------------------------------------------------------------------------------------------------------- - my $strBanner = cgenBanner($rhFile->{&BLD_SUMMARY}, GENERATOR); + my $strBanner = bldBanner($rhFile->{&BLD_SUMMARY}, GENERATOR); # Build header file #------------------------------------------------------------------------------------------------------------------------------- - if (defined($rhFileConstant)) + if (defined($rhFileEnum) || defined($rhFileConstant)) { - my $strHeaderDefine = uc($strFile) . '_AUTO_H'; + my $strHeaderDefine = uc("${strPath}/${strFile}") . '_AUTO_H'; + $strHeaderDefine =~ s/\//_/g; my $strHeader = $strBanner . "#ifndef ${strHeaderDefine}\n" . "#define ${strHeaderDefine}\n"; + foreach my $strEnum (sort(keys(%{$rhFileEnum}))) + { + my $rhEnum = $rhFileEnum->{$strEnum}; + + $strHeader .= + "\n" . bldBanner($rhEnum->{&BLD_SUMMARY} . ' enum'); + + $strHeader .= + "typedef enum\n" . + "{\n"; + + my $iExpectedValue = 0; + + # Iterate constants + foreach my $strEnumItem (@{$rhEnum->{&BLD_LIST}}) + { + $strHeader .= + " ${strEnumItem}"; + + if (defined($rhEnum->{&BLD_VALUE}{$strEnumItem}) && $rhEnum->{&BLD_VALUE}{$strEnumItem} != $iExpectedValue) + { + $strHeader .= ' = ' . (' ' x (61 - length($strEnumItem))) . $rhEnum->{&BLD_VALUE}{$strEnumItem}; + $iExpectedValue = $rhEnum->{&BLD_VALUE}{$strEnumItem}; + } + + $strHeader .= ",\n"; + $iExpectedValue++; + } + + $strHeader .= + "} " . $rhEnum->{&BLD_NAME} . ";\n"; + } + # Iterate constant groups foreach my $strConstantGroup (sort(keys(%{$rhFileConstant}))) { my $rhConstantGroup = $rhFileConstant->{$strConstantGroup}; - $strHeader .= "\n" . cgenBanner($rhConstantGroup->{&BLD_SUMMARY} . ' constants', GENERATOR); + $strHeader .= "\n" . bldBanner($rhConstantGroup->{&BLD_SUMMARY} . ' constants'); # Iterate constants foreach my $strConstant (sort(keys(%{$rhConstantGroup->{&BLD_CONSTANT}}))) @@ -156,23 +126,51 @@ sub buildAll # Build C file #----------------------------------------------------------------------------------------------------------------------- - my $strFunctionCode = $strBanner; - - foreach my $strFunction (sort(keys(%{$rhFileFunction}))) + if (defined($rhFileData)) { - my $rhFunction = $rhFileFunction->{$strFunction}; + my $strCode; - $strFunctionCode .= - "\n" . cgenFunction($strFunction, $rhFunction->{&BLD_SUMMARY}, undef, $rhFunction->{&BLD_SOURCE}); + foreach my $strData (sort(keys(%{$rhFileData}))) + { + my $rhData = $rhFileData->{$strData}; + + $strCode .= "\n" . bldBanner($rhData->{&BLD_SUMMARY}); + $strCode .= $rhData->{&BLD_SOURCE}; + } + + $rhSource->{&BLD_C} = "${strBanner}${strCode}"; } - $rhSource->{&BLD_C} = $strFunctionCode; - # Output files #----------------------------------------------------------------------------------------------------------------------- foreach my $strFileType (sort(keys(%{$rhSource}))) { - $oStorage->put("${strPath}/${strFile}.auto.${strFileType}", trim($rhSource->{$strFileType}) . "\n"); + my $strExt = $strFileType; + + if (defined($strFileExt)) + { + $strExt = $strFileType eq BLD_C ? $strFileExt : "${strFileExt}h"; + } + + # Only save the file if the content has changed + my $strFileName = "${strPath}/${strFile}.auto.${strExt}"; + my $strContent = trim($rhSource->{$strFileType}) . "\n"; + my $bChanged = true; + + if ($oStorage->exists($strFileName)) + { + my $strOldContent = ${$oStorage->get($strFileName)}; + + if ($strContent eq $strOldContent) + { + $bChanged = false; + } + } + + if ($bChanged) + { + $oStorage->put($strFileName, $strContent); + } } } } diff --git a/build/lib/pgBackRestBuild/Build/Common.pm b/build/lib/pgBackRestBuild/Build/Common.pm index 9d9cc7983..045376a4d 100644 --- a/build/lib/pgBackRestBuild/Build/Common.pm +++ b/build/lib/pgBackRestBuild/Build/Common.pm @@ -13,6 +13,9 @@ use Exporter qw(import); our @EXPORT = qw(); use Storable qw(dclone); +use pgBackRest::Common::Log; +use pgBackRest::Common::String; + #################################################################################################################################### # Constants #################################################################################################################################### @@ -23,13 +26,10 @@ use constant BLD_FILE => 'file'; use constant BLD_C => 'c'; push @EXPORT, qw(BLD_C); +use constant BLD_EXT => 'ext'; + push @EXPORT, qw(BLD_EXT); use constant BLD_HEADER => 'h'; push @EXPORT, qw(BLD_HEADER); -use constant BLD_MD => 'md'; - push @EXPORT, qw(BLD_MD); - -use constant BLD_SUMMARY => 'summary'; - push @EXPORT, qw(BLD_SUMMARY); use constant BLD_CONSTANT => 'constant'; push @EXPORT, qw(BLD_CONSTANT); @@ -40,28 +40,105 @@ use constant BLD_CONSTANT_GROUP => 'constant use constant BLD_CONSTANT_VALUE => 'constantValue'; push @EXPORT, qw(BLD_CONSTANT_VALUE); -use constant BLD_FUNCTION => 'function'; - push @EXPORT, qw(BLD_FUNCTION); -use constant BLD_FUNCTION_DEPEND => 'functionDepend'; - push @EXPORT, qw(BLD_FUNCTION_DEPEND); -use constant BLD_FUNCTION_DEPEND_RESULT => 'functionDependResult'; - push @EXPORT, qw(BLD_FUNCTION_DEPEND_RESULT); - -use constant BLD_PARAM => 'param'; - push @EXPORT, qw(BLD_PARAM); -use constant BLD_PARAM_LABEL => 'paramLabel'; - push @EXPORT, qw(BLD_PARAM_LABEL); -use constant BLD_RETURN_TYPE => 'returnType'; - push @EXPORT, qw(BLD_RETURN_TYPE); -use constant BLD_RETURN_VALUE_MAP => 'returnValueMap'; - push @EXPORT, qw(BLD_RETURN_VALUE_MAP); - -use constant BLD_TRUTH_DEFAULT => 'truthDefault'; - push @EXPORT, qw(BLD_TRUTH_DEFAULT); - -use constant BLD_MATRIX => 'buildMatrix'; - push @EXPORT, qw(BLD_MATRIX); +use constant BLD_DATA => 'data'; + push @EXPORT, qw(BLD_DATA); +use constant BLD_ENUM => 'enum'; + push @EXPORT, qw(BLD_ENUM); +use constant BLD_LIST => 'list'; + push @EXPORT, qw(BLD_LIST); +use constant BLD_NAME => 'name'; + push @EXPORT, qw(BLD_NAME); +use constant BLD_PATH => 'path'; + push @EXPORT, qw(BLD_PATH); use constant BLD_SOURCE => 'buildSource'; push @EXPORT, qw(BLD_SOURCE); +use constant BLD_SUMMARY => 'summary'; + push @EXPORT, qw(BLD_SUMMARY); +use constant BLD_VALUE => 'value'; + push @EXPORT, qw(BLD_VALUE); + +#################################################################################################################################### +# bldAutoWarning - warning not to modify automatically generated files directly +#################################################################################################################################### +sub bldAutoWarning +{ + my $strGenerator = shift; + + return "Automatically generated by ${strGenerator} -- do not modify directly."; +} + +push @EXPORT, qw(bldAutoWarning); + +#################################################################################################################################### +# bldBanner - build general banner +#################################################################################################################################### +sub bldBanner +{ + my $strContent = shift; + my $strGenerator = shift; + + my $strBanner = + qw{/} . (qw{*} x 131) . "\n" . + trim($strContent) . "\n"; + + if (defined($strGenerator)) + { + $strBanner .= + "\n" . + bldAutoWarning($strGenerator) . "\n"; + } + + $strBanner .= + (qw{*} x 131) . qw{/} . "\n"; + + return $strBanner; +} + +push @EXPORT, qw(bldBanner); + +#################################################################################################################################### +# Generate an enum name from a prefix and - separated name +#################################################################################################################################### +sub bldEnum +{ + my $strPrefix = shift; + my $strName = shift; + my $bInitCapFirst = shift; + + $bInitCapFirst = defined($bInitCapFirst) ? $bInitCapFirst : true; + my $bFirst = true; + + my @stryName = split('\-', $strName); + $strName = undef; + + foreach my $strPart (@stryName) + { + $strName .= ($bFirst && $bInitCapFirst) || !$bFirst ? ucfirst($strPart) : $strPart; + $bFirst = false; + } + + return "${strPrefix}${strName}"; +} + +push @EXPORT, qw(bldEnum); + +#################################################################################################################################### +# Quote a list of strings +#################################################################################################################################### +sub bldQuoteList +{ + my $ryList = shift; + + my @stryQuoteList; + + foreach my $strItem (@{$ryList}) + { + push(@stryQuoteList, "\"${strItem}\""); + } + + return @stryQuoteList; +} + +push @EXPORT, qw(bldQuoteList); 1; diff --git a/build/lib/pgBackRestBuild/CodeGen/Common.pm b/build/lib/pgBackRestBuild/CodeGen/Common.pm deleted file mode 100644 index d28249cf2..000000000 --- a/build/lib/pgBackRestBuild/CodeGen/Common.pm +++ /dev/null @@ -1,191 +0,0 @@ -#################################################################################################################################### -# C Code Generation Formatting Functions -#################################################################################################################################### -package pgBackRestBuild::CodeGen::Common; - -use strict; -use warnings FATAL => qw(all); -use Carp qw(confess); -use English '-no_match_vars'; - -use Exporter qw(import); - our @EXPORT = qw(); - -use pgBackRest::Common::Log; -use pgBackRest::Common::String; - -#################################################################################################################################### -# Generate functions that return config rule data -#################################################################################################################################### -use constant CGEN_DATATYPE_BOOL => 'bool'; - push @EXPORT, qw(CGEN_DATATYPE_BOOL); -use constant CGEN_DATATYPE_DOUBLE => 'double'; - push @EXPORT, qw(CGEN_DATATYPE_DOUBLE); -use constant CGEN_DATATYPE_INT => 'int'; - push @EXPORT, qw(CGEN_DATATYPE_INT); -use constant CGEN_DATATYPE_INT64 => 'int64'; - push @EXPORT, qw(CGEN_DATATYPE_INT64); -use constant CGEN_DATATYPE_CONSTCHAR => 'const char *'; - push @EXPORT, qw(CGEN_DATATYPE_CONSTCHAR); - -use constant CGEN_DATAVAL_NULL => '^^{{[[NULL]]}}^^'; - push @EXPORT, qw(CGEN_DATAVAL_NULL); - -#################################################################################################################################### -# cgenAutoWarning - warning not to modify automatically generated files directly -#################################################################################################################################### -sub cgenAutoWarning -{ - my $strGenerator = shift; - - return "Automatically generated by ${strGenerator} -- do not modify directly."; -} - -push @EXPORT, qw(cgenAutoWarning); - -#################################################################################################################################### -# cgenBanner - build general banner -#################################################################################################################################### -sub cgenBanner -{ - my $strContent = shift; - my $strGenerator = shift; - - my $strBanner = - qw{/} . (qw{*} x 131) . "\n" . - trim($strContent) . "\n"; - - if (defined($strGenerator)) - { - $strBanner .= - "# \n" . - '# ' . cgenAutoWarning($strGenerator) . "\n"; - } - - $strBanner .= - (qw{*} x 131) . qw{/} . "\n"; - - return $strBanner; -} - -push @EXPORT, qw(cgenBanner); - -#################################################################################################################################### -# cgenFunction - format type names for C -#################################################################################################################################### -sub cgenFunction -{ - my $strName = shift; - my $strSummary = shift; - my $strDescription = shift; - my $strSource = shift; - - # Summary should always be defined - if (!defined($strSummary)) - { - confess &log(ASSERT, "${strName} must have a summary"); - } - - # Make sure summary will fit on a single line - my $iLenMax = 132 - 3 - length($strName); - - if (length($strSummary) > $iLenMax) - { - &log(ASSERT, "summary for ${strName} must be <= ${iLenMax} characters"); - } - - my $strFunction = - cgenBanner($strName . (defined($strSummary) ? " - ${strSummary}" : '')) . - $strSource; - - return $strFunction; -} - -push @EXPORT, qw(cgenFunction); - -#################################################################################################################################### -# cgenTypeFormat - format types values for C -#################################################################################################################################### -sub cgenTypeFormat -{ - my $strType = shift; - my $strValue = shift; - - if ($strType eq CGEN_DATATYPE_BOOL) - { - return ($strValue == 1 ? 'true' : 'false'); - } - elsif ($strType eq CGEN_DATATYPE_INT || $strType eq CGEN_DATATYPE_INT64 || $strType eq CGEN_DATATYPE_DOUBLE) - { - return $strValue; - } - elsif ($strType eq CGEN_DATATYPE_CONSTCHAR) - { - return ($strValue eq CGEN_DATAVAL_NULL ? 'NULL' : "\"${strValue}\""); - } - - confess "unknown type ${strType}"; -} - -push @EXPORT, qw(cgenTypeFormat); - -#################################################################################################################################### -# cgenTypeName - format type names for C -#################################################################################################################################### -sub cgenTypeName -{ - my $strType = shift; - - if ($strType eq CGEN_DATATYPE_BOOL) - { - return 'bool'; - } - elsif ($strType eq CGEN_DATATYPE_INT) - { - return 'int'; - } - elsif ($strType eq CGEN_DATATYPE_INT64) - { - return 'int64'; - } - elsif ($strType eq CGEN_DATATYPE_DOUBLE) - { - return 'double'; - } - elsif ($strType eq CGEN_DATATYPE_CONSTCHAR) - { - return 'const char *'; - } - - confess "unknown type ${strType}"; -} - -push @EXPORT, qw(cgenTypeName); - -#################################################################################################################################### -# cgenPermute - return all permutations of an array -#################################################################################################################################### -sub cgenPermute -{ - my $rxyList = shift; - - # If there are one or less elements then the existing array represents the only permutation - return map [$_], @$rxyList if @{$rxyList} <= 1; - - # Calculate permutations - my @xyPermutation; - - for my $iIndex (0 .. $#{$rxyList}) - { - my @xyRemaining = @{$rxyList}; - my $xValue = splice(@xyRemaining, $iIndex, 1); - - push @xyPermutation, [$xValue, @$_] for cgenPermute(\@xyRemaining, @{$rxyList} - 1); - } - - return @xyPermutation; -} - -push @EXPORT, qw(cgenPermute); - -1; diff --git a/build/lib/pgBackRestBuild/CodeGen/Lookup.pm b/build/lib/pgBackRestBuild/CodeGen/Lookup.pm deleted file mode 100644 index fd8c15bbc..000000000 --- a/build/lib/pgBackRestBuild/CodeGen/Lookup.pm +++ /dev/null @@ -1,90 +0,0 @@ -#################################################################################################################################### -# Generate C Lookup Functions -#################################################################################################################################### -package pgBackRestBuild::CodeGen::Lookup; - -use strict; -use warnings FATAL => qw(all); -use Carp qw(confess); -use English '-no_match_vars'; - -use Exporter qw(import); - our @EXPORT = qw(); -use Storable qw(dclone); - -use pgBackRest::Common::Log; - -use pgBackRestBuild::CodeGen::Common; - -#################################################################################################################################### -# cgenLookupString - build C function that looks up strings by id -#################################################################################################################################### -sub cgenLookupString -{ - my $strName = shift; - my $strTotal = shift; - my $rhValue = shift; - my $strFilter = shift; - - my $strLowerName = lc($strName); - - # Generate list of command strings - my $strFunction = - "const char *${strLowerName}NameList[${strTotal}] = \n" . - "{\n"; - - my $bFirst = true; - - foreach my $strLookupName (sort(keys(%{$rhValue}))) - { - next if defined($strFilter) && $strLookupName =~ $strFilter; - - $strFunction .= ($bFirst ? '' : ",\n") . " \"${strLookupName}\""; - $bFirst = false; - } - - $strFunction .= - "\n};\n\n"; - - $strFunction .= - "const char *\n" . - "cfg${strName}Name(int ${strLowerName}Id)\n" . - "{\n" . - " if (${strLowerName}Id < 0 || ${strLowerName}Id >= ${strTotal})\n" . - " return NULL;\n" . - "\n" . - " return ${strLowerName}NameList[${strLowerName}Id];\n" . - "}\n"; - - return $strFunction; -} - -push @EXPORT, qw(cgenLookupString); - -#################################################################################################################################### -# cgenLookupId - build C function that looks up ids by string -#################################################################################################################################### -sub cgenLookupId -{ - my $strName = shift; - my $strTotal = shift; - - my $strLowerName = lc($strName); - - my $strFunction = - "int\n" . - "cfg${strName}Id(const char *${strLowerName}Name)\n" . - "{\n" . - " for (int nameIdx = 0; nameIdx < ${strTotal}; nameIdx++)\n" . - " if (strcmp(${strLowerName}Name, cfg${strName}Name(nameIdx)) == 0)\n" . - " return nameIdx;\n" . - "\n" . - " return -1;\n" . - "}\n"; - - return $strFunction; -} - -push @EXPORT, qw(cgenLookupId); - -1; diff --git a/build/lib/pgBackRestBuild/CodeGen/Switch.pm b/build/lib/pgBackRestBuild/CodeGen/Switch.pm deleted file mode 100644 index 6cf760459..000000000 --- a/build/lib/pgBackRestBuild/CodeGen/Switch.pm +++ /dev/null @@ -1,288 +0,0 @@ -#################################################################################################################################### -# Generate C Switch Functions -#################################################################################################################################### -package pgBackRestBuild::CodeGen::Switch; - -use strict; -use warnings FATAL => qw(all); -use Carp qw(confess); -use English '-no_match_vars'; - -use Exporter qw(import); - our @EXPORT = qw(); -use Storable qw(dclone); - -use pgBackRest::Common::Log; -use pgBackRest::Common::String; - -use pgBackRestBuild::CodeGen::Common; - -#################################################################################################################################### -# Cost constants used by optimizer -#################################################################################################################################### -# Cost for setting up a new switch statement -use constant COST_SWITCH => 5; -# Cost for each case -use constant COST_SWITCH_CASE => 1; -# Cost for a clause (which might be shared with multipe cases) -use constant COST_SWITCH_CLAUSE => 2; - -#################################################################################################################################### -# cgenSwitchBuild - build switch statements to perform lookups -#################################################################################################################################### -sub cgenSwitchBuild -{ - my $strName = shift; - my $strType = shift; - my $ryMatrix = dclone(shift); - my $rstryParam = dclone(shift); - my $rhLabelMap = shift; - my $rhValueLabelMap = shift; - - # Build a hash with positions for the data in parameter order - my $rhParamOrder = {}; - - for (my $iIndex = 0; $iIndex < @{$rstryParam}; $iIndex++) - { - $rhParamOrder->{$rstryParam->[$iIndex]} = $iIndex; - } - - # Try each permutation of param order to find the most efficient switch statement - my $iBestCost; - my $strBestSwitch; - - foreach my $rstryParamPermute (cgenPermute($rstryParam)) - { - # Build a hash with positions for the data in permutation order - my $rhPermuteOrder = {}; - - for (my $iIndex = 0; $iIndex < @{$rstryParamPermute}; $iIndex++) - { - $rhPermuteOrder->{$rstryParamPermute->[$iIndex]} = $iIndex; - } - - # Arrange data in permutation order so later functions don't have to remap for every operation - my @yMatrixPermute; - - foreach my $rxyEntry (@{$ryMatrix}) - { - my @xyEntryPermute; - - for (my $iSwapIdx = 0; $iSwapIdx < @{$rstryParam}; $iSwapIdx++) - { - $xyEntryPermute[$rhPermuteOrder->{$rstryParam->[$iSwapIdx]}] = - $rxyEntry->[$rhParamOrder->{$rstryParam->[$iSwapIdx]}]; - } - - # Convert the value to a special string if it is null to ease later prcessing - $xyEntryPermute[@{$rstryParam}] = defined($rxyEntry->[-1]) ? $rxyEntry->[-1] : CGEN_DATAVAL_NULL; - - push(@yMatrixPermute, \@xyEntryPermute); - } - - # Build switch based on current param permutation - my ($strSwitch, $iCost) = cgenSwitchBuildSub( - $strType, \@yMatrixPermute, 0, $rstryParamPermute, $rhLabelMap, $rhValueLabelMap); - - # If the switch has a lower cost than the existing one then use it instead - if (!defined($iBestCost) || $iCost < $iBestCost) - { - $iBestCost = $iCost; - $strBestSwitch = $strSwitch; - } - } - - # Construct the function based on the best switch statement - return - cgenTypeName($strType) . "\n" . - "${strName}(int " . join(', int ', @{$rstryParam}) . ")\n" . - "{\n" . - "${strBestSwitch}\n" . - "}\n"; -} - -push @EXPORT, qw(cgenSwitchBuild); - -#################################################################################################################################### -# cgenSwitchBuildSub - build individual switch statements recursively -#################################################################################################################################### -sub cgenSwitchBuildSub -{ - my $strType = shift; - my $rstryMatrix = dclone(shift); - my $iDepth = shift; - my $rstryParam = dclone(shift); - my $rhLabelMap = shift; - my $rhValueLabelMap = shift; - my $xMostCommonParentValue = shift; - - # How much to indent the code is based on the current depth - my $strIndent = (' ' x (($iDepth * 2) + 1)); - - # Set initial cost for setting up the switch statement - my $iCost = COST_SWITCH; - - # Get the param to be used for the switch statement - my $strParam = shift(@{$rstryParam}); - - # Determine the most common value - my $iMostCommonTotal = 0; - my $xMostCommonValue; - my $rhMostCommon = {}; - - foreach my $rxyEntry (@{$rstryMatrix}) - { - my $xValue = $rxyEntry->[-1]; - - $rhMostCommon->{$xValue} = (defined($rhMostCommon->{$xValue}) ? $rhMostCommon->{$xValue} : 0) + 1; - - if ($rhMostCommon->{$xValue} > $iMostCommonTotal) - { - $iMostCommonTotal = $rhMostCommon->{$xValue}; - $xMostCommonValue = $xValue; - } - } - - # Keep going until all keys are exhausted - my $rhClauseHash; - - while (@{$rstryMatrix} > 0) - { - # Start processing the first key in the list - my $strKeyTop = $rstryMatrix->[0][0]; - - # A list of keys values to be passed to the next switch statement - my @stryEntrySub; - - # Find all instances of the key and build a hash representing the distinct list of values - my $rhKeyValue = {}; - my $iEntryIdx = 0; - - while ($iEntryIdx < @{$rstryMatrix}) - { - # If this key matches the top key then process - if ($rstryMatrix->[$iEntryIdx][0] eq $strKeyTop) - { - # Add value to unique list - $rhKeyValue->{$rstryMatrix->[$iEntryIdx][-1]} = true; - - # Get the key/value entry, remove the top key, and store for the next switch statement - my @stryEntry = @{$rstryMatrix->[$iEntryIdx]}; - shift(@stryEntry); - push(@stryEntrySub, \@stryEntry); - - # Remove the key from the list - splice(@{$rstryMatrix}, $iEntryIdx, 1); - } - # else move on to the next key - else - { - $iEntryIdx++; - } - }; - - # Only need a switch if there is more than one value or the one value is not the most common value - if (keys(%{$rhKeyValue}) > 1 || $stryEntrySub[0][-1] ne $xMostCommonValue) - { - my $strClause = ''; - - $iCost += COST_SWITCH_CASE; - - # Process next switch - if (keys(%{$rhKeyValue}) > 1 && @{$stryEntrySub[0]} > 1) - { - my ($strClauseSub, $iCostSub) = cgenSwitchBuildSub( - $strType, \@stryEntrySub, $iDepth + 1, $rstryParam, $rhLabelMap, $rhValueLabelMap, $xMostCommonValue); - - $strClause .= $strClauseSub . "\n"; - $iCost += $iCostSub; - } - # Return the value - else - { - my $strRetVal = $stryEntrySub[0][-1]; - - $strClause .= - "${strIndent} return " . - cgenTypeFormat( - $strType, - defined($rhValueLabelMap) && defined($rhValueLabelMap->{$strRetVal}) ? - $rhValueLabelMap->{$strRetVal} : $strRetVal) . - ";\n"; - } - - # Store the key and the clause in a hash to deduplicate - push(@{$rhClauseHash->{$strClause}{key}}, int($strKeyTop)); - } - } - - # Reorder clause based on an numerical/alpha representation of the case statements. This is done for primarily for readability - # but may have some optimization benefits since integer keys are ordered numerically. - my $rhClauseOrderedHash; - - foreach my $strClause (sort(keys(%{$rhClauseHash}))) - { - my $strKey; - - foreach my $iKey (@{$rhClauseHash->{$strClause}{key}}) - { - $strKey .= (defined($strKey) ? '' : ',') . sprintf('%07d', $iKey); - } - - $rhClauseOrderedHash->{$strKey}{clause} = $strClause; - $rhClauseOrderedHash->{$strKey}{key} = $rhClauseHash->{$strClause}{key}; - } - - # Build the switch statement - my $bFirst = true; - my $strFunction = - "${strIndent}switch (${strParam})\n" . - "${strIndent}{\n"; - - # Retrieve each unique clause and create a case for each key assocated with it - foreach my $strKey (sort(keys(%{$rhClauseOrderedHash}))) - { - if (!$bFirst) - { - $strFunction .= "\n"; - } - - foreach my $strKey (@{$rhClauseOrderedHash->{$strKey}{key}}) - { - $iCost += COST_SWITCH_CLAUSE; - - $strFunction .= - "${strIndent} case " . - (defined($rhLabelMap->{$strParam}) ? $rhLabelMap->{$strParam}{int($strKey)} : int($strKey)) . ":\n"; - } - - $strFunction .= $rhClauseOrderedHash->{$strKey}{clause}; - $bFirst = false; - } - - $strFunction .= - "${strIndent}}\n\n"; - - # If the most common value is the same as the parent then break instead of returning the same value. Returning the same value - # again might be slightly more efficient but the break makes it easier to debug where values are coming from. - if (defined($xMostCommonParentValue) && $xMostCommonValue eq $xMostCommonParentValue) - { - $strFunction .= - "${strIndent}break;"; - } - # Else return the most common value - else - { - $strFunction .= - "${strIndent}return " . - cgenTypeFormat( - $strType, - defined($rhValueLabelMap) && defined($rhValueLabelMap->{$xMostCommonValue}) ? - $rhValueLabelMap->{$xMostCommonValue} : $xMostCommonValue) . - ";"; - } - - return $strFunction, $iCost; -} - -1; diff --git a/build/lib/pgBackRestBuild/CodeGen/Truth.pm b/build/lib/pgBackRestBuild/CodeGen/Truth.pm deleted file mode 100644 index 2b903c5f1..000000000 --- a/build/lib/pgBackRestBuild/CodeGen/Truth.pm +++ /dev/null @@ -1,173 +0,0 @@ -#################################################################################################################################### -# Generate Truth Tables in Markdown Format -#################################################################################################################################### -package pgBackRestBuild::CodeGen::Truth; - -use strict; -use warnings FATAL => qw(all); -use Carp qw(confess); -use English '-no_match_vars'; - -use Exporter qw(import); - our @EXPORT = qw(); -use Storable qw(dclone); - -use pgBackRest::Common::Log; - -use pgBackRestBuild::CodeGen::Common; - -#################################################################################################################################### -# cgenTruthTable - Main builder -#################################################################################################################################### -sub cgenTruthTable -{ - my $strFunction = shift; - my $rstryParam = shift; - my $strReturnType = shift; - my $strReturnDefault = shift; - my $rxyMatrix = shift; - my $strRedundantParam = shift; - my $rhParamValueMap = shift; - my $rhReturnValueMap = shift; - - # Write table header - my $strTruthTable = '| Function'; - - for (my $iParamIdx = 0; $iParamIdx < @{$rstryParam}; $iParamIdx++) - { - $strTruthTable .= ' | ' . $rstryParam->[$iParamIdx]; - } - - $strTruthTable .= - " | Result |\n" . - '| --------'; - - for (my $iParamIdx = 0; $iParamIdx < @{$rstryParam}; $iParamIdx++) - { - $strTruthTable .= ' | ' . ('-' x length($rstryParam->[$iParamIdx])); - } - - $strTruthTable .= - " | ------ |\n"; - - # Format matrix data so that can be ordered (even by integer) - my @stryOrderedMatrix; - - foreach my $rxyEntry (@{$rxyMatrix}) - { - my $strEntry; - - for (my $iEntryIdx = 0; $iEntryIdx < @{$rxyEntry}; $iEntryIdx++) - { - my $strValue = defined($rxyEntry->[$iEntryIdx]) ? $rxyEntry->[$iEntryIdx] : CGEN_DATAVAL_NULL; - - if ($iEntryIdx != @{$rxyEntry} - 1) - { - $strEntry .= (defined($strEntry) ? '~' : '') . sprintf('%016d', $strValue); - } - else - { - $strEntry .= '~' . $strValue; - } - } - - push(@stryOrderedMatrix, $strEntry); - } - - # Optimize away one parameter that is frequently redundant - my $rhMatrixFilter; - my @stryFilteredMatrix; - - if ($rstryParam->[0] eq $strRedundantParam) - { - foreach my $strEntry (sort(@stryOrderedMatrix)) - { - my @xyEntry = split('\~', $strEntry); - - shift(@xyEntry); - my $strValue = pop(@xyEntry); - my $strKey = join('~', @xyEntry); - - push(@{$rhMatrixFilter->{$strKey}{entry}}, $strEntry); - $rhMatrixFilter->{$strKey}{value}{$strValue} = true; - } - - foreach my $strKey (sort(keys(%{$rhMatrixFilter}))) - { - if (keys(%{$rhMatrixFilter->{$strKey}{value}}) == 1) - { - my $strEntry = - - push( - @stryFilteredMatrix, - CGEN_DATAVAL_NULL . "~${strKey}~" . (keys(%{$rhMatrixFilter->{$strKey}{value}}))[0]); - } - else - { - push(@stryFilteredMatrix, @{$rhMatrixFilter->{$strKey}{entry}}); - } - } - } - else - { - @stryFilteredMatrix = @stryOrderedMatrix; - } - - # Output function entry - foreach my $strEntry (sort(@stryFilteredMatrix)) - { - my @xyEntry = split('\~', $strEntry); - my $strRow = '| ' . $strFunction; - my $strValue; - - for (my $iEntryIdx = 0; $iEntryIdx < @xyEntry; $iEntryIdx++) - { - $strValue = $xyEntry[$iEntryIdx]; - $strRow .= ' | '; - - if ($iEntryIdx != @xyEntry - 1) - { - my $strParam = $rstryParam->[$iEntryIdx]; - - if ($strValue eq CGEN_DATAVAL_NULL) - { - $strRow .= '_\_'; - } - else - { - $strRow .= - '`' . - (defined($rhParamValueMap->{$strParam}) ? - $rhParamValueMap->{$strParam}{int($strValue)} : int($strValue)) . - '`'; - } - } - else - { - $strRow .= - '`' . - cgenTypeFormat( - $strReturnType, - defined($rhReturnValueMap) && - defined($rhReturnValueMap->{$strValue}) ? - $rhReturnValueMap->{$strValue} : $strValue) . - '`'; - - } - } - - # If default default value is returned then skip this entry - if (defined($strReturnDefault) && $strReturnDefault eq $strValue) - { - next; - } - - $strTruthTable .= "${strRow} |\n"; - } - - return $strTruthTable; -} - -push @EXPORT, qw(cgenTruthTable); - -1; diff --git a/build/lib/pgBackRestBuild/Config/Build.pm b/build/lib/pgBackRestBuild/Config/Build.pm index 66f62de06..b85ff3601 100644 --- a/build/lib/pgBackRestBuild/Config/Build.pm +++ b/build/lib/pgBackRestBuild/Config/Build.pm @@ -1,5 +1,5 @@ #################################################################################################################################### -# Build Makefile and Auto-Generate Files Required for Build +# Auto-Generate Command and Option Configuration Enums, Constants and Data #################################################################################################################################### package pgBackRestBuild::Config::Build; @@ -17,163 +17,28 @@ use Storable qw(dclone); use pgBackRest::Common::Log; use pgBackRest::Common::String; use pgBackRest::Config::Data; -use pgBackRest::Config::Rule; +use pgBackRest::Config::Define; use pgBackRest::Version; use pgBackRestBuild::Build::Common; -use pgBackRestBuild::CodeGen::Common; -use pgBackRestBuild::CodeGen::Lookup; -use pgBackRestBuild::CodeGen::Switch; -use pgBackRestBuild::Config::Rule; +use pgBackRestBuild::Config::BuildDefine; #################################################################################################################################### # Constants #################################################################################################################################### use constant BLDLCL_FILE_CONFIG => 'config'; -use constant BLDLCL_FILE_CONFIG_RULE => BLDLCL_FILE_CONFIG . 'Rule'; -use constant BLDLCL_PARAM_OPTIONID => 'optionId'; -use constant BLDLCL_PARAM_COMMANDID => 'commandId'; - push @EXPORT, qw(BLDLCL_PARAM_COMMANDID); -use constant BLDLCL_PARAM_VALUEID => 'valueId'; +use constant BLDLCL_DATA_COMMAND => '01-command'; +use constant BLDLCL_DATA_OPTION => '02-option'; -use constant BLDLCL_CONSTANT_COMMAND => 'CFGCMDDEF'; -use constant BLDLCL_CONSTANT_COMMAND_TOTAL => BLDLCL_CONSTANT_COMMAND . '_TOTAL'; - -use constant BLDLCL_CONSTANT_OPTION => 'CFGOPTDEF'; -use constant BLDLCL_CONSTANT_OPTION_TOTAL => BLDLCL_CONSTANT_OPTION . '_TOTAL'; -use constant BLDLCL_CONSTANT_OPTION_TYPE => BLDLCL_CONSTANT_OPTION . '_TYPE'; - -use constant BLDLCL_PREFIX_COMMAND => 'cfgCommand'; - -use constant BLDLCL_FUNCTION_COMMAND_NAME => BLDLCL_PREFIX_COMMAND . 'Name'; -use constant BLDLCL_FUNCTION_COMMAND_ID => BLDLCL_PREFIX_COMMAND . 'Id'; - -use constant BLDLCL_PREFIX_OPTION => 'cfgOption'; - -use constant BLDLCL_FUNCTION_INDEX_TOTAL => BLDLCL_PREFIX_OPTION . 'IndexTotal'; -use constant BLDLCL_FUNCTION_OPTION_NAME => BLDLCL_PREFIX_OPTION . 'Name'; -use constant BLDLCL_FUNCTION_OPTION_ID => BLDLCL_PREFIX_OPTION . 'Id'; - -use constant BLDLCL_PREFIX_RULE_OPTION => 'cfgRuleOption'; - -use constant BLDLCL_FUNCTION_ALLOW_LIST => BLDLCL_PREFIX_RULE_OPTION . 'AllowList'; -use constant BLDLCL_FUNCTION_ALLOW_LIST_VALUE => BLDLCL_FUNCTION_ALLOW_LIST . 'Value'; -use constant BLDLCL_FUNCTION_ALLOW_LIST_VALUE_TOTAL => BLDLCL_FUNCTION_ALLOW_LIST_VALUE . 'Total'; - -use constant BLDLCL_FUNCTION_ALLOW_RANGE => BLDLCL_PREFIX_RULE_OPTION . 'AllowRange'; -use constant BLDLCL_FUNCTION_ALLOW_RANGE_MAX => BLDLCL_FUNCTION_ALLOW_RANGE . 'Max'; -use constant BLDLCL_FUNCTION_ALLOW_RANGE_MIN => BLDLCL_FUNCTION_ALLOW_RANGE . 'Min'; - -use constant BLDLCL_FUNCTION_DEFAULT => BLDLCL_PREFIX_RULE_OPTION . "Default"; - -use constant BLDLCL_FUNCTION_DEPEND => BLDLCL_PREFIX_RULE_OPTION . 'Depend'; -use constant BLDLCL_FUNCTION_DEPEND_OPTION => BLDLCL_FUNCTION_DEPEND . 'Option'; -use constant BLDLCL_FUNCTION_DEPEND_VALUE => BLDLCL_FUNCTION_DEPEND . 'Value'; -use constant BLDLCL_FUNCTION_DEPEND_VALUE_TOTAL => BLDLCL_FUNCTION_DEPEND_VALUE . 'Total'; - -use constant BLDLCL_FUNCTION_NAME_ALT => BLDLCL_PREFIX_RULE_OPTION . 'NameAlt'; -use constant BLDLCL_FUNCTION_NEGATE => BLDLCL_PREFIX_RULE_OPTION . 'Negate'; -use constant BLDLCL_FUNCTION_PREFIX => BLDLCL_PREFIX_RULE_OPTION . 'Prefix'; -use constant BLDLCL_FUNCTION_REQUIRED => BLDLCL_PREFIX_RULE_OPTION . 'Required'; -use constant BLDLCL_FUNCTION_SECTION => BLDLCL_PREFIX_RULE_OPTION . 'Section'; -use constant BLDLCL_FUNCTION_SECURE => BLDLCL_PREFIX_RULE_OPTION . 'Secure'; -use constant BLDLCL_FUNCTION_TYPE => BLDLCL_PREFIX_RULE_OPTION . 'Type'; -use constant BLDLCL_FUNCTION_VALID => BLDLCL_PREFIX_RULE_OPTION . 'Valid'; +use constant BLDLCL_ENUM_COMMAND => '01-enumCommand'; +use constant BLDLCL_ENUM_OPTION => '02-enumOption'; #################################################################################################################################### -# Build command constant maps -#################################################################################################################################### -my $rhCommandIdConstantMap; -my $rhCommandNameConstantMap; -my $rhCommandNameIdMap; -my $iCommandTotal = 0; - -foreach my $strCommand (sort(keys(%{cfgbldCommandGet()}))) -{ - my $strCommandConstant = "CFGCMD_" . uc($strCommand); - $strCommandConstant =~ s/\-/\_/g; - - $rhCommandIdConstantMap->{$iCommandTotal} = $strCommandConstant; - $rhCommandNameConstantMap->{$strCommand} = $strCommandConstant; - $rhCommandNameIdMap->{$strCommand} = $iCommandTotal; - - $iCommandTotal++; -}; - -#################################################################################################################################### -# Build option constant maps -#################################################################################################################################### -my $rhOptionIdConstantMap; -my $rhOptionNameConstantMap; -my $rhOptionNameIdMap; -my $iOptionTotal = 0; -my $rhOptionRule = cfgdefRuleIndex(); -my @stryOptionAlt; - -foreach my $strOption (sort(keys(%{$rhOptionRule}))) -{ - my $rhOption = $rhOptionRule->{$strOption}; - my $strOptionConstant = "CFGOPT_" . uc($strOption); - $strOptionConstant =~ s/\-/\_/g; - - $rhOptionIdConstantMap->{$iOptionTotal} = $strOptionConstant; - $rhOptionNameConstantMap->{$strOption} = $strOptionConstant; - $rhOptionNameIdMap->{$strOption} = $iOptionTotal; - - # Create constants for the db- alt names - my $strOptionAlt = $rhOption->{&CFGBLDDEF_RULE_ALT_NAME}; - - if (defined($strOptionAlt) && $strOptionAlt =~ /^db-/) - { - $strOptionConstant = "CFGOPT_" . uc($strOptionAlt); - $strOptionConstant =~ s/\-/\_/g; - - $rhOptionNameConstantMap->{$strOptionAlt} = $strOptionConstant; - $rhOptionNameIdMap->{$strOptionAlt} = $iOptionTotal; - - push(@stryOptionAlt, $strOptionAlt); - } - - $iOptionTotal++; -}; - -#################################################################################################################################### -# Build option type constant maps -#################################################################################################################################### -my $rhOptionTypeIdConstantMap; -my $rhOptionTypeNameConstantMap; -my $rhOptionTypeNameIdMap; -my $iOptionTypeTotal = 0; - -foreach my $strOption (sort(keys(%{$rhOptionRule}))) -{ - my $strOptionType = $rhOptionRule->{$strOption}{&CFGBLDDEF_RULE_TYPE}; - - if (!defined($rhOptionTypeNameConstantMap->{$strOptionType})) - { - my $strOptionTypeConstant = BLDLCL_CONSTANT_OPTION_TYPE . '_' . uc($strOptionType); - $strOptionTypeConstant =~ s/\-/\_/g; - - $rhOptionTypeIdConstantMap->{$iOptionTypeTotal} = $strOptionTypeConstant; - $rhOptionTypeNameConstantMap->{$strOptionType} = $strOptionTypeConstant; - $rhOptionTypeNameIdMap->{$strOptionType} = $iOptionTypeTotal; - - $iOptionTypeTotal++; - } -}; - -#################################################################################################################################### -# Definitions for functions to build +# Definitions for constants and data to build #################################################################################################################################### my $rhBuild = { - &BLD_PARAM_LABEL => - { - &BLDLCL_PARAM_OPTIONID => $rhOptionIdConstantMap, - &BLDLCL_PARAM_COMMANDID => $rhCommandIdConstantMap, - }, - &BLD_FILE => { #--------------------------------------------------------------------------------------------------------------------------- @@ -181,252 +46,33 @@ my $rhBuild = { &BLD_SUMMARY => 'Command and Option Configuration', - &BLD_CONSTANT_GROUP => + &BLD_ENUM => { - &BLDLCL_CONSTANT_COMMAND => + &BLDLCL_ENUM_COMMAND => { &BLD_SUMMARY => 'Command', - - &BLD_CONSTANT => - { - &BLDLCL_CONSTANT_COMMAND_TOTAL => - { - &BLD_CONSTANT_VALUE => $iCommandTotal, - }, - }, + &BLD_NAME => 'ConfigCommand', + &BLD_LIST => [], }, - &BLDLCL_CONSTANT_OPTION => + &BLDLCL_ENUM_OPTION => { &BLD_SUMMARY => 'Option', - - &BLD_CONSTANT => - { - &BLDLCL_CONSTANT_OPTION_TOTAL => - { - &BLD_CONSTANT_VALUE => $iOptionTotal, - }, - }, - }, - - &BLDLCL_CONSTANT_OPTION_TYPE => - { - &BLD_SUMMARY => 'Option type', - &BLD_CONSTANT => {}, + &BLD_NAME => 'ConfigOption', + &BLD_LIST => [], }, }, - &BLD_FUNCTION => + &BLD_DATA => { - &BLDLCL_FUNCTION_COMMAND_NAME => + &BLDLCL_DATA_COMMAND => { - &BLD_SUMMARY => 'lookup command name using command id', + &BLD_SUMMARY => 'Command data', }, - &BLDLCL_FUNCTION_INDEX_TOTAL => + &BLDLCL_DATA_OPTION => { - &BLD_SUMMARY => 'total index values allowed', - &BLD_RETURN_TYPE => CGEN_DATATYPE_INT, - &BLD_PARAM => [BLDLCL_PARAM_OPTIONID], - &BLD_TRUTH_DEFAULT => 1, - &BLD_FUNCTION_DEPEND => BLDLCL_FUNCTION_VALID, - &BLD_FUNCTION_DEPEND_RESULT => true, - }, - - &BLDLCL_FUNCTION_OPTION_NAME => - { - &BLD_SUMMARY => 'lookup option name using option id', - }, - }, - }, - - #--------------------------------------------------------------------------------------------------------------------------- - &BLDLCL_FILE_CONFIG_RULE => - { - &BLD_SUMMARY => 'Command and Option Configuration Rules', - - &BLD_FUNCTION => - { - &BLDLCL_FUNCTION_COMMAND_ID => - { - &BLD_SUMMARY => 'lookup command id using command name', - }, - - &BLDLCL_FUNCTION_ALLOW_LIST => - { - &BLD_SUMMARY => 'is there an allow list for this option?', - &BLD_RETURN_TYPE => CGEN_DATATYPE_BOOL, - &BLD_PARAM => [BLDLCL_PARAM_COMMANDID, BLDLCL_PARAM_OPTIONID], - &BLD_TRUTH_DEFAULT => false, - &BLD_FUNCTION_DEPEND => BLDLCL_FUNCTION_VALID, - &BLD_FUNCTION_DEPEND_RESULT => true, - }, - - &BLDLCL_FUNCTION_ALLOW_LIST_VALUE => - { - &BLD_SUMMARY => 'get value from allowed list', - &BLD_RETURN_TYPE => CGEN_DATATYPE_CONSTCHAR, - &BLD_PARAM => [BLDLCL_PARAM_COMMANDID, BLDLCL_PARAM_OPTIONID, BLDLCL_PARAM_VALUEID], - &BLD_FUNCTION_DEPEND => BLDLCL_FUNCTION_ALLOW_LIST, - &BLD_FUNCTION_DEPEND_RESULT => true, - }, - - &BLDLCL_FUNCTION_ALLOW_LIST_VALUE_TOTAL => - { - &BLD_SUMMARY => 'total number of values allowed', - &BLD_RETURN_TYPE => CGEN_DATATYPE_INT, - &BLD_PARAM => [BLDLCL_PARAM_COMMANDID, BLDLCL_PARAM_OPTIONID], - &BLD_FUNCTION_DEPEND => BLDLCL_FUNCTION_ALLOW_LIST, - &BLD_FUNCTION_DEPEND_RESULT => true, - }, - - &BLDLCL_FUNCTION_ALLOW_RANGE => - { - &BLD_SUMMARY => 'is the option constrained to a range?', - &BLD_RETURN_TYPE => CGEN_DATATYPE_BOOL, - &BLD_PARAM => [BLDLCL_PARAM_COMMANDID, BLDLCL_PARAM_OPTIONID], - &BLD_TRUTH_DEFAULT => false, - &BLD_FUNCTION_DEPEND => BLDLCL_FUNCTION_VALID, - &BLD_FUNCTION_DEPEND_RESULT => true, - }, - - &BLDLCL_FUNCTION_ALLOW_RANGE_MIN => - { - &BLD_SUMMARY => 'minimum value allowed (if the option is constrained to a range)', - &BLD_RETURN_TYPE => CGEN_DATATYPE_DOUBLE, - &BLD_PARAM => [BLDLCL_PARAM_COMMANDID, BLDLCL_PARAM_OPTIONID], - &BLD_FUNCTION_DEPEND => BLDLCL_FUNCTION_ALLOW_RANGE, - &BLD_FUNCTION_DEPEND_RESULT => true, - }, - - &BLDLCL_FUNCTION_ALLOW_RANGE_MAX => - { - &BLD_SUMMARY => 'maximum value allowed (if the option is constrained to a range)', - &BLD_RETURN_TYPE => CGEN_DATATYPE_DOUBLE, - &BLD_PARAM => [BLDLCL_PARAM_COMMANDID, BLDLCL_PARAM_OPTIONID], - &BLD_FUNCTION_DEPEND => BLDLCL_FUNCTION_ALLOW_RANGE, - &BLD_FUNCTION_DEPEND_RESULT => true, - }, - - &BLDLCL_FUNCTION_DEFAULT => - { - &BLD_SUMMARY => 'default value', - &BLD_RETURN_TYPE => CGEN_DATATYPE_CONSTCHAR, - &BLD_PARAM => [BLDLCL_PARAM_COMMANDID, BLDLCL_PARAM_OPTIONID], - &BLD_TRUTH_DEFAULT => undef, - &BLD_FUNCTION_DEPEND => BLDLCL_FUNCTION_VALID, - &BLD_FUNCTION_DEPEND_RESULT => true, - }, - - &BLDLCL_FUNCTION_DEPEND => - { - &BLD_SUMMARY => 'does the option have a dependency on another option?', - &BLD_RETURN_TYPE => CGEN_DATATYPE_BOOL, - &BLD_PARAM => [BLDLCL_PARAM_COMMANDID, BLDLCL_PARAM_OPTIONID], - &BLD_TRUTH_DEFAULT => false, - &BLD_FUNCTION_DEPEND => BLDLCL_FUNCTION_VALID, - &BLD_FUNCTION_DEPEND_RESULT => true, - }, - - &BLDLCL_FUNCTION_DEPEND_OPTION => - { - &BLD_SUMMARY => 'name of the option that this option depends in order to be set', - &BLD_RETURN_TYPE => CGEN_DATATYPE_INT, - &BLD_PARAM => [BLDLCL_PARAM_COMMANDID, BLDLCL_PARAM_OPTIONID], - &BLD_RETURN_VALUE_MAP => $rhOptionIdConstantMap, - &BLD_FUNCTION_DEPEND => BLDLCL_FUNCTION_DEPEND, - &BLD_FUNCTION_DEPEND_RESULT => true, - }, - - &BLDLCL_FUNCTION_DEPEND_VALUE => - { - &BLD_SUMMARY => 'the depend option must have one of these values before this option is set', - &BLD_RETURN_TYPE => CGEN_DATATYPE_CONSTCHAR, - &BLD_PARAM => [BLDLCL_PARAM_COMMANDID, BLDLCL_PARAM_OPTIONID, BLDLCL_PARAM_VALUEID], - &BLD_FUNCTION_DEPEND => BLDLCL_FUNCTION_DEPEND, - &BLD_FUNCTION_DEPEND_RESULT => true, - }, - - &BLDLCL_FUNCTION_DEPEND_VALUE_TOTAL => - { - &BLD_SUMMARY => 'total depend values for this option', - &BLD_RETURN_TYPE => CGEN_DATATYPE_INT, - &BLD_PARAM => [BLDLCL_PARAM_COMMANDID, BLDLCL_PARAM_OPTIONID], - &BLD_FUNCTION_DEPEND => BLDLCL_FUNCTION_DEPEND, - &BLD_FUNCTION_DEPEND_RESULT => true, - }, - - &BLDLCL_FUNCTION_OPTION_ID => - { - &BLD_SUMMARY => 'lookup option id using option name', - }, - - &BLDLCL_FUNCTION_NAME_ALT => - { - &BLD_SUMMARY => 'alternate name for the option primarily used for deprecated names', - &BLD_RETURN_TYPE => CGEN_DATATYPE_CONSTCHAR, - &BLD_PARAM => [BLDLCL_PARAM_OPTIONID], - &BLD_TRUTH_DEFAULT => undef, - &BLD_FUNCTION_DEPEND => BLDLCL_FUNCTION_VALID, - &BLD_FUNCTION_DEPEND_RESULT => true, - }, - - &BLDLCL_FUNCTION_NEGATE => - { - &BLD_SUMMARY => 'can the boolean option be negated?', - &BLD_RETURN_TYPE => CGEN_DATATYPE_BOOL, - &BLD_PARAM => [BLDLCL_PARAM_OPTIONID], - &BLD_TRUTH_DEFAULT => false, - }, - - &BLDLCL_FUNCTION_PREFIX => - { - &BLD_SUMMARY => 'prefix when the option has an index > 1 (e.g. "db")', - &BLD_RETURN_TYPE => CGEN_DATATYPE_CONSTCHAR, - &BLD_PARAM => [BLDLCL_PARAM_OPTIONID], - &BLD_TRUTH_DEFAULT => undef, - }, - - &BLDLCL_FUNCTION_REQUIRED => - { - &BLD_SUMMARY => 'is the option required?', - &BLD_RETURN_TYPE => CGEN_DATATYPE_BOOL, - &BLD_PARAM => [BLDLCL_PARAM_COMMANDID, BLDLCL_PARAM_OPTIONID], - &BLD_TRUTH_DEFAULT => false, - &BLD_FUNCTION_DEPEND => BLDLCL_FUNCTION_VALID, - &BLD_FUNCTION_DEPEND_RESULT => true, - }, - - &BLDLCL_FUNCTION_SECTION => - { - &BLD_SUMMARY => 'section that the option belongs in, NULL means command-line only', - &BLD_RETURN_TYPE => CGEN_DATATYPE_CONSTCHAR, - &BLD_PARAM => [BLDLCL_PARAM_OPTIONID], - &BLD_TRUTH_DEFAULT => undef, - }, - - &BLDLCL_FUNCTION_SECURE => - { - &BLD_SUMMARY => 'secure options can never be passed on the commmand-line', - &BLD_RETURN_TYPE => CGEN_DATATYPE_BOOL, - &BLD_PARAM => [BLDLCL_PARAM_OPTIONID], - &BLD_TRUTH_DEFAULT => false, - }, - - &BLDLCL_FUNCTION_TYPE => - { - &BLD_SUMMARY => 'secure options can never be passed on the commmand-line', - &BLD_RETURN_TYPE => CGEN_DATATYPE_INT, - &BLD_PARAM => [BLDLCL_PARAM_OPTIONID], - &BLD_RETURN_VALUE_MAP => $rhOptionTypeIdConstantMap, - }, - - &BLDLCL_FUNCTION_VALID => - { - &BLD_SUMMARY => 'is the option valid for this command?', - &BLD_RETURN_TYPE => CGEN_DATATYPE_BOOL, - &BLD_PARAM => [BLDLCL_PARAM_COMMANDID, BLDLCL_PARAM_OPTIONID], - &BLD_TRUTH_DEFAULT => false, + &BLD_SUMMARY => 'Option data', }, }, }, @@ -434,197 +80,101 @@ my $rhBuild = }; #################################################################################################################################### -# functionMatrix - add a param/value array to the function matrix +# Generate enum names #################################################################################################################################### -sub functionMatrix +sub buildConfigCommandEnum { - my $strFunction = shift; - my $rxyParam = shift; - my $strValue = shift; - - # Find the function in a file - my $rhMatrix; - - foreach my $strFileMatch (sort(keys(%{$rhBuild->{&BLD_FILE}}))) - { - foreach my $strFunctionMatch (sort(keys(%{$rhBuild->{&BLD_FILE}{$strFileMatch}{&BLD_FUNCTION}}))) - { - if ($strFunctionMatch eq $strFunction) - { - my $rhFunction = $rhBuild->{&BLD_FILE}{$strFileMatch}{&BLD_FUNCTION}{$strFunctionMatch}; - - if (!defined($rhFunction->{&BLD_MATRIX})) - { - $rhFunction->{&BLD_MATRIX} = []; - } - - $rhMatrix = $rhFunction->{&BLD_MATRIX}; - } - } - } - - # Error if function is not found - if (!defined($rhMatrix)) - { - confess &log(ASSERT, "function '${strFunction}' not found in build hash"); - } - - push(@{$rhMatrix}, [@{$rxyParam}, $strValue]); + return bldEnum('cfgCmd', shift) } +push @EXPORT, qw(buildConfigCommandEnum); + +sub buildConfigOptionEnum +{ + return bldEnum('cfgOpt', shift) +} + +push @EXPORT, qw(buildConfigOptionEnum); + #################################################################################################################################### -# Build configuration functions and constants +# Build constants and data #################################################################################################################################### sub buildConfig { - # Build constants + # Build command constants and data #------------------------------------------------------------------------------------------------------------------------------- - # Add command constants - my $rhConstant = $rhBuild->{&BLD_FILE}{&BLDLCL_FILE_CONFIG}{&BLD_CONSTANT_GROUP}{&BLDLCL_CONSTANT_COMMAND}{&BLD_CONSTANT}; + my $rhEnum = $rhBuild->{&BLD_FILE}{&BLDLCL_FILE_CONFIG}{&BLD_ENUM}{&BLDLCL_ENUM_COMMAND}; - foreach my $strCommand (sort(keys(%{$rhCommandNameConstantMap}))) + my $strBuildSource = + "ConfigCommandData configCommandData[] = CONFIG_COMMAND_LIST\n" . + "("; + + foreach my $strCommand (cfgDefineCommandList()) { - my $strConstant = $rhCommandNameConstantMap->{$strCommand}; - my $strConstantValue = $rhCommandNameIdMap->{$strCommand}; + # Build C enum + my $strCommandEnum = buildConfigCommandEnum($strCommand); + push(@{$rhEnum->{&BLD_LIST}}, $strCommandEnum); - $rhConstant->{$strConstant}{&BLD_CONSTANT_VALUE} = $strConstantValue; - $rhConstant->{$strConstant}{&BLD_CONSTANT_EXPORT} = true; + # Build command data + $strBuildSource .= + "\n" . + " CONFIG_COMMAND\n" . + " (\n" . + " CONFIG_COMMAND_NAME(\"${strCommand}\")\n" . + " )\n"; } - # Add option type constants - $rhConstant = $rhBuild->{&BLD_FILE}{&BLDLCL_FILE_CONFIG}{&BLD_CONSTANT_GROUP}{&BLDLCL_CONSTANT_OPTION_TYPE}{&BLD_CONSTANT}; + $strBuildSource .= + ")\n"; - foreach my $strOptionType (sort(keys(%{$rhOptionTypeNameConstantMap}))) - { - my $strConstant = $rhOptionTypeNameConstantMap->{$strOptionType}; - my $strConstantValue = $rhOptionTypeNameIdMap->{$strOptionType}; + $rhBuild->{&BLD_FILE}{&BLDLCL_FILE_CONFIG}{&BLD_DATA}{&BLDLCL_DATA_COMMAND}{&BLD_SOURCE} = $strBuildSource; - $rhConstant->{$strConstant}{&BLD_CONSTANT_VALUE} = $strConstantValue; - $rhConstant->{$strConstant}{&BLD_CONSTANT_EXPORT} = true; - } - - # Add option constants - $rhConstant = $rhBuild->{&BLD_FILE}{&BLDLCL_FILE_CONFIG}{&BLD_CONSTANT_GROUP}{&BLDLCL_CONSTANT_OPTION}{&BLD_CONSTANT}; - - foreach my $strOption (sort(keys(%{$rhOptionNameConstantMap}))) - { - my $strConstant = $rhOptionNameConstantMap->{$strOption}; - my $strConstantValue = $rhOptionNameIdMap->{$strOption}; - - $rhConstant->{$strConstant}{&BLD_CONSTANT_VALUE} = $strConstantValue; - $rhConstant->{$strConstant}{&BLD_CONSTANT_EXPORT} = true; - } - - # Build config rule maps used to create functions + # Build option constants and data #------------------------------------------------------------------------------------------------------------------------------- - foreach my $strOption (sort(keys(%{$rhOptionRule}))) - { - my $iOptionId = $rhOptionNameIdMap->{$strOption}; + my $rhConfigDefine = cfgDefine(); + $rhEnum = $rhBuild->{&BLD_FILE}{&BLDLCL_FILE_CONFIG}{&BLD_ENUM}{&BLDLCL_ENUM_OPTION}; + my $iOptionTotal = 0; - foreach my $strCommand (sort(keys(%{cfgbldCommandGet()}))) + $strBuildSource = + "ConfigOptionData configOptionData[] = CONFIG_OPTION_LIST\n" . + "("; + + foreach my $strOption (sort(keys(%{$rhConfigDefine}))) + { + my $iOptionIndexTotal = $rhConfigDefine->{$strOption}{&CFGDEF_INDEX_TOTAL}; + my $strOptionPrefix = $rhConfigDefine->{$strOption}{&CFGDEF_PREFIX}; + + # Build C enum + my $strOptionEnum = buildConfigOptionEnum($strOption); + push(@{$rhEnum->{&BLD_LIST}}, $strOptionEnum); + $rhEnum->{&BLD_VALUE}{$strOptionEnum} = $iOptionTotal; + + # Builds option data + for (my $iOptionIndex = 1; $iOptionIndex <= $iOptionIndexTotal; $iOptionIndex++) { - my $iCommandId = $rhCommandNameIdMap->{$strCommand}; + # Create the indexed version of the option name + my $strOptionIndex = $iOptionIndexTotal > 1 ? + "${strOptionPrefix}${iOptionIndex}-" . substr($strOption, length($strOptionPrefix) + 1) : $strOption; - functionMatrix(BLDLCL_FUNCTION_VALID, [$iCommandId, $iOptionId], cfgRuleOptionValid($strCommand, $strOption)); - - if (cfgRuleOptionValid($strCommand, $strOption)) - { - functionMatrix(BLDLCL_FUNCTION_DEFAULT, [$iCommandId, $iOptionId], cfgRuleOptionDefault($strCommand, $strOption)); - functionMatrix(BLDLCL_FUNCTION_REQUIRED, [$iCommandId, $iOptionId], cfgRuleOptionRequired($strCommand, $strOption)); - - # Option dependencies - functionMatrix(BLDLCL_FUNCTION_DEPEND, [$iCommandId, $iOptionId], cfgRuleOptionDepend($strCommand, $strOption)); - - if (cfgRuleOptionDepend($strCommand, $strOption)) - { - functionMatrix( - BLDLCL_FUNCTION_DEPEND_OPTION, [$iCommandId, $iOptionId], - $rhOptionNameIdMap->{cfgRuleOptionDependOption($strCommand, $strOption)}); - - functionMatrix( - BLDLCL_FUNCTION_DEPEND_VALUE_TOTAL, [$iCommandId, $iOptionId], - cfgRuleOptionDependValueTotal($strCommand, $strOption)); - - for (my $iValueIdx = 0; $iValueIdx < cfgRuleOptionDependValueTotal($strCommand, $strOption); $iValueIdx++) - { - functionMatrix( - BLDLCL_FUNCTION_DEPEND_VALUE, [$iCommandId, $iOptionId, $iValueIdx], - cfgRuleOptionDependValue($strCommand, $strOption, $iValueIdx)); - } - } - - # Allow range - functionMatrix( - BLDLCL_FUNCTION_ALLOW_RANGE, [$iCommandId, $iOptionId], cfgRuleOptionAllowRange($strCommand, $strOption)); - - if (cfgRuleOptionAllowRange($strCommand, $strOption)) - { - functionMatrix( - BLDLCL_FUNCTION_ALLOW_RANGE_MIN, [$iCommandId, $iOptionId], - cfgRuleOptionAllowRangeMin($strCommand, $strOption)); - functionMatrix( - BLDLCL_FUNCTION_ALLOW_RANGE_MAX, [$iCommandId, $iOptionId], - cfgRuleOptionAllowRangeMax($strCommand, $strOption)); - } - - # Allow list - functionMatrix( - BLDLCL_FUNCTION_ALLOW_LIST, [$iCommandId, $iOptionId], cfgRuleOptionAllowList($strCommand, $strOption)); - - if (cfgRuleOptionAllowList($strCommand, $strOption)) - { - functionMatrix( - BLDLCL_FUNCTION_ALLOW_LIST_VALUE_TOTAL, [$iCommandId, $iOptionId], - cfgRuleOptionAllowListValueTotal($strCommand, $strOption)); - - for (my $iValueIdx = 0; $iValueIdx < cfgRuleOptionAllowListValueTotal($strCommand, $strOption); $iValueIdx++) - { - functionMatrix( - BLDLCL_FUNCTION_ALLOW_LIST_VALUE, [$iCommandId, $iOptionId, $iValueIdx], - cfgRuleOptionAllowListValue($strCommand, $strOption, $iValueIdx)); - } - } - } + # Add option data + $strBuildSource .= + "\n" . + " //" . (qw{-} x 126) . "\n" . + " CONFIG_OPTION\n" . + " (\n" . + " CONFIG_OPTION_NAME(\"${strOptionIndex}\")\n" . + " CONFIG_OPTION_INDEX(" . ($iOptionIndex - 1) . ")\n" . + " CONFIG_OPTION_DEFINE_ID(" . buildConfigDefineOptionEnum($strOption) . ")\n" . + " )\n"; } - functionMatrix(BLDLCL_FUNCTION_INDEX_TOTAL, [$iOptionId], cfgOptionIndexTotal($strOption)); - functionMatrix(BLDLCL_FUNCTION_NEGATE, [$iOptionId], cfgRuleOptionNegate($strOption)); - functionMatrix(BLDLCL_FUNCTION_NAME_ALT, [$iOptionId], cfgRuleOptionNameAlt($strOption)); - functionMatrix(BLDLCL_FUNCTION_PREFIX, [$iOptionId], cfgRuleOptionPrefix($strOption)); - functionMatrix(BLDLCL_FUNCTION_SECTION, [$iOptionId], cfgRuleOptionSection($strOption)); - functionMatrix(BLDLCL_FUNCTION_SECURE, [$iOptionId], cfgRuleOptionSecure($strOption)); - functionMatrix(BLDLCL_FUNCTION_TYPE, [$iOptionId], $rhOptionTypeNameIdMap->{cfgRuleOptionType($strOption)}); + $iOptionTotal += $iOptionIndexTotal; } - # Build lookup functions that are not implemented with switch statements - #------------------------------------------------------------------------------------------------------------------------------- - $rhBuild->{&BLD_FILE}{&BLDLCL_FILE_CONFIG}{&BLD_FUNCTION}{&BLDLCL_FUNCTION_COMMAND_NAME}{&BLD_SOURCE} = cgenLookupString( - 'Command', BLDLCL_CONSTANT_COMMAND_TOTAL, $rhCommandNameConstantMap); - $rhBuild->{&BLD_FILE}{&BLDLCL_FILE_CONFIG}{&BLD_FUNCTION}{&BLDLCL_FUNCTION_OPTION_NAME}{&BLD_SOURCE} = cgenLookupString( - 'Option', BLDLCL_CONSTANT_OPTION_TOTAL, $rhOptionNameConstantMap, '^(' . join('|', @stryOptionAlt) . ')$'); + $strBuildSource .= + ")\n"; - $rhBuild->{&BLD_FILE}{&BLDLCL_FILE_CONFIG_RULE}{&BLD_FUNCTION}{&BLDLCL_FUNCTION_COMMAND_ID}{&BLD_SOURCE} = cgenLookupId( - 'Command', BLDLCL_CONSTANT_COMMAND_TOTAL); - $rhBuild->{&BLD_FILE}{&BLDLCL_FILE_CONFIG_RULE}{&BLD_FUNCTION}{&BLDLCL_FUNCTION_OPTION_ID}{&BLD_SOURCE} = cgenLookupId( - 'Option', BLDLCL_CONSTANT_OPTION_TOTAL); - - # Build switch functions for all files - #------------------------------------------------------------------------------------------------------------------------------- - foreach my $strFile (sort(keys(%{$rhBuild->{&BLD_FILE}}))) - { - my $rhFileFunction = $rhBuild->{&BLD_FILE}{$strFile}{&BLD_FUNCTION}; - - foreach my $strFunction (sort(keys(%{$rhFileFunction}))) - { - my $rhFunction = $rhFileFunction->{$strFunction}; - - next if !defined($rhFunction->{&BLD_MATRIX}); - - $rhFunction->{&BLD_SOURCE} = cgenSwitchBuild( - $strFunction, $rhFunction->{&BLD_RETURN_TYPE}, $rhFunction->{&BLD_MATRIX}, $rhFunction->{&BLD_PARAM}, - $rhBuild->{&BLD_PARAM_LABEL}, $rhFunction->{&BLD_RETURN_VALUE_MAP}); - } - } + $rhBuild->{&BLD_FILE}{&BLDLCL_FILE_CONFIG}{&BLD_DATA}{&BLDLCL_DATA_OPTION}{&BLD_SOURCE} = $strBuildSource; return $rhBuild; } diff --git a/build/lib/pgBackRestBuild/Config/BuildDefine.pm b/build/lib/pgBackRestBuild/Config/BuildDefine.pm new file mode 100644 index 000000000..c83589104 --- /dev/null +++ b/build/lib/pgBackRestBuild/Config/BuildDefine.pm @@ -0,0 +1,391 @@ +#################################################################################################################################### +# Auto-Generate Command and Option Configuration Definition Enums, Constants and Data +#################################################################################################################################### +package pgBackRestBuild::Config::BuildDefine; + +use strict; +use warnings FATAL => qw(all); +use Carp qw(confess); +use English '-no_match_vars'; + +use Cwd qw(abs_path); +use Exporter qw(import); + our @EXPORT = qw(); +use File::Basename qw(dirname); +use Storable qw(dclone); + +use pgBackRest::Common::Log; +use pgBackRest::Common::String; +use pgBackRest::Config::Data; +use pgBackRest::Config::Define; +use pgBackRest::Version; + +use pgBackRestBuild::Build::Common; + +#################################################################################################################################### +# Constants +#################################################################################################################################### +use constant BLDLCL_FILE_DEFINE => 'define'; + +use constant BLDLCL_DATA_COMMAND => '01-dataCommand'; +use constant BLDLCL_DATA_OPTION => '02-dataOption'; + +use constant BLDLCL_ENUM_COMMAND => '01-enumCommand'; +use constant BLDLCL_ENUM_OPTION_TYPE => '02-enumOptionType'; +use constant BLDLCL_ENUM_OPTION => '03-enumOption'; + +#################################################################################################################################### +# Definitions for constants and data to build +#################################################################################################################################### +my $strSummary = 'Command and Option Definition'; + +my $rhBuild = +{ + &BLD_FILE => + { + &BLDLCL_FILE_DEFINE => + { + &BLD_SUMMARY => $strSummary, + + &BLD_ENUM => + { + &BLDLCL_ENUM_COMMAND => + { + &BLD_SUMMARY => 'Command define', + &BLD_NAME => 'ConfigDefineCommand', + }, + + &BLDLCL_ENUM_OPTION_TYPE => + { + &BLD_SUMMARY => 'Option type define', + &BLD_NAME => 'ConfigDefineOptionType', + }, + + &BLDLCL_ENUM_OPTION => + { + &BLD_SUMMARY => 'Option define', + &BLD_NAME => 'ConfigDefineOption', + }, + }, + + &BLD_DATA => + { + &BLDLCL_DATA_COMMAND => + { + &BLD_SUMMARY => 'Command define data', + }, + + &BLDLCL_DATA_OPTION => + { + &BLD_SUMMARY => 'Option define data', + }, + }, + }, + }, +}; + +#################################################################################################################################### +# Generate enum names +#################################################################################################################################### +sub buildConfigDefineCommandEnum +{ + return bldEnum('cfgDefCmd', shift) +} + +push @EXPORT, qw(buildConfigDefineCommandEnum); + +sub buildConfigDefineOptionTypeEnum +{ + return bldEnum('cfgDefOptType', shift); +} + +push @EXPORT, qw(buildConfigDefineOptionTypeEnum); + +sub buildConfigDefineOptionEnum +{ + return bldEnum('cfgDefOpt', shift); +} + +push @EXPORT, qw(buildConfigDefineOptionEnum); + +#################################################################################################################################### +# Helper functions for building optional option data +#################################################################################################################################### +sub renderAllowList +{ + my $ryAllowList = shift; + my $bCommandIndent = shift; + + my $strIndent = $bCommandIndent ? ' ' : ''; + + return + "${strIndent} CFGDEFDATA_OPTION_OPTIONAL_ALLOW_LIST\n" . + "${strIndent} (\n" . + "${strIndent} " . join(",\n${strIndent} ", bldQuoteList($ryAllowList)) . + "\n" . + "${strIndent} )\n"; +} + +sub renderDepend +{ + my $rhDepend = shift; + my $bCommandIndent = shift; + + my $strIndent = $bCommandIndent ? ' ' : ''; + + my $strDependOption = $rhDepend->{&CFGDEF_DEPEND_OPTION}; + my $ryDependList = $rhDepend->{&CFGDEF_DEPEND_LIST}; + + if (defined($ryDependList)) + { + my @stryQuoteList; + + foreach my $strItem (@{$ryDependList}) + { + push(@stryQuoteList, "\"${strItem}\""); + } + + return + "${strIndent} CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST\n" . + "${strIndent} (\n" . + "${strIndent} " . buildConfigDefineOptionEnum($strDependOption) . ",\n" . + "${strIndent} " . join(",\n${strIndent} ", bldQuoteList($ryDependList)) . + "\n" . + "${strIndent} )\n"; + } + + return + "${strIndent} CFGDEFDATA_OPTION_OPTIONAL_DEPEND(" . buildConfigDefineOptionEnum($strDependOption) . ")\n"; +} + +sub renderOptional +{ + my $rhOptional = shift; + my $bCommand = shift; + + my $strIndent = $bCommand ? ' ' : ''; + my $strBuildSourceOptional; + my $bSingleLine = false; + + if (defined($rhOptional->{&CFGDEF_ALLOW_LIST})) + { + $strBuildSourceOptional .= + (defined($strBuildSourceOptional) && !$bSingleLine ? "\n" : '') . + renderAllowList($rhOptional->{&CFGDEF_ALLOW_LIST}, $bCommand); + + $bSingleLine = false; + } + + if (defined($rhOptional->{&CFGDEF_ALLOW_RANGE})) + { + my @fyRange = @{$rhOptional->{&CFGDEF_ALLOW_RANGE}}; + + $strBuildSourceOptional .= + (defined($strBuildSourceOptional) && !$bSingleLine ? "\n" : '') . + "${strIndent} CFGDEFDATA_OPTION_OPTIONAL_ALLOW_RANGE(" . $fyRange[0] . ', ' . $fyRange[1] . ")\n"; + + $bSingleLine = true; + } + if (defined($rhOptional->{&CFGDEF_DEPEND})) + { + $strBuildSourceOptional .= + (defined($strBuildSourceOptional) && !$bSingleLine ? "\n" : '') . + renderDepend($rhOptional->{&CFGDEF_DEPEND}, $bCommand); + + $bSingleLine = defined($rhOptional->{&CFGDEF_DEPEND}{&CFGDEF_DEPEND_LIST}) ? false : true; + } + + if (defined($rhOptional->{&CFGDEF_DEFAULT})) + { + $strBuildSourceOptional .= + (defined($strBuildSourceOptional) && !$bSingleLine ? "\n" : '') . + "${strIndent} CFGDEFDATA_OPTION_OPTIONAL_DEFAULT(\"" . $rhOptional->{&CFGDEF_DEFAULT} . "\")\n"; + + $bSingleLine = true; + } + + if (defined($rhOptional->{&CFGDEF_ALT_NAME})) + { + $strBuildSourceOptional .= + (defined($strBuildSourceOptional) && !$bSingleLine ? "\n" : '') . + "${strIndent} CFGDEFDATA_OPTION_OPTIONAL_NAME_ALT(\"" . $rhOptional->{&CFGDEF_ALT_NAME} . "\")\n"; + + $bSingleLine = true; + } + + if (defined($rhOptional->{&CFGDEF_PREFIX})) + { + $strBuildSourceOptional .= + (defined($strBuildSourceOptional) && !$bSingleLine ? "\n" : '') . + "${strIndent} CFGDEFDATA_OPTION_OPTIONAL_PREFIX(\"" . $rhOptional->{&CFGDEF_PREFIX} . "\")\n"; + + $bSingleLine = true; + } + + if ($bCommand && defined($rhOptional->{&CFGDEF_REQUIRED})) + { + $strBuildSourceOptional .= + (defined($strBuildSourceOptional) && !$bSingleLine ? "\n" : '') . + "${strIndent} CFGDEFDATA_OPTION_OPTIONAL_REQUIRED(" . + ($rhOptional->{&CFGDEF_REQUIRED} ? 'true' : 'false') . ")\n"; + + $bSingleLine = true; + } + + return $strBuildSourceOptional; +} + +#################################################################################################################################### +# Build configuration constants and data +#################################################################################################################################### +sub buildConfigDefine +{ + # Build command constants and data + #------------------------------------------------------------------------------------------------------------------------------- + my $rhEnum = $rhBuild->{&BLD_FILE}{&BLDLCL_FILE_DEFINE}{&BLD_ENUM}{&BLDLCL_ENUM_COMMAND}; + + my $strBuildSource = + "ConfigDefineCommandData configDefineCommandData[] = CFGDEFDATA_COMMAND_LIST\n" . + "("; + + foreach my $strCommand (cfgDefineCommandList()) + { + # Build C enum + my $strCommandEnum = buildConfigDefineCommandEnum($strCommand); + push(@{$rhEnum->{&BLD_LIST}}, $strCommandEnum); + + # Build command data + $strBuildSource .= + "\n" . + " CFGDEFDATA_COMMAND\n" . + " (\n" . + " CFGDEFDATA_COMMAND_NAME(\"${strCommand}\")\n" . + " )\n"; + }; + + $strBuildSource .= + ")\n"; + + $rhBuild->{&BLD_FILE}{&BLDLCL_FILE_DEFINE}{&BLD_DATA}{&BLDLCL_DATA_COMMAND}{&BLD_SOURCE} = $strBuildSource; + + # Build option type constants + #------------------------------------------------------------------------------------------------------------------------------- + $rhEnum = $rhBuild->{&BLD_FILE}{&BLDLCL_FILE_DEFINE}{&BLD_ENUM}{&BLDLCL_ENUM_OPTION_TYPE}; + + foreach my $strOptionType (cfgDefineOptionTypeList()) + { + # Build C enum + my $strOptionTypeEnum = buildConfigDefineOptionTypeEnum($strOptionType); + push(@{$rhEnum->{&BLD_LIST}}, $strOptionTypeEnum); + }; + + # Build command constants and data + #------------------------------------------------------------------------------------------------------------------------------- + my $rhConfigDefine = cfgDefine(); + $rhEnum = $rhBuild->{&BLD_FILE}{&BLDLCL_FILE_DEFINE}{&BLD_ENUM}{&BLDLCL_ENUM_OPTION}; + + $strBuildSource = + "ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST\n" . + "("; + + foreach my $strOption (sort(keys(%{$rhConfigDefine}))) + { + # Build C enum + my $strOptionEnum = buildConfigDefineOptionEnum($strOption); + push(@{$rhEnum->{&BLD_LIST}}, $strOptionEnum); + + # Build option data + my $rhOption = $rhConfigDefine->{$strOption}; + + my $strOptionPrefix = $rhOption->{&CFGDEF_PREFIX}; + + $strBuildSource .= + "\n" . + " // " . (qw{-} x 125) . "\n" . + " CFGDEFDATA_OPTION\n" . + " (\n"; + + my $bRequired = $rhOption->{&CFGDEF_REQUIRED}; + + $strBuildSource .= + " CFGDEFDATA_OPTION_NAME(\"${strOption}\")\n" . + " CFGDEFDATA_OPTION_REQUIRED(" . ($bRequired ? 'true' : 'false') . ")\n" . + " CFGDEFDATA_OPTION_SECTION(cfgDefSection" . + (defined($rhOption->{&CFGDEF_SECTION}) ? ucfirst($rhOption->{&CFGDEF_SECTION}) : 'CommandLine') . + ")\n" . + " CFGDEFDATA_OPTION_TYPE(" . buildConfigDefineOptionTypeEnum($rhOption->{&CFGDEF_TYPE}) . ")\n"; + + $strBuildSource .= + "\n" . + " CFGDEFDATA_OPTION_INDEX_TOTAL(" . $rhOption->{&CFGDEF_INDEX_TOTAL} . ")\n" . + " CFGDEFDATA_OPTION_NEGATE(" . ($rhOption->{&CFGDEF_NEGATE} ? 'true' : 'false') . ")\n" . + " CFGDEFDATA_OPTION_SECURE(" . ($rhOption->{&CFGDEF_SECURE} ? 'true' : 'false') . ")\n" . + "\n" . + " CFGDEFDATA_OPTION_COMMAND_LIST\n" . + " (\n"; + + foreach my $strCommand (cfgDefineCommandList()) + { + if (defined($rhOption->{&CFGDEF_COMMAND}{$strCommand})) + { + $strBuildSource .= + " CFGDEFDATA_OPTION_COMMAND(" . buildConfigDefineCommandEnum($strCommand) . ")\n"; + } + } + + $strBuildSource .= + " )\n"; + + # Render optional data + my $strBuildSourceOptional = renderOptional($rhOption); + + # Render command overrides + foreach my $strCommand (cfgDefineCommandList()) + { + my $strBuildSourceOptionalCommand; + my $rhCommand = $rhOption->{&CFGDEF_COMMAND}{$strCommand}; + + if (defined($rhCommand)) + { + $strBuildSourceOptionalCommand = renderOptional($rhCommand, true); + + if (defined($strBuildSourceOptionalCommand)) + { + $strBuildSourceOptional .= + (defined($strBuildSourceOptional) ? "\n" : '') . + " CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE\n" . + " (\n" . + " CFGDEFDATA_OPTION_OPTIONAL_COMMAND(" . buildConfigDefineCommandEnum($strCommand) . ")\n" . + "\n" . + $strBuildSourceOptionalCommand . + " )\n"; + } + } + + }; + + if (defined($strBuildSourceOptional)) + { + $strBuildSource .= + "\n" . + " CFGDEFDATA_OPTION_OPTIONAL_LIST\n" . + " (\n" . + $strBuildSourceOptional . + " )\n"; + } + + $strBuildSource .= + " )\n"; + } + + $strBuildSource .= + ")\n"; + + $rhBuild->{&BLD_FILE}{&BLDLCL_FILE_DEFINE}{&BLD_DATA}{&BLDLCL_DATA_OPTION}{&BLD_SOURCE} = $strBuildSource; + + return $rhBuild; +} + +push @EXPORT, qw(buildConfigDefine); + +1; diff --git a/build/lib/pgBackRestBuild/Config/Rule.pm b/build/lib/pgBackRestBuild/Config/Rule.pm deleted file mode 100644 index e4d678312..000000000 --- a/build/lib/pgBackRestBuild/Config/Rule.pm +++ /dev/null @@ -1,136 +0,0 @@ -#################################################################################################################################### -# Legacy Rules Used Primarily by Documentation -# -# Most of these can be removed, but it will required some refactoring on DocConfig.pm. -#################################################################################################################################### -package pgBackRestBuild::Config::Rule; - -use strict; -use warnings FATAL => qw(all); -use Carp qw(confess); - -use Exporter qw(import); - our @EXPORT = qw(); - -use pgBackRest::Common::Exception; -use pgBackRest::Common::Log; -use pgBackRest::Config::Data; - -#################################################################################################################################### -# Option rules hash -#################################################################################################################################### -my $rhOptionRule = cfgdefRule(); - -#################################################################################################################################### -# cfgbldCommandRule - returns the option rules based on the command. -#################################################################################################################################### -sub cfgbldCommandRule -{ - my $strOption = shift; - my $strCommand = shift; - - if (defined($strCommand)) - { - return defined($rhOptionRule->{$strOption}{&CFGBLDDEF_RULE_COMMAND}) && - defined($rhOptionRule->{$strOption}{&CFGBLDDEF_RULE_COMMAND}{$strCommand}) && - ref($rhOptionRule->{$strOption}{&CFGBLDDEF_RULE_COMMAND}{$strCommand}) eq 'HASH' ? - $rhOptionRule->{$strOption}{&CFGBLDDEF_RULE_COMMAND}{$strCommand} : undef; - } - - return; -} - -#################################################################################################################################### -# cfgbldOptionDefault - does the option have a default for this command? -#################################################################################################################################### -sub cfgbldOptionDefault -{ - my $strOption = shift; - my $strCommand = shift; - - # Get the command rule - my $oCommandRule = cfgbldCommandRule($strOption, $strCommand); - - # Check for default in command - my $strDefault = defined($oCommandRule) ? $$oCommandRule{&CFGBLDDEF_RULE_DEFAULT} : undef; - - # If defined return, else try to grab the global default - return defined($strDefault) ? $strDefault : $rhOptionRule->{$strOption}{&CFGBLDDEF_RULE_DEFAULT}; -} - -push @EXPORT, qw(cfgbldOptionDefault); - -#################################################################################################################################### -# cfgbldOptionRange - get the allowed setting range for the option if it exists -#################################################################################################################################### -sub cfgbldOptionRange -{ - my $strOption = shift; - my $strCommand = shift; - - # Get the command rule - my $oCommandRule = cfgbldCommandRule($strOption, $strCommand); - - # Check for default in command - if (defined($oCommandRule) && defined($$oCommandRule{&CFGBLDDEF_RULE_ALLOW_RANGE})) - { - return $$oCommandRule{&CFGBLDDEF_RULE_ALLOW_RANGE}[0], $$oCommandRule{&CFGBLDDEF_RULE_ALLOW_RANGE}[1]; - } - - # If defined return, else try to grab the global default - return $rhOptionRule->{$strOption}{&CFGBLDDEF_RULE_ALLOW_RANGE}[0], $rhOptionRule->{$strOption}{&CFGBLDDEF_RULE_ALLOW_RANGE}[1]; -} - -push @EXPORT, qw(cfgbldOptionRange); - -#################################################################################################################################### -# cfgbldOptionType - get the option type -#################################################################################################################################### -sub cfgbldOptionType -{ - my $strOption = shift; - - return $rhOptionRule->{$strOption}{&CFGBLDDEF_RULE_TYPE}; -} - -push @EXPORT, qw(cfgbldOptionType); - -#################################################################################################################################### -# cfgbldOptionTypeTest - test the option type -#################################################################################################################################### -sub cfgbldOptionTypeTest -{ - my $strOption = shift; - my $strType = shift; - - return cfgbldOptionType($strOption) eq $strType; -} - -push @EXPORT, qw(cfgbldOptionTypeTest); - -#################################################################################################################################### -# cfgbldCommandGet - get the hash that contains all valid commands -#################################################################################################################################### -sub cfgbldCommandGet -{ - my $rhCommand; - - # Get commands from the rule hash - foreach my $strOption (sort(keys(%{$rhOptionRule}))) - { - foreach my $strCommand (sort(keys(%{$rhOptionRule->{$strOption}{&CFGBLDDEF_RULE_COMMAND}}))) - { - $rhCommand->{$strCommand} = true; - } - } - - # Add special commands - $rhCommand->{&CFGCMD_HELP} = true; - $rhCommand->{&CFGCMD_VERSION} = true; - - return $rhCommand; -} - -push @EXPORT, qw(cfgbldCommandGet); - -1; diff --git a/doc/lib/BackRestDoc/Common/DocConfig.pm b/doc/lib/BackRestDoc/Common/DocConfig.pm index 5c92306bb..2895ac9ca 100644 --- a/doc/lib/BackRestDoc/Common/DocConfig.pm +++ b/doc/lib/BackRestDoc/Common/DocConfig.pm @@ -16,8 +16,6 @@ use pgBackRest::Common::String; use pgBackRest::Config::Data; use pgBackRest::Version; -use pgBackRestBuild::Config::Rule; - #################################################################################################################################### # Help types #################################################################################################################################### @@ -48,6 +46,98 @@ use constant CFGDEF_LOG => 'log'; use constant CFGDEF_EXPIRE => 'expire'; use constant CFGDEF_REPOSITORY => 'repository'; +#################################################################################################################################### +# Option define hash +#################################################################################################################################### +my $rhConfigDefine = cfgDefine(); + +#################################################################################################################################### +# Returns the option defines based on the command. +#################################################################################################################################### +sub docConfigCommandDefine +{ + my $strOption = shift; + my $strCommand = shift; + + if (defined($strCommand)) + { + return defined($rhConfigDefine->{$strOption}{&CFGDEF_COMMAND}) && + defined($rhConfigDefine->{$strOption}{&CFGDEF_COMMAND}{$strCommand}) && + ref($rhConfigDefine->{$strOption}{&CFGDEF_COMMAND}{$strCommand}) eq 'HASH' ? + $rhConfigDefine->{$strOption}{&CFGDEF_COMMAND}{$strCommand} : undef; + } + + return; +} + +#################################################################################################################################### +# Does the option have a default for this command? +#################################################################################################################################### +sub docConfigOptionDefault +{ + my $strOption = shift; + my $strCommand = shift; + + # Get the command define + my $oCommandDefine = docConfigCommandDefine($strOption, $strCommand); + + # Check for default in command + my $strDefault = defined($oCommandDefine) ? $$oCommandDefine{&CFGDEF_DEFAULT} : undef; + + # If defined return, else try to grab the global default + return defined($strDefault) ? $strDefault : $rhConfigDefine->{$strOption}{&CFGDEF_DEFAULT}; +} + +push @EXPORT, qw(docConfigOptionDefault); + +#################################################################################################################################### +# Get the allowed setting range for the option if it exists +#################################################################################################################################### +sub docConfigOptionRange +{ + my $strOption = shift; + my $strCommand = shift; + + # Get the command define + my $oCommandDefine = docConfigCommandDefine($strOption, $strCommand); + + # Check for default in command + if (defined($oCommandDefine) && defined($$oCommandDefine{&CFGDEF_ALLOW_RANGE})) + { + return $$oCommandDefine{&CFGDEF_ALLOW_RANGE}[0], $$oCommandDefine{&CFGDEF_ALLOW_RANGE}[1]; + } + + # If defined return, else try to grab the global default + return $rhConfigDefine->{$strOption}{&CFGDEF_ALLOW_RANGE}[0], $rhConfigDefine->{$strOption}{&CFGDEF_ALLOW_RANGE}[1]; +} + +push @EXPORT, qw(docConfigOptionRange); + +#################################################################################################################################### +# Get the option type +#################################################################################################################################### +sub docConfigOptionType +{ + my $strOption = shift; + + return $rhConfigDefine->{$strOption}{&CFGDEF_TYPE}; +} + +push @EXPORT, qw(docConfigOptionType); + +#################################################################################################################################### +# Test the option type +#################################################################################################################################### +sub docConfigOptionTypeTest +{ + my $strOption = shift; + my $strType = shift; + + return docConfigOptionType($strOption) eq $strType; +} + +push @EXPORT, qw(docConfigOptionTypeTest); + #################################################################################################################################### # CONSTRUCTOR #################################################################################################################################### @@ -98,7 +188,7 @@ sub process my $oDoc = $self->{oDoc}; my $oConfigHash = {}; - foreach my $strCommand (sort(keys(%{cfgbldCommandGet()}))) + foreach my $strCommand (cfgDefineCommandList()) { if ($strCommand eq CFGCMD_REMOTE || $strCommand eq CFGCMD_LOCAL) { @@ -115,9 +205,9 @@ sub process } # Iterate through all options - my $oOptionRule = cfgdefRule(); + my $oOptionDefine = cfgDefine(); - foreach my $strOption (sort(keys(%{$oOptionRule}))) + foreach my $strOption (sort(keys(%{$oOptionDefine}))) { if ($strOption =~ /^test/ || $strOption eq CFGOPT_ARCHIVE_MAX_MB) { @@ -125,8 +215,8 @@ sub process } # Iterate through all commands - my @stryCommandList = sort(keys(%{defined($$oOptionRule{$strOption}{&CFGBLDDEF_RULE_COMMAND}) ? - $$oOptionRule{$strOption}{&CFGBLDDEF_RULE_COMMAND} : $$oConfigHash{&CONFIG_HELP_COMMAND}})); + my @stryCommandList = sort(keys(%{defined($$oOptionDefine{$strOption}{&CFGDEF_COMMAND}) ? + $$oOptionDefine{$strOption}{&CFGDEF_COMMAND} : $$oConfigHash{&CONFIG_HELP_COMMAND}})); foreach my $strCommand (@stryCommandList) { @@ -135,8 +225,8 @@ sub process next; } - if (ref(\$$oOptionRule{$strOption}{&CFGBLDDEF_RULE_COMMAND}{$strCommand}) eq 'SCALAR' && - $$oOptionRule{$strOption}{&CFGBLDDEF_RULE_COMMAND}{$strCommand} == false) + if (ref(\$$oOptionDefine{$strOption}{&CFGDEF_COMMAND}{$strCommand}) eq 'SCALAR' && + $$oOptionDefine{$strOption}{&CFGDEF_COMMAND}{$strCommand} == false) { next; } @@ -161,7 +251,7 @@ sub process if (!defined($oOptionDoc)) { # Next see if it's documented in the section - if (defined($$oOptionRule{$strOption}{&CFGBLDDEF_RULE_SECTION})) + if (defined($$oOptionDefine{$strOption}{&CFGDEF_SECTION})) { # &log(INFO, " trying section ${strSection}"); foreach my $oSectionNode ($oDoc->nodeGet('config')->nodeGet('config-section-list')->nodeList()) @@ -201,10 +291,10 @@ sub process # if the option is documented in the command then it should be accessible from the command line only. if (!defined($strSection)) { - if (defined($$oOptionRule{$strOption}{&CFGBLDDEF_RULE_SECTION})) + if (defined($$oOptionDefine{$strOption}{&CFGDEF_SECTION})) { &log(ERROR, - "option ${strOption} defined in command ${strCommand} must not have " . CFGBLDDEF_RULE_SECTION . + "option ${strOption} defined in command ${strCommand} must not have " . CFGDEF_SECTION . " defined"); } } @@ -556,7 +646,7 @@ sub manGet } # Build command and config hashes - my $hOptionRule = cfgdefRule(); + my $hConfigDefine = cfgDefine(); my $hConfig = $self->{oConfigHash}; my $hCommandList = {}; my $iCommandMaxLen = 0; @@ -625,8 +715,8 @@ sub manGet my $hOption = $$hOptionList{$strSection}{$strOption}; # Contruct the default - my $strCommand = defined(${cfgbldCommandGet()}{$strSection}) ? $strSection : undef; - my $strDefault = cfgbldOptionDefault($strOption, $strCommand); + my $strCommand = grep(/$strSection/i, cfgDefineCommandList()) ? $strSection : undef; + my $strDefault = docConfigOptionDefault($strOption, $strCommand); if (defined($strDefault)) { @@ -634,7 +724,7 @@ sub manGet { $strDefault = BACKREST_EXE; } - elsif ($$hOptionRule{$strOption}{&CFGBLDDEF_RULE_TYPE} eq &CFGOPTDEF_TYPE_BOOLEAN) + elsif ($$hConfigDefine{$strOption}{&CFGDEF_TYPE} eq &CFGDEF_TYPE_BOOLEAN) { $strDefault = $strDefault ? 'y' : 'n'; } @@ -660,11 +750,11 @@ sub manGet $strManPage .= "\n\n" . "FILES\n" . "\n" . - ' ' . cfgbldOptionDefault(CFGOPT_CONFIG) . "\n" . - ' ' . cfgbldOptionDefault(CFGOPT_REPO_PATH) . "\n" . - ' ' . cfgbldOptionDefault(CFGOPT_LOG_PATH) . "\n" . - ' ' . cfgbldOptionDefault(CFGOPT_SPOOL_PATH) . "\n" . - ' ' . cfgbldOptionDefault(CFGOPT_LOCK_PATH) . "\n" . + ' ' . docConfigOptionDefault(CFGOPT_CONFIG) . "\n" . + ' ' . docConfigOptionDefault(CFGOPT_REPO_PATH) . "\n" . + ' ' . docConfigOptionDefault(CFGOPT_LOG_PATH) . "\n" . + ' ' . docConfigOptionDefault(CFGOPT_SPOOL_PATH) . "\n" . + ' ' . docConfigOptionDefault(CFGOPT_LOCK_PATH) . "\n" . "\n" . "EXAMPLES\n" . "\n" . @@ -672,7 +762,7 @@ sub manGet "\n" . ' $ ' . BACKREST_EXE . ' --' . CFGOPT_STANZA . "=main backup\n" . "\n" . - ' The `main` cluster should be configured in `' . cfgbldOptionDefault(CFGOPT_CONFIG) . "`\n" . + ' The `main` cluster should be configured in `' . docConfigOptionDefault(CFGOPT_CONFIG) . "`\n" . "\n" . " * Show all available backups:\n" . "\n" . @@ -801,7 +891,7 @@ sub helpCommandDocGet # Working variables my $oConfigHash = $self->{oConfigHash}; my $oOperationDoc = $self->{oDoc}->nodeGet('operation'); - my $oOptionRule = cfgdefRule(); + my $oOptionDefine = cfgDefine(); my $oDoc = new BackRestDoc::Common::Doc(); $oDoc->paramSet('title', $oOperationDoc->paramGet('title')); @@ -837,7 +927,7 @@ sub helpCommandDocGet foreach my $strOption (sort(keys(%{$$oCommandHash{&CONFIG_HELP_OPTION}}))) { - my ($oOption, $strCategory) = helpCommandDocGetOptionFind($oConfigHash, $oOptionRule, $strCommand, $strOption); + my ($oOption, $strCategory) = helpCommandDocGetOptionFind($oConfigHash, $oOptionDefine, $strCommand, $strOption); $$oCategory{$strCategory}{$strOption} = $oOption; } @@ -873,7 +963,7 @@ sub helpCommandDocGet sub helpCommandDocGetOptionFind { my $oConfigHelpData = shift; - my $oOptionRule = shift; + my $oOptionDefine = shift; my $strCommand = shift; my $strOption = shift; @@ -937,7 +1027,7 @@ sub helpOptionGet # Get the default value (or required=n if there is no default) my $strCodeBlock; - if (defined(cfgbldOptionDefault($strOption, $strCommand))) + if (defined(docConfigOptionDefault($strOption, $strCommand))) { my $strDefault; @@ -947,13 +1037,13 @@ sub helpOptionGet } else { - if (cfgbldOptionTypeTest($strOption, CFGOPTDEF_TYPE_BOOLEAN)) + if (docConfigOptionTypeTest($strOption, CFGDEF_TYPE_BOOLEAN)) { - $strDefault = cfgbldOptionDefault($strOption, $strCommand) ? 'y' : 'n'; + $strDefault = docConfigOptionDefault($strOption, $strCommand) ? 'y' : 'n'; } else { - $strDefault = cfgbldOptionDefault($strOption, $strCommand); + $strDefault = docConfigOptionDefault($strOption, $strCommand); } } @@ -966,7 +1056,7 @@ sub helpOptionGet # } # Get the allowed range if it exists - my ($strRangeMin, $strRangeMax) = cfgbldOptionRange($strOption, $strCommand); + my ($strRangeMin, $strRangeMax) = docConfigOptionRange($strOption, $strCommand); if (defined($strRangeMin)) { @@ -978,7 +1068,7 @@ sub helpOptionGet if (defined($strCommand)) { - if (cfgbldOptionTypeTest($strOption, CFGOPTDEF_TYPE_BOOLEAN)) + if (docConfigOptionTypeTest($strOption, CFGDEF_TYPE_BOOLEAN)) { if ($$oOptionHash{&CONFIG_HELP_EXAMPLE} ne 'n' && $$oOptionHash{&CONFIG_HELP_EXAMPLE} ne 'y') { diff --git a/doc/lib/BackRestDoc/Common/DocExecute.pm b/doc/lib/BackRestDoc/Common/DocExecute.pm index ac9af7d19..406d5ad68 100644 --- a/doc/lib/BackRestDoc/Common/DocExecute.pm +++ b/doc/lib/BackRestDoc/Common/DocExecute.pm @@ -18,6 +18,7 @@ use pgBackRest::Common::Ini; use pgBackRest::Common::Log; use pgBackRest::Common::String; use pgBackRest::Config::Data; +use pgBackRest::Config::Define; use pgBackRest::Version; use pgBackRestTest::Common::ExecuteTest; @@ -516,19 +517,19 @@ sub backrestConfig else { # Get the config options hash - my $oOption = cfgdefRuleIndex(); + my $rhOptionIndex = cfgDefineIndex(); # Make sure the specified option exists # ??? This is too simplistic to handle new indexed options. The check below works for now but it would be good # ??? to bring back more sophisticated checking in the future. - # if (!defined($$oOption{$strKey})) + # if (!defined($rhOptionIndex->{$strKey})) # { # confess &log(ERROR, "option ${strKey} does not exist"); # } # If this option is a hash and the value is already set then append to the array - if (defined($$oOption{$strKey}) && - $$oOption{$strKey}{&CFGBLDDEF_RULE_TYPE} eq CFGOPTDEF_TYPE_HASH && + if (defined($rhOptionIndex->{$strKey}) && + $rhOptionIndex->{$strKey}{&CFGDEF_TYPE} eq CFGDEF_TYPE_HASH && defined(${$self->{config}}{$strHostName}{$$hCacheKey{file}}{$strSection}{$strKey})) { my @oValue = (); diff --git a/doc/xml/release.xml b/doc/xml/release.xml index 629022ac4..0c73402d2 100644 --- a/doc/xml/release.xml +++ b/doc/xml/release.xml @@ -20,6 +20,10 @@

Remove configurable option hints. db-path was the only option with a hint so the feature seemed wasteful. All missing stanza options now output the same hint without needing configuration.

+ + +

Convert configuration definitions from auto-generated functions to auto-generated data structures.

+
@@ -301,7 +305,7 @@ -

Configuration rules are now pulled from the C library when present.

+

Configuration definitions are now pulled from the C library when present.

diff --git a/lib/pgBackRest/Backup/Backup.pm b/lib/pgBackRest/Backup/Backup.pm index 839b555f1..ccf370962 100644 --- a/lib/pgBackRest/Backup/Backup.pm +++ b/lib/pgBackRest/Backup/Backup.pm @@ -389,9 +389,9 @@ sub processManifest foreach my $hJob (@{$hyJob}) { ($lSizeCurrent, $lManifestSaveCurrent) = backupManifestUpdate( - $oBackupManifest, cfgOption(cfgOptionIndex(CFGOPT_DB_HOST, $hJob->{iHostConfigIdx}), false), $hJob->{iProcessId}, - @{$hJob->{rParam}}[0..4], @{$hJob->{rResult}}, - $lSizeTotal, $lSizeCurrent, $lManifestSaveSize, $lManifestSaveCurrent); + $oBackupManifest, cfgOption(cfgOptionIdFromIndex(CFGOPT_DB_HOST, $hJob->{iHostConfigIdx}), false), + $hJob->{iProcessId}, @{$hJob->{rParam}}[0..4], @{$hJob->{rResult}}, $lSizeTotal, $lSizeCurrent, $lManifestSaveSize, + $lManifestSaveCurrent); } # A keep-alive is required here because if there are a large number of resumed files that need to be checksummed @@ -466,8 +466,8 @@ sub process my $oStorageDbMaster = storageDb({iRemoteIdx => $self->{iMasterRemoteIdx}}); # Determine the database paths - my $strDbMasterPath = cfgOption(cfgOptionIndex(CFGOPT_DB_PATH, $self->{iMasterRemoteIdx})); - my $strDbCopyPath = cfgOption(cfgOptionIndex(CFGOPT_DB_PATH, $self->{iCopyRemoteIdx})); + my $strDbMasterPath = cfgOption(cfgOptionIdFromIndex(CFGOPT_DB_PATH, $self->{iMasterRemoteIdx})); + my $strDbCopyPath = cfgOption(cfgOptionIdFromIndex(CFGOPT_DB_PATH, $self->{iCopyRemoteIdx})); # Database info my ($strDbVersion, $iControlVersion, $iCatalogVersion, $ullDbSysId) = $oDbMaster->info(); diff --git a/lib/pgBackRest/Config/Config.pm b/lib/pgBackRest/Config/Config.pm index a398bd252..5d6e79bac 100644 --- a/lib/pgBackRest/Config/Config.pm +++ b/lib/pgBackRest/Config/Config.pm @@ -78,7 +78,7 @@ push @EXPORT, qw(configLogging); #################################################################################################################################### # configLoad - load configuration # -# Additional conditions that cannot be codified by the OptionRule hash are also tested here. +# Additional conditions that cannot be codified by the option definitions are also tested here. #################################################################################################################################### sub configLoad { @@ -100,21 +100,21 @@ sub configLoad if ($bAltName) { - if (!defined(cfgRuleOptionNameAlt($iOptionId))) + if (!defined(cfgDefOptionNameAlt($iOptionId))) { next; } - $strOptionName = cfgRuleOptionNameAlt($iOptionId); + $strOptionName = cfgDefOptionNameAlt($iOptionId); } my $strOption = $strOptionName; - if (cfgRuleOptionType($iOptionId) eq CFGOPTDEF_TYPE_HASH || cfgRuleOptionType($iOptionId) eq CFGOPTDEF_TYPE_LIST) + if (cfgDefOptionType($iOptionId) eq CFGDEF_TYPE_HASH || cfgDefOptionType($iOptionId) eq CFGDEF_TYPE_LIST) { $strOption .= '=s@'; } - elsif (cfgRuleOptionType($iOptionId) ne CFGOPTDEF_TYPE_BOOLEAN) + elsif (cfgDefOptionType($iOptionId) ne CFGDEF_TYPE_BOOLEAN) { $strOption .= '=s'; } @@ -122,7 +122,7 @@ sub configLoad push(@stryOptionAllow, $strOption); # Check if the option can be negated - if (cfgRuleOptionNegate($iOptionId)) + if (cfgDefOptionNegate($iOptionId)) { push(@stryOptionAllow, 'no-' . $strOptionName); } @@ -194,11 +194,11 @@ sub configLoad { for (my $iOptionIdx = 1; $iOptionIdx <= cfgOptionIndexTotal(CFGOPT_DB_HOST); $iOptionIdx++) { - if (cfgOptionTest(cfgOptionIndex(CFGOPT_DB_HOST, $iOptionIdx)) && - !cfgOptionTest(cfgOptionIndex(CFGOPT_DB_CMD, $iOptionIdx))) + if (cfgOptionTest(cfgOptionIdFromIndex(CFGOPT_DB_HOST, $iOptionIdx)) && + !cfgOptionTest(cfgOptionIdFromIndex(CFGOPT_DB_CMD, $iOptionIdx))) { - cfgOptionSet(cfgOptionIndex(CFGOPT_DB_CMD, $iOptionIdx), BACKREST_BIN); - $oOption{cfgOptionIndex(CFGOPT_DB_CMD, $iOptionIdx)}{source} = CFGDEF_SOURCE_DEFAULT; + cfgOptionSet(cfgOptionIdFromIndex(CFGOPT_DB_CMD, $iOptionIdx), BACKREST_BIN); + $oOption{cfgOptionIdFromIndex(CFGOPT_DB_CMD, $iOptionIdx)}{source} = CFGDEF_SOURCE_DEFAULT; } } } @@ -322,9 +322,9 @@ sub optionValueGet # Some options have an alternate name so check for that as well my $iOptionId = cfgOptionId($strOption); - if (defined(cfgRuleOptionNameAlt($iOptionId))) + if (defined(cfgDefOptionNameAlt($iOptionId))) { - my $strOptionAlt = cfgRuleOptionNameAlt($iOptionId); + my $strOptionAlt = cfgDefOptionNameAlt($iOptionId); my $strValueAlt = $hOption->{$strOptionAlt}; if (defined($strValueAlt)) @@ -397,7 +397,7 @@ sub optionValidate } # Determine if an option is valid for a command - $oOption{$strOption}{valid} = cfgRuleOptionValid($iCommandId, $iOptionId); + $oOption{$strOption}{valid} = cfgDefOptionValid($iCommandId, $iOptionId); if (!$oOption{$strOption}{valid}) { @@ -411,7 +411,7 @@ sub optionValidate # Check to see if an option can be negated. Make sure that it is not set and negated at the same time. my $bNegate = false; - if (cfgRuleOptionNegate($iOptionId)) + if (cfgDefOptionNegate($iOptionId)) { $bNegate = defined($$oOptionTest{'no-' . $strOption}); @@ -420,7 +420,7 @@ sub optionValidate confess &log(ERROR, "option '${strOption}' cannot be both set and negated", ERROR_OPTION_NEGATE); } - if ($bNegate && cfgRuleOptionType($iOptionId) eq CFGOPTDEF_TYPE_BOOLEAN) + if ($bNegate && cfgDefOptionType($iOptionId) eq CFGDEF_TYPE_BOOLEAN) { $strValue = false; } @@ -432,10 +432,10 @@ sub optionValidate my $strDependValue; my $strDependType; - if (cfgRuleOptionDepend($iCommandId, $iOptionId)) + if (cfgDefOptionDepend($iCommandId, $iOptionId)) { # Check if the depend option has a value - my $iDependOptionId = cfgRuleOptionDependOption($iCommandId, $iOptionId); + my $iDependOptionId = cfgDefOptionDependOption($iCommandId, $iOptionId); $strDependOption = cfgOptionName($iDependOptionId); $strDependValue = $oOption{$strDependOption}{value}; @@ -453,16 +453,16 @@ sub optionValidate } # If a depend value exists, make sure the option value matches - if ($bDependResolved && cfgRuleOptionDependValueTotal($iCommandId, $iOptionId) == 1 && - cfgRuleOptionDependValue($iCommandId, $iOptionId, 0) ne $strDependValue) + if ($bDependResolved && cfgDefOptionDependValueTotal($iCommandId, $iOptionId) == 1 && + cfgDefOptionDependValue($iCommandId, $iOptionId, 0) ne $strDependValue) { $bDependResolved = false; $strDependType = 'value'; } # If a depend list exists, make sure the value is in the list - if ($bDependResolved && cfgRuleOptionDependValueTotal($iCommandId, $iOptionId) > 1 && - !cfgRuleOptionDependValueValid($iCommandId, $iOptionId, $strDependValue)) + if ($bDependResolved && cfgDefOptionDependValueTotal($iCommandId, $iOptionId) > 1 && + !cfgDefOptionDependValueValid($iCommandId, $iOptionId, $strDependValue)) { $bDependResolved = false; $strDependType = 'list'; @@ -471,7 +471,7 @@ sub optionValidate # If the option value is undefined and not negated, see if it can be loaded from the config file if (!defined($strValue) && !$bNegate && $strOption ne cfgOptionName(CFGOPT_CONFIG) && - defined(cfgRuleOptionSection($iOptionId)) && $bDependResolved) + defined(cfgDefOptionSection($iOptionId)) && $bDependResolved) { # If the config option has not been resolved yet then continue processing if (!defined($oOptionResolved{cfgOptionName(CFGOPT_CONFIG)}) || @@ -506,7 +506,7 @@ sub optionValidate } # Get the section that the value should be in - my $strSection = cfgRuleOptionSection($iOptionId); + my $strSection = cfgDefOptionSection($iOptionId); # Always check for the option in the stanza section first if (cfgOptionTest(CFGOPT_STANZA)) @@ -546,7 +546,7 @@ sub optionValidate $strValue = undef; } # Convert Y or N to boolean - elsif (cfgRuleOptionType($iOptionId) eq CFGOPTDEF_TYPE_BOOLEAN) + elsif (cfgDefOptionType($iOptionId) eq CFGDEF_TYPE_BOOLEAN) { if ($strValue eq 'y') { @@ -563,8 +563,8 @@ sub optionValidate } } # Convert a list of key/value pairs to a hash - elsif (cfgRuleOptionType($iOptionId) eq CFGOPTDEF_TYPE_HASH || - cfgRuleOptionType($iOptionId) eq CFGOPTDEF_TYPE_LIST) + elsif (cfgDefOptionType($iOptionId) eq CFGDEF_TYPE_HASH || + cfgDefOptionType($iOptionId) eq CFGDEF_TYPE_LIST) { my @oValue = (); @@ -611,7 +611,7 @@ sub optionValidate } } - if (cfgRuleOptionDepend($iCommandId, $iOptionId) && !$bDependResolved && defined($strValue)) + if (cfgDefOptionDepend($iCommandId, $iOptionId) && !$bDependResolved && defined($strValue)) { my $strError = "option '${strOption}' not valid without option "; my $iDependOptionId = cfgOptionId($strDependOption); @@ -624,14 +624,14 @@ sub optionValidate # If a depend value exists, make sure the option value matches if ($strDependType eq 'value') { - if (cfgRuleOptionType($iDependOptionId) eq CFGOPTDEF_TYPE_BOOLEAN) + if (cfgDefOptionType($iDependOptionId) eq CFGDEF_TYPE_BOOLEAN) { $strError .= - "'" . (cfgRuleOptionDependValue($iCommandId, $iOptionId, 0) ? '' : 'no-') . "${strDependOption}'"; + "'" . (cfgDefOptionDependValue($iCommandId, $iOptionId, 0) ? '' : 'no-') . "${strDependOption}'"; } else { - $strError .= "'${strDependOption}' = '" . cfgRuleOptionDependValue($iCommandId, $iOptionId, 0) . "'"; + $strError .= "'${strDependOption}' = '" . cfgDefOptionDependValue($iCommandId, $iOptionId, 0) . "'"; } confess &log(ERROR, $strError, ERROR_OPTION_INVALID); @@ -644,9 +644,9 @@ sub optionValidate { my @oyValue; - for (my $iValueId = 0; $iValueId < cfgRuleOptionDependValueTotal($iCommandId, $iOptionId); $iValueId++) + for (my $iValueId = 0; $iValueId < cfgDefOptionDependValueTotal($iCommandId, $iOptionId); $iValueId++) { - push(@oyValue, "'" . cfgRuleOptionDependValue($iCommandId, $iOptionId, $iValueId) . "'"); + push(@oyValue, "'" . cfgDefOptionDependValue($iCommandId, $iOptionId, $iValueId) . "'"); } $strError .= @oyValue == 1 ? " = $oyValue[0]" : " in (" . join(", ", @oyValue) . ")"; @@ -658,8 +658,8 @@ sub optionValidate if (defined($strValue)) { # Check that floats and integers are valid - if (cfgRuleOptionType($iOptionId) eq CFGOPTDEF_TYPE_INTEGER || - cfgRuleOptionType($iOptionId) eq CFGOPTDEF_TYPE_FLOAT) + if (cfgDefOptionType($iOptionId) eq CFGDEF_TYPE_INTEGER || + cfgDefOptionType($iOptionId) eq CFGDEF_TYPE_FLOAT) { # Test that the string is a valid float or integer by adding 1 to it. It's pretty hokey but it works and it # beats requiring Scalar::Util::Numeric to do it properly. @@ -676,7 +676,7 @@ sub optionValidate }; # Check that integers are really integers - if (!$bError && cfgRuleOptionType($iOptionId) eq CFGOPTDEF_TYPE_INTEGER && + if (!$bError && cfgDefOptionType($iOptionId) eq CFGDEF_TYPE_INTEGER && (int($strValue) . 'S') ne ($strValue . 'S')) { $bError = true; @@ -688,23 +688,23 @@ sub optionValidate } # Process an allow list for the command then for the option - if (cfgRuleOptionAllowList($iCommandId, $iOptionId) && - !cfgRuleOptionAllowListValueValid($iCommandId, $iOptionId, $strValue)) + if (cfgDefOptionAllowList($iCommandId, $iOptionId) && + !cfgDefOptionAllowListValueValid($iCommandId, $iOptionId, $strValue)) { confess &log(ERROR, "'${strValue}' is not valid for '${strOption}' option", ERROR_OPTION_INVALID_VALUE); } # Process an allow range for the command then for the option - if (cfgRuleOptionAllowRange($iCommandId, $iOptionId) && - ($strValue < cfgRuleOptionAllowRangeMin($iCommandId, $iOptionId) || - $strValue > cfgRuleOptionAllowRangeMax($iCommandId, $iOptionId))) + if (cfgDefOptionAllowRange($iCommandId, $iOptionId) && + ($strValue < cfgDefOptionAllowRangeMin($iCommandId, $iOptionId) || + $strValue > cfgDefOptionAllowRangeMax($iCommandId, $iOptionId))) { confess &log(ERROR, "'${strValue}' is not valid for '${strOption}' option", ERROR_OPTION_INVALID_RANGE); } # Set option value if (ref($strValue) eq 'ARRAY' && - (cfgRuleOptionType($iOptionId) eq CFGOPTDEF_TYPE_HASH || cfgRuleOptionType($iOptionId) eq CFGOPTDEF_TYPE_LIST)) + (cfgDefOptionType($iOptionId) eq CFGDEF_TYPE_HASH || cfgDefOptionType($iOptionId) eq CFGDEF_TYPE_LIST)) { foreach my $strItem (@{$strValue}) { @@ -712,7 +712,7 @@ sub optionValidate my $strValue; # If the keys are expected to have values - if (cfgRuleOptionType($iOptionId) eq CFGOPTDEF_TYPE_HASH) + if (cfgDefOptionType($iOptionId) eq CFGDEF_TYPE_HASH) { # Check for = and make sure there is a least one character on each side my $iEqualPos = index($strItem, '='); @@ -762,7 +762,7 @@ sub optionValidate $oOption{$strOption}{source} = CFGDEF_SOURCE_DEFAULT; # Check for default in command then option - my $strDefault = cfgRuleOptionDefault($iCommandId, $iOptionId); + my $strDefault = cfgDefOptionDefault($iCommandId, $iOptionId); # If default is defined if (defined($strDefault)) @@ -771,12 +771,12 @@ sub optionValidate $oOption{$strOption}{value} = $strDefault if !$bNegate; } # Else check required - elsif (cfgRuleOptionRequired($iCommandId, $iOptionId) && !$bHelp) + elsif (cfgDefOptionRequired($iCommandId, $iOptionId) && !$bHelp) { confess &log(ERROR, "${strCommand} command requires option: ${strOption}" . - (defined(cfgRuleOptionSection($iOptionId)) && - cfgRuleOptionSection($iOptionId) eq CFGDEF_SECTION_STANZA ? "\nHINT: does this stanza exist?" : ''), + (defined(cfgDefOptionSection($iOptionId)) && + cfgDefOptionSection($iOptionId) eq CFGDEF_SECTION_STANZA ? "\nHINT: does this stanza exist?" : ''), ERROR_OPTION_REQUIRED); } } @@ -845,7 +845,7 @@ sub configFileValidate # Is the option valid for the command section in which it is located? if (defined($strCommand) && $strCommand ne '') { - if (!cfgRuleOptionValid(cfgCommandId($strCommand), cfgOptionId($strOption))) + if (!cfgDefOptionValid(cfgCommandId($strCommand), cfgOptionId($strOption))) { &log(WARN, cfgOption(CFGOPT_CONFIG) . " valid option '${strOptionDisplay}' is not valid for command " . "'${strCommand}'"); @@ -854,7 +854,7 @@ sub configFileValidate } # Is the valid option a stanza-only option and not located in a global section? - if (cfgRuleOptionSection(cfgOptionId($strOption)) eq CFGDEF_SECTION_STANZA && + if (cfgDefOptionSection(cfgOptionId($strOption)) eq CFGDEF_SECTION_STANZA && $strSection eq CFGDEF_SECTION_GLOBAL) { &log(WARN, @@ -887,7 +887,7 @@ sub optionAltName { my $strKey = cfgOptionName($iOptionId); - if (defined(cfgRuleOptionNameAlt($iOptionId)) && cfgRuleOptionNameAlt($iOptionId) eq $strOption) + if (defined(cfgDefOptionNameAlt($iOptionId)) && cfgDefOptionNameAlt($iOptionId) eq $strOption) { $strOptionAltName = $strKey; } @@ -897,9 +897,9 @@ sub optionAltName } #################################################################################################################################### -# cfgOptionIndex - return name for options that can be indexed (e.g. db1-host, db2-host). +# cfgOptionIdFromIndex - return name for options that can be indexed (e.g. db1-host, db2-host). #################################################################################################################################### -sub cfgOptionIndex +sub cfgOptionIdFromIndex { my $iOptionId = shift; my $iIndex = shift; @@ -907,7 +907,7 @@ sub cfgOptionIndex # If the option doesn't have a prefix it can't be indexed $iIndex = defined($iIndex) ? $iIndex : 1; - my $strPrefix = cfgRuleOptionPrefix($iOptionId); + my $strPrefix = cfgDefOptionPrefix($iOptionId); if (!defined($strPrefix)) { @@ -922,7 +922,7 @@ sub cfgOptionIndex return cfgOptionId("${strPrefix}${iIndex}" . substr(cfgOptionName($iOptionId), index(cfgOptionName($iOptionId), '-'))); } -push @EXPORT, qw(cfgOptionIndex); +push @EXPORT, qw(cfgOptionIdFromIndex); #################################################################################################################################### # cfgOptionSource - how was the option set? @@ -959,7 +959,7 @@ sub cfgOptionValid $iCommandId = cfgCommandId($strCommand); } - if (defined($iCommandId) && cfgRuleOptionValid($iCommandId, $iOptionId)) + if (defined($iCommandId) && cfgDefOptionValid($iCommandId, $iOptionId)) { return true; } @@ -1012,7 +1012,7 @@ sub cfgOptionDefault cfgOptionValid($iOptionId, true); - return cfgRuleOptionDefault(cfgCommandId($strCommand), $iOptionId); + return cfgDefOptionDefault(cfgCommandId($strCommand), $iOptionId); } push @EXPORT, qw(cfgOptionDefault); @@ -1160,7 +1160,7 @@ sub cfgCommandWrite for (my $iOptionId = 0; $iOptionId < cfgOptionTotal(); $iOptionId++) { my $strOption = cfgOptionName($iOptionId); - my $bSecure = cfgRuleOptionSecure($iOptionId); + my $bSecure = cfgDefOptionSecure($iOptionId); # Skip option if it is secure and should not be output in logs or the command line next if ($bSecure && !$bDisplayOnly); @@ -1184,7 +1184,7 @@ sub cfgCommandWrite } } # else look for non-default options in the current configuration - elsif (cfgRuleOptionValid($iNewCommandId, $iOptionId) && + elsif (cfgDefOptionValid($iNewCommandId, $iOptionId) && defined($oOption{$strOption}{value}) && ($bIncludeConfig ? $oOption{$strOption}{source} ne CFGDEF_SOURCE_DEFAULT : $oOption{$strOption}{source} eq CFGDEF_SOURCE_PARAM)) @@ -1236,7 +1236,7 @@ sub cfgCommandWriteOptionFormat my $strValue = $bSecure ? '' : ($bMulti ? "${strKey}=" : '') . $$oValue{$strKey}; # Handle the no- prefix for boolean values - if (cfgRuleOptionType(cfgOptionId($strOption)) eq CFGOPTDEF_TYPE_BOOLEAN) + if (cfgDefOptionType(cfgOptionId($strOption)) eq CFGDEF_TYPE_BOOLEAN) { $strParam = '--' . ($strValue ? '' : 'no-') . $strOption; } diff --git a/lib/pgBackRest/Config/ConfigHelp.pm b/lib/pgBackRest/Config/ConfigHelp.pm index 14967eff3..a8fe34bef 100644 --- a/lib/pgBackRest/Config/ConfigHelp.pm +++ b/lib/pgBackRest/Config/ConfigHelp.pm @@ -390,20 +390,20 @@ sub configHelpOptionFind } } - # Check if the current set value is default (some defaults are set at runtime and are not in the rules) + # Check if the current set value is default (some defaults are set at runtime and are not in the defines) if (defined(cfgOption($iOptionId, false, false)) && cfgOptionSource($iOptionId, false) eq CONFIG_HELP_SOURCE_DEFAULT) { $oOption->{&CONFIG_HELP_DEFAULT} = cfgOption($iOptionId, true, false); } - # If no default is set see if there is a default in the rules - if (!defined($oOption->{&CONFIG_HELP_DEFAULT}) && defined(cfgRuleOptionDefault($iCommandId, $iOptionId))) + # If no default is set see if there is a default in the defines + if (!defined($oOption->{&CONFIG_HELP_DEFAULT}) && defined(cfgDefOptionDefault($iCommandId, $iOptionId))) { - $oOption->{&CONFIG_HELP_DEFAULT} = cfgRuleOptionDefault($iCommandId, $iOptionId); + $oOption->{&CONFIG_HELP_DEFAULT} = cfgDefOptionDefault($iCommandId, $iOptionId); } # Format the default properly if it is a boolean - if (defined($oOption->{&CONFIG_HELP_DEFAULT}) && cfgRuleOptionType($iOptionId) eq CFGOPTDEF_TYPE_BOOLEAN) + if (defined($oOption->{&CONFIG_HELP_DEFAULT}) && cfgDefOptionType($iOptionId) eq CFGDEF_TYPE_BOOLEAN) { $oOption->{&CONFIG_HELP_DEFAULT} = $oOption->{&CONFIG_HELP_DEFAULT} ? 'y' : 'n'; } @@ -412,7 +412,7 @@ sub configHelpOptionFind { $oOption->{&CONFIG_HELP_CURRENT} = cfgOption($iOptionId, true, false); - if (cfgRuleOptionType($iOptionId) eq CFGOPTDEF_TYPE_BOOLEAN) + if (cfgDefOptionType($iOptionId) eq CFGDEF_TYPE_BOOLEAN) { $$oOption{&CONFIG_HELP_CURRENT} = $oOption->{&CONFIG_HELP_CURRENT} ? 'y' : 'n'; } diff --git a/lib/pgBackRest/Config/ConfigHelpData.pm b/lib/pgBackRest/Config/ConfigHelpData.pm index 57581c98a..6c5375776 100644 --- a/lib/pgBackRest/Config/ConfigHelpData.pm +++ b/lib/pgBackRest/Config/ConfigHelpData.pm @@ -95,9 +95,9 @@ my $oConfigHelpData = summary => "Archive timeout.", description => - "Set maximum time, in seconds, to wait for WAL segments to reach the archive. The timeout applies to the check " . - "command and to the backup command when waiting for WAL segments required to make the backup consistent to " . - "be archived." + "Set maximum time, in seconds, to wait for each WAL segment to reach the pgBackRest archive repository. The " . + "timeout applies to the check and backup commands when waiting for WAL segments required for backup " . + "consistency to be archived." }, # BACKUP-CMD Option Help diff --git a/lib/pgBackRest/Config/Data.pm b/lib/pgBackRest/Config/Data.pm index 2ef8d5f6a..8ed156a17 100644 --- a/lib/pgBackRest/Config/Data.pm +++ b/lib/pgBackRest/Config/Data.pm @@ -1,45 +1,45 @@ #################################################################################################################################### -# Configuration Rule Data +# Configuration Definition Data # -# Contains the rules for options: which commands the option can/cannot be specified, for which commands it is required, default +# Contains the defines for options: which commands the option can/cannot be specified, for which commands it is required, default # settings, types, ranges, whether the option is negatable, whether it has dependencies, etc. The initial section is the global -# section meaning the rules defined there apply to all commands listed for the option. +# section meaning the defines defined there apply to all commands listed for the option. # -# CFGBLDDEF_RULE_COMMAND: +# CFGDEF_COMMAND: # 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 # (B), else it will still error on the option (A). # -# CFGBLDDEF_RULE_REQUIRED: +# CFGDEF_REQUIRED: # In global section: -# true - if the option does not have a default, then setting CFGBLDDEF_RULE_REQUIRED in the global section means all commands -# listed in CFGBLDDEF_RULE_COMMAND require the user to set it. +# true - if the option does not have a default, then setting CFGDEF_REQUIRED in the global section means all commands +# listed in CFGDEF_COMMAND require the user to set it. # false - no commands listed require it as an option but it can be set. This can be overridden for individual commands by -# setting CFGBLDDEF_RULE_REQUIRED in the CFGBLDDEF_RULE_COMMAND section. -# In CFGBLDDEF_RULE_COMMAND section: -# true - the option must be set somehow for the command, either by default (CFGBLDDEF_RULE_DEFAULT) or by the user. +# setting CFGDEF_REQUIRED in the CFGDEF_COMMAND section. +# In CFGDEF_COMMAND section: +# true - the option must be set somehow for the command, either by default (CFGDEF_DEFAULT) or by the user. # &CFGCMD_CHECK => # { -# &CFGBLDDEF_RULE_REQUIRED => true +# &CFGDEF_REQUIRED => true # }, -# false - mainly used for overriding the CFGBLDDEF_RULE_REQUIRED in the global section. +# false - mainly used for overriding the CFGDEF_REQUIRED in the global section. # -# CFGBLDDEF_RULE_DEFAULT: +# CFGDEF_DEFAULT: # Sets a default for the option for all commands if listed in the global section, or for specific commands if listed in the -# CFGBLDDEF_RULE_COMMAND section. +# CFGDEF_COMMAND section. # -# CFGBLDDEF_RULE_NEGATE: +# CFGDEF_NEGATE: # The option can be negated with "no" e.g. --no-compress. This applies tp options that are only valid on the command line (i.e. # no config section defined). All config options are automatically negatable. # -# CFGBLDDEF_RULE_DEPEND: +# CFGDEF_DEPEND: # Specify the dependencies this option has on another option. All commands listed for this option must also be listed in the # dependent option(s). -# CFGBLDDEF_RULE_DEPEND_LIST further defines the allowable settings for the depended option. +# CFGDEF_DEPEND_LIST further defines the allowable settings for the depended option. # -# CFGBLDDEF_RULE_ALLOW_LIST: +# CFGDEF_ALLOW_LIST: # Lists the allowable settings for the option. #################################################################################################################################### package pgBackRest::Config::Data; @@ -285,9 +285,11 @@ use constant CFGOPT_RECOVERY_OPTION => 'recovery #----------------------------------------------------------------------------------------------------------------------------------- # Determines how many databases can be configured use constant CFGDEF_INDEX_DB => 8; + push @EXPORT, qw(CFGDEF_INDEX_DB); # Prefix that must be used by all db options that allow multiple configurations use constant CFGDEF_PREFIX_DB => 'db'; + push @EXPORT, qw(CFGDEF_PREFIX_DB); use constant CFGOPT_DB_CMD => CFGDEF_PREFIX_DB . '-cmd'; push @EXPORT, qw(CFGOPT_DB_CMD); @@ -387,80 +389,82 @@ use constant CFGDEF_DEFAULT_DB_TIMEOUT_MIN => WAIT_TIME use constant CFGDEF_DEFAULT_DB_TIMEOUT_MAX => 86400 * 7; use constant CFGDEF_DEFAULT_RETENTION_MIN => 1; -use constant CFGDEF_DEFAULT_RETENTION_MAX => 999999999; +use constant CFGDEF_DEFAULT_RETENTION_MAX => 9999999; #################################################################################################################################### -# Option definition constants - rules, types, sections, etc. +# Option definition constants - defines, types, sections, etc. #################################################################################################################################### -# Option rules +# Option defines #----------------------------------------------------------------------------------------------------------------------------------- -use constant CFGBLDDEF_RULE_ALT_NAME => 'alt-name'; - push @EXPORT, qw(CFGBLDDEF_RULE_ALT_NAME); -use constant CFGBLDDEF_RULE_ALLOW_LIST => 'allow-list'; - push @EXPORT, qw(CFGBLDDEF_RULE_ALLOW_LIST); -use constant CFGBLDDEF_RULE_ALLOW_RANGE => 'allow-range'; - push @EXPORT, qw(CFGBLDDEF_RULE_ALLOW_RANGE); -use constant CFGBLDDEF_RULE_DEFAULT => 'default'; - push @EXPORT, qw(CFGBLDDEF_RULE_DEFAULT); -use constant CFGBLDDEF_RULE_DEPEND => 'depend'; - push @EXPORT, qw(CFGBLDDEF_RULE_DEPEND); -use constant CFGBLDDEF_RULE_DEPEND_OPTION => 'depend-option'; - push @EXPORT, qw(CFGBLDDEF_RULE_DEPEND_OPTION); -use constant CFGBLDDEF_RULE_DEPEND_LIST => 'depend-list'; - push @EXPORT, qw(CFGBLDDEF_RULE_DEPEND_LIST); -use constant CFGBLDDEF_RULE_INDEX => 'index'; - push @EXPORT, qw(CFGBLDDEF_RULE_INDEX); -use constant CFGBLDDEF_RULE_NEGATE => 'negate'; - push @EXPORT, qw(CFGBLDDEF_RULE_NEGATE); -use constant CFGBLDDEF_RULE_PREFIX => 'prefix'; - push @EXPORT, qw(CFGBLDDEF_RULE_PREFIX); -use constant CFGBLDDEF_RULE_COMMAND => 'command'; - push @EXPORT, qw(CFGBLDDEF_RULE_COMMAND); -use constant CFGBLDDEF_RULE_REQUIRED => 'required'; - push @EXPORT, qw(CFGBLDDEF_RULE_REQUIRED); -use constant CFGBLDDEF_RULE_SECTION => 'section'; - push @EXPORT, qw(CFGBLDDEF_RULE_SECTION); -use constant CFGBLDDEF_RULE_SECURE => 'secure'; - push @EXPORT, qw(CFGBLDDEF_RULE_SECURE); -use constant CFGBLDDEF_RULE_TYPE => 'type'; - push @EXPORT, qw(CFGBLDDEF_RULE_TYPE); +use constant CFGDEF_ALT_NAME => 'alt-name'; + push @EXPORT, qw(CFGDEF_ALT_NAME); +use constant CFGDEF_ALLOW_LIST => 'allow-list'; + push @EXPORT, qw(CFGDEF_ALLOW_LIST); +use constant CFGDEF_ALLOW_RANGE => 'allow-range'; + push @EXPORT, qw(CFGDEF_ALLOW_RANGE); +use constant CFGDEF_DEFAULT => 'default'; + push @EXPORT, qw(CFGDEF_DEFAULT); +use constant CFGDEF_DEPEND => 'depend'; + push @EXPORT, qw(CFGDEF_DEPEND); +use constant CFGDEF_DEPEND_OPTION => 'depend-option'; + push @EXPORT, qw(CFGDEF_DEPEND_OPTION); +use constant CFGDEF_DEPEND_LIST => 'depend-list'; + push @EXPORT, qw(CFGDEF_DEPEND_LIST); +use constant CFGDEF_INDEX => 'index'; + push @EXPORT, qw(CFGDEF_INDEX); +use constant CFGDEF_INDEX_TOTAL => 'indexTotal'; + push @EXPORT, qw(CFGDEF_INDEX_TOTAL); +use constant CFGDEF_NEGATE => 'negate'; + push @EXPORT, qw(CFGDEF_NEGATE); +use constant CFGDEF_PREFIX => 'prefix'; + push @EXPORT, qw(CFGDEF_PREFIX); +use constant CFGDEF_COMMAND => 'command'; + push @EXPORT, qw(CFGDEF_COMMAND); +use constant CFGDEF_REQUIRED => 'required'; + push @EXPORT, qw(CFGDEF_REQUIRED); +use constant CFGDEF_SECTION => 'section'; + push @EXPORT, qw(CFGDEF_SECTION); +use constant CFGDEF_SECURE => 'secure'; + push @EXPORT, qw(CFGDEF_SECURE); +use constant CFGDEF_TYPE => 'type'; + push @EXPORT, qw(CFGDEF_TYPE); -# Option rules +# Option types #----------------------------------------------------------------------------------------------------------------------------------- -use constant CFGOPTDEF_TYPE_BOOLEAN => 'boolean'; - push @EXPORT, qw(CFGOPTDEF_TYPE_BOOLEAN); -use constant CFGOPTDEF_TYPE_FLOAT => 'float'; - push @EXPORT, qw(CFGOPTDEF_TYPE_FLOAT); -use constant CFGOPTDEF_TYPE_HASH => 'hash'; - push @EXPORT, qw(CFGOPTDEF_TYPE_HASH); -use constant CFGOPTDEF_TYPE_INTEGER => 'integer'; - push @EXPORT, qw(CFGOPTDEF_TYPE_INTEGER); -use constant CFGOPTDEF_TYPE_LIST => 'list'; - push @EXPORT, qw(CFGOPTDEF_TYPE_LIST); -use constant CFGOPTDEF_TYPE_STRING => 'string'; - push @EXPORT, qw(CFGOPTDEF_TYPE_STRING); +use constant CFGDEF_TYPE_BOOLEAN => 'boolean'; + push @EXPORT, qw(CFGDEF_TYPE_BOOLEAN); +use constant CFGDEF_TYPE_FLOAT => 'float'; + push @EXPORT, qw(CFGDEF_TYPE_FLOAT); +use constant CFGDEF_TYPE_HASH => 'hash'; + push @EXPORT, qw(CFGDEF_TYPE_HASH); +use constant CFGDEF_TYPE_INTEGER => 'integer'; + push @EXPORT, qw(CFGDEF_TYPE_INTEGER); +use constant CFGDEF_TYPE_LIST => 'list'; + push @EXPORT, qw(CFGDEF_TYPE_LIST); +use constant CFGDEF_TYPE_STRING => 'string'; + push @EXPORT, qw(CFGDEF_TYPE_STRING); # Option config sections #----------------------------------------------------------------------------------------------------------------------------------- -use constant CFGDEF_SECTION_GLOBAL => 'global'; +use constant CFGDEF_SECTION_GLOBAL => 'global'; push @EXPORT, qw(CFGDEF_SECTION_GLOBAL); -use constant CFGDEF_SECTION_STANZA => 'stanza'; +use constant CFGDEF_SECTION_STANZA => 'stanza'; push @EXPORT, qw(CFGDEF_SECTION_STANZA); #################################################################################################################################### -# Option rules +# Option definition data #################################################################################################################################### -my %hOptionRule = +my %hConfigDefine = ( # Command-line only options #------------------------------------------------------------------------------------------------------------------------------- &CFGOPT_CONFIG => { - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_DEFAULT => CFGDEF_DEFAULT_CONFIG, - &CFGBLDDEF_RULE_NEGATE => true, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_DEFAULT => CFGDEF_DEFAULT_CONFIG, + &CFGDEF_NEGATE => true, + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_PUSH => {}, @@ -480,54 +484,54 @@ my %hOptionRule = &CFGOPT_DELTA => { - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_BOOLEAN, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN, + &CFGDEF_COMMAND => { &CFGCMD_RESTORE => { - &CFGBLDDEF_RULE_DEFAULT => false, + &CFGDEF_DEFAULT => false, } } }, &CFGOPT_FORCE => { - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_BOOLEAN, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN, + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => { - &CFGBLDDEF_RULE_DEFAULT => false, - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_DEFAULT => false, + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_ONLINE, - &CFGBLDDEF_RULE_DEPEND_LIST => [false], + &CFGDEF_DEPEND_OPTION => CFGOPT_ONLINE, + &CFGDEF_DEPEND_LIST => [false], }, }, &CFGCMD_RESTORE => { - &CFGBLDDEF_RULE_DEFAULT => false, + &CFGDEF_DEFAULT => false, }, &CFGCMD_STANZA_CREATE => { - &CFGBLDDEF_RULE_DEFAULT => false, + &CFGDEF_DEFAULT => false, }, &CFGCMD_STOP => { - &CFGBLDDEF_RULE_DEFAULT => false + &CFGDEF_DEFAULT => false } } }, &CFGOPT_ONLINE => { - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_BOOLEAN, - &CFGBLDDEF_RULE_NEGATE => true, - &CFGBLDDEF_RULE_DEFAULT => true, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN, + &CFGDEF_NEGATE => true, + &CFGDEF_DEFAULT => true, + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, @@ -538,20 +542,20 @@ my %hOptionRule = &CFGOPT_SET => { - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_COMMAND => { &CFGCMD_RESTORE => { - &CFGBLDDEF_RULE_DEFAULT => 'latest', + &CFGDEF_DEFAULT => 'latest', } } }, &CFGOPT_STANZA => { - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_PUSH => {}, @@ -560,38 +564,38 @@ my %hOptionRule = &CFGCMD_EXPIRE => {}, &CFGCMD_INFO => { - &CFGBLDDEF_RULE_REQUIRED => false + &CFGDEF_REQUIRED => false }, &CFGCMD_LOCAL => {}, &CFGCMD_REMOTE => { - &CFGBLDDEF_RULE_REQUIRED => false + &CFGDEF_REQUIRED => false }, &CFGCMD_RESTORE => {}, &CFGCMD_STANZA_CREATE => {}, &CFGCMD_STANZA_UPGRADE => {}, &CFGCMD_START => { - &CFGBLDDEF_RULE_REQUIRED => false + &CFGDEF_REQUIRED => false }, &CFGCMD_STOP => { - &CFGBLDDEF_RULE_REQUIRED => false + &CFGDEF_REQUIRED => false } } }, &CFGOPT_TARGET => { - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_COMMAND => { &CFGCMD_RESTORE => { - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_TYPE, - &CFGBLDDEF_RULE_DEPEND_LIST => + &CFGDEF_DEPEND_OPTION => CFGOPT_TYPE, + &CFGDEF_DEPEND_LIST => [ &CFGOPTVAL_RESTORE_TYPE_NAME, &CFGOPTVAL_RESTORE_TYPE_TIME, @@ -604,16 +608,16 @@ my %hOptionRule = &CFGOPT_TARGET_EXCLUSIVE => { - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_BOOLEAN, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN, + &CFGDEF_COMMAND => { &CFGCMD_RESTORE => { - &CFGBLDDEF_RULE_DEFAULT => false, - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_DEFAULT => false, + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_TYPE, - &CFGBLDDEF_RULE_DEPEND_LIST => + &CFGDEF_DEPEND_OPTION => CFGOPT_TYPE, + &CFGDEF_DEPEND_LIST => [ &CFGOPTVAL_RESTORE_TYPE_TIME, &CFGOPTVAL_RESTORE_TYPE_XID, @@ -625,24 +629,24 @@ my %hOptionRule = &CFGOPT_TARGET_ACTION => { - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_COMMAND => { &CFGCMD_RESTORE => { - &CFGBLDDEF_RULE_DEFAULT => CFGOPTVAL_RESTORE_TARGET_ACTION_PAUSE, + &CFGDEF_DEFAULT => CFGOPTVAL_RESTORE_TARGET_ACTION_PAUSE, - &CFGBLDDEF_RULE_ALLOW_LIST => + &CFGDEF_ALLOW_LIST => [ &CFGOPTVAL_RESTORE_TARGET_ACTION_PAUSE, &CFGOPTVAL_RESTORE_TARGET_ACTION_PROMOTE, &CFGOPTVAL_RESTORE_TARGET_ACTION_SHUTDOWN, ], - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_TYPE, - &CFGBLDDEF_RULE_DEPEND_LIST => + &CFGDEF_DEPEND_OPTION => CFGOPT_TYPE, + &CFGDEF_DEPEND_LIST => [ &CFGOPTVAL_RESTORE_TYPE_NAME, &CFGOPTVAL_RESTORE_TYPE_TIME, @@ -655,16 +659,16 @@ my %hOptionRule = &CFGOPT_TARGET_TIMELINE => { - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_COMMAND => { &CFGCMD_RESTORE => { - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_REQUIRED => false, + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_TYPE, - &CFGBLDDEF_RULE_DEPEND_LIST => + &CFGDEF_DEPEND_OPTION => CFGOPT_TYPE, + &CFGDEF_DEPEND_LIST => [ &CFGOPTVAL_RESTORE_TYPE_DEFAULT, &CFGOPTVAL_RESTORE_TYPE_NAME, @@ -678,13 +682,13 @@ my %hOptionRule = &CFGOPT_TYPE => { - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => { - &CFGBLDDEF_RULE_DEFAULT => CFGOPTVAL_BACKUP_TYPE_INCR, - &CFGBLDDEF_RULE_ALLOW_LIST => + &CFGDEF_DEFAULT => CFGOPTVAL_BACKUP_TYPE_INCR, + &CFGDEF_ALLOW_LIST => [ &CFGOPTVAL_BACKUP_TYPE_FULL, &CFGOPTVAL_BACKUP_TYPE_DIFF, @@ -694,7 +698,7 @@ my %hOptionRule = &CFGCMD_LOCAL => { - &CFGBLDDEF_RULE_ALLOW_LIST => + &CFGDEF_ALLOW_LIST => [ &CFGOPTVAL_LOCAL_TYPE_DB, &CFGOPTVAL_LOCAL_TYPE_BACKUP, @@ -703,7 +707,7 @@ my %hOptionRule = &CFGCMD_REMOTE => { - &CFGBLDDEF_RULE_ALLOW_LIST => + &CFGDEF_ALLOW_LIST => [ &CFGOPTVAL_REMOTE_TYPE_DB, &CFGOPTVAL_REMOTE_TYPE_BACKUP, @@ -712,8 +716,8 @@ my %hOptionRule = &CFGCMD_RESTORE => { - &CFGBLDDEF_RULE_DEFAULT => CFGOPTVAL_RESTORE_TYPE_DEFAULT, - &CFGBLDDEF_RULE_ALLOW_LIST => + &CFGDEF_DEFAULT => CFGOPTVAL_RESTORE_TYPE_DEFAULT, + &CFGDEF_ALLOW_LIST => [ &CFGOPTVAL_RESTORE_TYPE_NAME, &CFGOPTVAL_RESTORE_TYPE_TIME, @@ -729,13 +733,13 @@ my %hOptionRule = &CFGOPT_OUTPUT => { - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_COMMAND => { &CFGCMD_INFO => { - &CFGBLDDEF_RULE_DEFAULT => CFGOPTVAL_INFO_OUTPUT_TEXT, - &CFGBLDDEF_RULE_ALLOW_LIST => + &CFGDEF_DEFAULT => CFGOPTVAL_INFO_OUTPUT_TEXT, + &CFGDEF_ALLOW_LIST => [ &CFGOPTVAL_INFO_OUTPUT_TEXT, &CFGOPTVAL_INFO_OUTPUT_JSON, @@ -748,8 +752,8 @@ my %hOptionRule = #------------------------------------------------------------------------------------------------------------------------------- &CFGOPT_COMMAND => { - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_COMMAND => { &CFGCMD_LOCAL => {}, &CFGCMD_REMOTE => {}, @@ -758,8 +762,8 @@ my %hOptionRule = &CFGOPT_HOST_ID => { - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_INTEGER, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_TYPE => CFGDEF_TYPE_INTEGER, + &CFGDEF_COMMAND => { &CFGCMD_LOCAL => {}, }, @@ -767,16 +771,16 @@ my %hOptionRule = &CFGOPT_PROCESS => { - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_INTEGER, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_TYPE => CFGDEF_TYPE_INTEGER, + &CFGDEF_COMMAND => { &CFGCMD_LOCAL => { - &CFGBLDDEF_RULE_REQUIRED => true, + &CFGDEF_REQUIRED => true, }, &CFGCMD_REMOTE => { - &CFGBLDDEF_RULE_REQUIRED => false, + &CFGDEF_REQUIRED => false, }, }, }, @@ -785,9 +789,9 @@ my %hOptionRule = #------------------------------------------------------------------------------------------------------------------------------- &CFGOPT_TEST => { - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_BOOLEAN, - &CFGBLDDEF_RULE_DEFAULT => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN, + &CFGDEF_DEFAULT => false, + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_PUSH => {}, &CFGCMD_BACKUP => {}, @@ -796,33 +800,33 @@ my %hOptionRule = &CFGOPT_TEST_DELAY => { - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_FLOAT, - &CFGBLDDEF_RULE_DEFAULT => 5, - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_TYPE => CFGDEF_TYPE_FLOAT, + &CFGDEF_DEFAULT => 5, + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_TEST, - &CFGBLDDEF_RULE_DEPEND_LIST => [true], + &CFGDEF_DEPEND_OPTION => CFGOPT_TEST, + &CFGDEF_DEPEND_LIST => [true], }, - &CFGBLDDEF_RULE_COMMAND => CFGOPT_TEST, + &CFGDEF_COMMAND => CFGOPT_TEST, }, &CFGOPT_TEST_POINT => { - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_HASH, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_DEPEND => CFGOPT_TEST_DELAY, - &CFGBLDDEF_RULE_COMMAND => CFGOPT_TEST, + &CFGDEF_TYPE => CFGDEF_TYPE_HASH, + &CFGDEF_REQUIRED => false, + &CFGDEF_DEPEND => CFGOPT_TEST_DELAY, + &CFGDEF_COMMAND => CFGOPT_TEST, }, # General options #------------------------------------------------------------------------------------------------------------------------------- &CFGOPT_ARCHIVE_TIMEOUT => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_FLOAT, - &CFGBLDDEF_RULE_DEFAULT => 60, - &CFGBLDDEF_RULE_ALLOW_RANGE => [WAIT_TIME_MINIMUM, 86400], - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_FLOAT, + &CFGDEF_DEFAULT => 60, + &CFGDEF_ALLOW_RANGE => [WAIT_TIME_MINIMUM, 86400], + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_PUSH => {}, &CFGCMD_BACKUP => {}, @@ -832,10 +836,10 @@ my %hOptionRule = &CFGOPT_BUFFER_SIZE => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_INTEGER, - &CFGBLDDEF_RULE_DEFAULT => COMMON_IO_BUFFER_MAX, - &CFGBLDDEF_RULE_ALLOW_LIST => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_INTEGER, + &CFGDEF_DEFAULT => COMMON_IO_BUFFER_MAX, + &CFGDEF_ALLOW_LIST => [ &CFGDEF_DEFAULT_BUFFER_SIZE_MIN, &CFGDEF_DEFAULT_BUFFER_SIZE_MIN * 2, @@ -849,7 +853,7 @@ my %hOptionRule = &CFGDEF_DEFAULT_BUFFER_SIZE_MIN * 512, &CFGDEF_DEFAULT_BUFFER_SIZE_MIN * 1024, ], - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_PUSH => {}, @@ -867,11 +871,11 @@ my %hOptionRule = &CFGOPT_DB_TIMEOUT => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_FLOAT, - &CFGBLDDEF_RULE_DEFAULT => CFGDEF_DEFAULT_DB_TIMEOUT, - &CFGBLDDEF_RULE_ALLOW_RANGE => [CFGDEF_DEFAULT_DB_TIMEOUT_MIN, CFGDEF_DEFAULT_DB_TIMEOUT_MAX], - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_FLOAT, + &CFGDEF_DEFAULT => CFGDEF_DEFAULT_DB_TIMEOUT, + &CFGDEF_ALLOW_RANGE => [CFGDEF_DEFAULT_DB_TIMEOUT_MIN, CFGDEF_DEFAULT_DB_TIMEOUT_MAX], + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_PUSH => {}, @@ -886,10 +890,10 @@ my %hOptionRule = &CFGOPT_COMPRESS => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_BOOLEAN, - &CFGBLDDEF_RULE_DEFAULT => true, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN, + &CFGDEF_DEFAULT => true, + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_PUSH => {}, @@ -900,11 +904,11 @@ my %hOptionRule = &CFGOPT_COMPRESS_LEVEL => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_INTEGER, - &CFGBLDDEF_RULE_DEFAULT => 6, - &CFGBLDDEF_RULE_ALLOW_RANGE => [CFGDEF_DEFAULT_COMPRESS_LEVEL_MIN, CFGDEF_DEFAULT_COMPRESS_LEVEL_MAX], - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_INTEGER, + &CFGDEF_DEFAULT => 6, + &CFGDEF_ALLOW_RANGE => [CFGDEF_DEFAULT_COMPRESS_LEVEL_MIN, CFGDEF_DEFAULT_COMPRESS_LEVEL_MAX], + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_PUSH => {}, @@ -921,11 +925,11 @@ my %hOptionRule = &CFGOPT_COMPRESS_LEVEL_NETWORK => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_INTEGER, - &CFGBLDDEF_RULE_DEFAULT => 3, - &CFGBLDDEF_RULE_ALLOW_RANGE => [CFGDEF_DEFAULT_COMPRESS_LEVEL_MIN, CFGDEF_DEFAULT_COMPRESS_LEVEL_MAX], - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_INTEGER, + &CFGDEF_DEFAULT => 3, + &CFGDEF_ALLOW_RANGE => [CFGDEF_DEFAULT_COMPRESS_LEVEL_MIN, CFGDEF_DEFAULT_COMPRESS_LEVEL_MAX], + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_PUSH => {}, @@ -942,10 +946,10 @@ my %hOptionRule = &CFGOPT_NEUTRAL_UMASK => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_BOOLEAN, - &CFGBLDDEF_RULE_DEFAULT => true, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN, + &CFGDEF_DEFAULT => true, + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_PUSH => {}, @@ -964,10 +968,10 @@ my %hOptionRule = &CFGOPT_CMD_SSH => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_DEFAULT => 'ssh', - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_DEFAULT => 'ssh', + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_PUSH => {}, @@ -986,10 +990,10 @@ my %hOptionRule = &CFGOPT_LOCK_PATH => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_DEFAULT => '/tmp/' . BACKREST_EXE, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_DEFAULT => '/tmp/' . BACKREST_EXE, + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_PUSH => {}, @@ -1008,10 +1012,10 @@ my %hOptionRule = &CFGOPT_LOG_PATH => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_DEFAULT => '/var/log/' . BACKREST_EXE, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_DEFAULT => '/var/log/' . BACKREST_EXE, + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_PUSH => {}, @@ -1031,11 +1035,11 @@ my %hOptionRule = &CFGOPT_PROTOCOL_TIMEOUT => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_FLOAT, - &CFGBLDDEF_RULE_DEFAULT => CFGDEF_DEFAULT_DB_TIMEOUT + 30, - &CFGBLDDEF_RULE_ALLOW_RANGE => [CFGDEF_DEFAULT_DB_TIMEOUT_MIN, CFGDEF_DEFAULT_DB_TIMEOUT_MAX], - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_FLOAT, + &CFGDEF_DEFAULT => CFGDEF_DEFAULT_DB_TIMEOUT + 30, + &CFGDEF_ALLOW_RANGE => [CFGDEF_DEFAULT_DB_TIMEOUT_MIN, CFGDEF_DEFAULT_DB_TIMEOUT_MAX], + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_PUSH => {}, @@ -1052,10 +1056,10 @@ my %hOptionRule = &CFGOPT_REPO_PATH => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_DEFAULT => '/var/lib/' . BACKREST_EXE, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_DEFAULT => '/var/lib/' . BACKREST_EXE, + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_PUSH => {}, @@ -1075,14 +1079,14 @@ my %hOptionRule = &CFGOPT_REPO_S3_BUCKET => { - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_REPO_TYPE, - &CFGBLDDEF_RULE_DEPEND_LIST => [CFGOPTVAL_REPO_TYPE_S3], + &CFGDEF_DEPEND_OPTION => CFGOPT_REPO_TYPE, + &CFGDEF_DEPEND_LIST => [CFGOPTVAL_REPO_TYPE_S3], }, - &CFGBLDDEF_RULE_COMMAND => CFGOPT_REPO_TYPE, + &CFGDEF_COMMAND => CFGOPT_REPO_TYPE, }, &CFGOPT_REPO_S3_CA_FILE => &CFGOPT_REPO_S3_HOST, @@ -1090,16 +1094,16 @@ my %hOptionRule = &CFGOPT_REPO_S3_KEY => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_SECURE => true, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_SECURE => true, + &CFGDEF_REQUIRED => false, + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_REPO_TYPE, - &CFGBLDDEF_RULE_DEPEND_LIST => [CFGOPTVAL_REPO_TYPE_S3], + &CFGDEF_DEPEND_OPTION => CFGOPT_REPO_TYPE, + &CFGDEF_DEPEND_LIST => [CFGOPTVAL_REPO_TYPE_S3], }, - &CFGBLDDEF_RULE_COMMAND => CFGOPT_REPO_TYPE, + &CFGDEF_COMMAND => CFGOPT_REPO_TYPE, }, &CFGOPT_REPO_S3_KEY_SECRET => CFGOPT_REPO_S3_KEY, @@ -1108,36 +1112,36 @@ my %hOptionRule = &CFGOPT_REPO_S3_HOST => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_DEPEND => CFGOPT_REPO_S3_BUCKET, - &CFGBLDDEF_RULE_COMMAND => CFGOPT_REPO_TYPE, + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_REQUIRED => false, + &CFGDEF_DEPEND => CFGOPT_REPO_S3_BUCKET, + &CFGDEF_COMMAND => CFGOPT_REPO_TYPE, }, &CFGOPT_REPO_S3_REGION => CFGOPT_REPO_S3_BUCKET, &CFGOPT_REPO_S3_VERIFY_SSL => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_BOOLEAN, - &CFGBLDDEF_RULE_DEFAULT => true, - &CFGBLDDEF_RULE_COMMAND => CFGOPT_REPO_TYPE, - &CFGBLDDEF_RULE_DEPEND => CFGOPT_REPO_S3_BUCKET, + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN, + &CFGDEF_DEFAULT => true, + &CFGDEF_COMMAND => CFGOPT_REPO_TYPE, + &CFGDEF_DEPEND => CFGOPT_REPO_S3_BUCKET, }, &CFGOPT_REPO_TYPE => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_DEFAULT => CFGOPTVAL_REPO_TYPE_POSIX, - &CFGBLDDEF_RULE_ALLOW_LIST => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_DEFAULT => CFGOPTVAL_REPO_TYPE_POSIX, + &CFGDEF_ALLOW_LIST => [ &CFGOPTVAL_REPO_TYPE_CIFS, &CFGOPTVAL_REPO_TYPE_POSIX, &CFGOPTVAL_REPO_TYPE_S3, ], - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_PUSH => {}, @@ -1157,28 +1161,28 @@ my %hOptionRule = &CFGOPT_SPOOL_PATH => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_DEFAULT => '/var/spool/' . BACKREST_EXE, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_DEFAULT => '/var/spool/' . BACKREST_EXE, + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_PUSH => {}, }, - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_ARCHIVE_ASYNC, - &CFGBLDDEF_RULE_DEPEND_LIST => [true], + &CFGDEF_DEPEND_OPTION => CFGOPT_ARCHIVE_ASYNC, + &CFGDEF_DEPEND_LIST => [true], }, }, &CFGOPT_PROCESS_MAX => { - &CFGBLDDEF_RULE_ALT_NAME => 'thread-max', - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_INTEGER, - &CFGBLDDEF_RULE_DEFAULT => 1, - &CFGBLDDEF_RULE_ALLOW_RANGE => [1, 96], - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_ALT_NAME => 'thread-max', + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_INTEGER, + &CFGDEF_DEFAULT => 1, + &CFGDEF_ALLOW_RANGE => [1, 96], + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_PUSH => {}, &CFGCMD_BACKUP => {}, @@ -1190,10 +1194,10 @@ my %hOptionRule = #------------------------------------------------------------------------------------------------------------------------------- &CFGOPT_LOG_LEVEL_CONSOLE => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_DEFAULT => lc(WARN), - &CFGBLDDEF_RULE_ALLOW_LIST => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_DEFAULT => lc(WARN), + &CFGDEF_ALLOW_LIST => [ lc(OFF), lc(ERROR), @@ -1203,7 +1207,7 @@ my %hOptionRule = lc(DEBUG), lc(TRACE), ], - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_PUSH => {}, @@ -1221,20 +1225,20 @@ my %hOptionRule = &CFGOPT_LOG_LEVEL_FILE => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_DEFAULT => lc(INFO), - &CFGBLDDEF_RULE_ALLOW_LIST => CFGOPT_LOG_LEVEL_CONSOLE, - &CFGBLDDEF_RULE_COMMAND => CFGOPT_LOG_LEVEL_CONSOLE, + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_DEFAULT => lc(INFO), + &CFGDEF_ALLOW_LIST => CFGOPT_LOG_LEVEL_CONSOLE, + &CFGDEF_COMMAND => CFGOPT_LOG_LEVEL_CONSOLE, }, &CFGOPT_LOG_LEVEL_STDERR => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_DEFAULT => lc(WARN), - &CFGBLDDEF_RULE_ALLOW_LIST => CFGOPT_LOG_LEVEL_CONSOLE, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_DEFAULT => lc(WARN), + &CFGDEF_ALLOW_LIST => CFGOPT_LOG_LEVEL_CONSOLE, + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_PUSH => {}, @@ -1252,20 +1256,20 @@ my %hOptionRule = &CFGOPT_LOG_TIMESTAMP => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_BOOLEAN, - &CFGBLDDEF_RULE_DEFAULT => true, - &CFGBLDDEF_RULE_COMMAND => CFGOPT_LOG_LEVEL_CONSOLE, + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN, + &CFGDEF_DEFAULT => true, + &CFGDEF_COMMAND => CFGOPT_LOG_LEVEL_CONSOLE, }, # Archive options #------------------------------------------------------------------------------------------------------------------------------- &CFGOPT_ARCHIVE_ASYNC => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_BOOLEAN, - &CFGBLDDEF_RULE_DEFAULT => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN, + &CFGDEF_DEFAULT => false, + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_PUSH => {}, } @@ -1274,10 +1278,10 @@ my %hOptionRule = # Deprecated and to be removed &CFGOPT_ARCHIVE_MAX_MB => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_INTEGER, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_INTEGER, + &CFGDEF_REQUIRED => false, + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_PUSH => {}, } @@ -1285,10 +1289,10 @@ my %hOptionRule = &CFGOPT_ARCHIVE_QUEUE_MAX => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_INTEGER, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_INTEGER, + &CFGDEF_REQUIRED => false, + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_PUSH => {}, }, @@ -1298,15 +1302,15 @@ my %hOptionRule = #------------------------------------------------------------------------------------------------------------------------------- &CFGOPT_ARCHIVE_CHECK => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_BOOLEAN, - &CFGBLDDEF_RULE_DEFAULT => true, - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN, + &CFGDEF_DEFAULT => true, + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_ONLINE, - &CFGBLDDEF_RULE_DEPEND_LIST => [true], + &CFGDEF_DEPEND_OPTION => CFGOPT_ONLINE, + &CFGDEF_DEPEND_LIST => [true], }, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, @@ -1315,17 +1319,17 @@ my %hOptionRule = &CFGOPT_ARCHIVE_COPY => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_BOOLEAN, - &CFGBLDDEF_RULE_DEFAULT => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN, + &CFGDEF_DEFAULT => false, + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => { - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_ARCHIVE_CHECK, - &CFGBLDDEF_RULE_DEPEND_LIST => [true], + &CFGDEF_DEPEND_OPTION => CFGOPT_ARCHIVE_CHECK, + &CFGDEF_DEPEND_LIST => [true], } } } @@ -1333,34 +1337,34 @@ my %hOptionRule = &CFGOPT_BACKUP_CMD => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_COMMAND => CFGOPT_BACKUP_HOST, - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_REQUIRED => false, + &CFGDEF_COMMAND => CFGOPT_BACKUP_HOST, + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_BACKUP_HOST + &CFGDEF_DEPEND_OPTION => CFGOPT_BACKUP_HOST }, }, &CFGOPT_BACKUP_CONFIG => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_DEFAULT => CFGDEF_DEFAULT_CONFIG, - &CFGBLDDEF_RULE_COMMAND => CFGOPT_BACKUP_HOST, - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_DEFAULT => CFGDEF_DEFAULT_CONFIG, + &CFGDEF_COMMAND => CFGOPT_BACKUP_HOST, + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_BACKUP_HOST + &CFGDEF_DEPEND_OPTION => CFGOPT_BACKUP_HOST }, }, &CFGOPT_BACKUP_HOST => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_REQUIRED => false, + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_GET => {}, &CFGCMD_ARCHIVE_PUSH => {}, @@ -1377,22 +1381,22 @@ my %hOptionRule = &CFGOPT_BACKUP_SSH_PORT => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_INTEGER, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_COMMAND => CFGOPT_BACKUP_HOST, - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_INTEGER, + &CFGDEF_REQUIRED => false, + &CFGDEF_COMMAND => CFGOPT_BACKUP_HOST, + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_BACKUP_HOST + &CFGDEF_DEPEND_OPTION => CFGOPT_BACKUP_HOST } }, &CFGOPT_BACKUP_STANDBY => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_BOOLEAN, - &CFGBLDDEF_RULE_DEFAULT => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN, + &CFGDEF_DEFAULT => false, + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, @@ -1403,23 +1407,23 @@ my %hOptionRule = &CFGOPT_BACKUP_USER => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_DEFAULT => 'backrest', - &CFGBLDDEF_RULE_COMMAND => CFGOPT_BACKUP_HOST, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_DEFAULT => 'backrest', + &CFGDEF_COMMAND => CFGOPT_BACKUP_HOST, + &CFGDEF_REQUIRED => false, + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_BACKUP_HOST + &CFGDEF_DEPEND_OPTION => CFGOPT_BACKUP_HOST } }, &CFGOPT_CHECKSUM_PAGE => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_BOOLEAN, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN, + &CFGDEF_REQUIRED => false, + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => {}, } @@ -1427,10 +1431,10 @@ my %hOptionRule = &CFGOPT_HARDLINK => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_BOOLEAN, - &CFGBLDDEF_RULE_DEFAULT => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN, + &CFGDEF_DEFAULT => false, + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => {}, } @@ -1438,10 +1442,10 @@ my %hOptionRule = &CFGOPT_MANIFEST_SAVE_THRESHOLD => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_INTEGER, - &CFGBLDDEF_RULE_DEFAULT => 1073741824, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_INTEGER, + &CFGDEF_DEFAULT => 1073741824, + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => {}, } @@ -1449,10 +1453,10 @@ my %hOptionRule = &CFGOPT_RESUME => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_BOOLEAN, - &CFGBLDDEF_RULE_DEFAULT => true, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN, + &CFGDEF_DEFAULT => true, + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => {}, } @@ -1460,10 +1464,10 @@ my %hOptionRule = &CFGOPT_START_FAST => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_BOOLEAN, - &CFGBLDDEF_RULE_DEFAULT => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN, + &CFGDEF_DEFAULT => false, + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => {}, } @@ -1471,10 +1475,10 @@ my %hOptionRule = &CFGOPT_STOP_AUTO => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_BOOLEAN, - &CFGBLDDEF_RULE_DEFAULT => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN, + &CFGDEF_DEFAULT => false, + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => {}, } @@ -1484,11 +1488,11 @@ my %hOptionRule = #------------------------------------------------------------------------------------------------------------------------------- &CFGOPT_RETENTION_ARCHIVE => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_INTEGER, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_ALLOW_RANGE => [CFGDEF_DEFAULT_RETENTION_MIN, CFGDEF_DEFAULT_RETENTION_MAX], - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_INTEGER, + &CFGDEF_REQUIRED => false, + &CFGDEF_ALLOW_RANGE => [CFGDEF_DEFAULT_RETENTION_MIN, CFGDEF_DEFAULT_RETENTION_MAX], + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => {}, &CFGCMD_EXPIRE => {}, @@ -1497,15 +1501,15 @@ my %hOptionRule = &CFGOPT_RETENTION_ARCHIVE_TYPE => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_DEFAULT => CFGOPTVAL_BACKUP_TYPE_FULL, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_DEFAULT => CFGOPTVAL_BACKUP_TYPE_FULL, + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => {}, &CFGCMD_EXPIRE => {}, }, - &CFGBLDDEF_RULE_ALLOW_LIST => + &CFGDEF_ALLOW_LIST => [ &CFGOPTVAL_BACKUP_TYPE_FULL, &CFGOPTVAL_BACKUP_TYPE_DIFF, @@ -1515,11 +1519,11 @@ my %hOptionRule = &CFGOPT_RETENTION_DIFF => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_INTEGER, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_ALLOW_RANGE => [CFGDEF_DEFAULT_RETENTION_MIN, CFGDEF_DEFAULT_RETENTION_MAX], - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_INTEGER, + &CFGDEF_REQUIRED => false, + &CFGDEF_ALLOW_RANGE => [CFGDEF_DEFAULT_RETENTION_MIN, CFGDEF_DEFAULT_RETENTION_MAX], + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => {}, &CFGCMD_EXPIRE => {}, @@ -1528,11 +1532,11 @@ my %hOptionRule = &CFGOPT_RETENTION_FULL => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_INTEGER, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_ALLOW_RANGE => [CFGDEF_DEFAULT_RETENTION_MIN, CFGDEF_DEFAULT_RETENTION_MAX], - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_INTEGER, + &CFGDEF_REQUIRED => false, + &CFGDEF_ALLOW_RANGE => [CFGDEF_DEFAULT_RETENTION_MIN, CFGDEF_DEFAULT_RETENTION_MAX], + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => {}, &CFGCMD_EXPIRE => {}, @@ -1543,10 +1547,10 @@ my %hOptionRule = #------------------------------------------------------------------------------------------------------------------------------- &CFGOPT_DB_INCLUDE => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_LIST, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_LIST, + &CFGDEF_REQUIRED => false, + &CFGDEF_COMMAND => { &CFGCMD_RESTORE => {}, }, @@ -1554,10 +1558,10 @@ my %hOptionRule = &CFGOPT_LINK_ALL => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_BOOLEAN, - &CFGBLDDEF_RULE_DEFAULT => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN, + &CFGDEF_DEFAULT => false, + &CFGDEF_COMMAND => { &CFGCMD_RESTORE => {}, } @@ -1565,10 +1569,10 @@ my %hOptionRule = &CFGOPT_LINK_MAP => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_HASH, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_HASH, + &CFGDEF_REQUIRED => false, + &CFGDEF_COMMAND => { &CFGCMD_RESTORE => {}, }, @@ -1576,10 +1580,10 @@ my %hOptionRule = &CFGOPT_TABLESPACE_MAP_ALL => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_REQUIRED => false, + &CFGDEF_COMMAND => { &CFGCMD_RESTORE => {}, } @@ -1587,10 +1591,10 @@ my %hOptionRule = &CFGOPT_TABLESPACE_MAP => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_HASH, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_HASH, + &CFGDEF_REQUIRED => false, + &CFGDEF_COMMAND => { &CFGCMD_RESTORE => {}, }, @@ -1598,17 +1602,17 @@ my %hOptionRule = &CFGOPT_RECOVERY_OPTION => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_HASH, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_HASH, + &CFGDEF_REQUIRED => false, + &CFGDEF_COMMAND => { &CFGCMD_RESTORE => {}, }, - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_TYPE, - &CFGBLDDEF_RULE_DEPEND_LIST => + &CFGDEF_DEPEND_OPTION => CFGOPT_TYPE, + &CFGDEF_DEPEND_LIST => [ &CFGOPTVAL_RESTORE_TYPE_DEFAULT, &CFGOPTVAL_RESTORE_TYPE_NAME, @@ -1622,11 +1626,11 @@ my %hOptionRule = #------------------------------------------------------------------------------------------------------------------------------- &CFGOPT_DB_CMD => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_PREFIX => CFGDEF_PREFIX_DB, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_PREFIX => CFGDEF_PREFIX_DB, + &CFGDEF_REQUIRED => false, + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, @@ -1637,19 +1641,19 @@ my %hOptionRule = &CFGCMD_START => {}, &CFGCMD_STOP => {}, }, - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_DB_HOST + &CFGDEF_DEPEND_OPTION => CFGOPT_DB_HOST }, }, &CFGOPT_DB_CONFIG => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_GLOBAL, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_PREFIX => CFGDEF_PREFIX_DB, - &CFGBLDDEF_RULE_DEFAULT => CFGDEF_DEFAULT_CONFIG, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_PREFIX => CFGDEF_PREFIX_DB, + &CFGDEF_DEFAULT => CFGDEF_DEFAULT_CONFIG, + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, @@ -1660,19 +1664,19 @@ my %hOptionRule = &CFGCMD_START => {}, &CFGCMD_STOP => {}, }, - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_DB_HOST + &CFGDEF_DEPEND_OPTION => CFGOPT_DB_HOST }, }, &CFGOPT_DB_HOST => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_STANZA, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_PREFIX => CFGDEF_PREFIX_DB, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_STANZA, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_PREFIX => CFGDEF_PREFIX_DB, + &CFGDEF_REQUIRED => false, + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_PUSH => {}, &CFGCMD_BACKUP => {}, @@ -1688,29 +1692,29 @@ my %hOptionRule = &CFGOPT_DB_PATH => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_STANZA, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_PREFIX => CFGDEF_PREFIX_DB, - &CFGBLDDEF_RULE_REQUIRED => true, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_STANZA, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_PREFIX => CFGDEF_PREFIX_DB, + &CFGDEF_REQUIRED => true, + &CFGDEF_COMMAND => { &CFGCMD_ARCHIVE_GET => { - &CFGBLDDEF_RULE_REQUIRED => false + &CFGDEF_REQUIRED => false }, &CFGCMD_ARCHIVE_PUSH => { - &CFGBLDDEF_RULE_REQUIRED => false + &CFGDEF_REQUIRED => false }, &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, &CFGCMD_LOCAL => { - &CFGBLDDEF_RULE_REQUIRED => false + &CFGDEF_REQUIRED => false }, &CFGCMD_REMOTE => { - &CFGBLDDEF_RULE_REQUIRED => false + &CFGDEF_REQUIRED => false }, &CFGCMD_RESTORE => {}, &CFGCMD_STANZA_CREATE => {}, @@ -1720,11 +1724,11 @@ my %hOptionRule = &CFGOPT_DB_PORT => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_STANZA, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_INTEGER, - &CFGBLDDEF_RULE_PREFIX => CFGDEF_PREFIX_DB, - &CFGBLDDEF_RULE_DEFAULT => 5432, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_STANZA, + &CFGDEF_TYPE => CFGDEF_TYPE_INTEGER, + &CFGDEF_PREFIX => CFGDEF_PREFIX_DB, + &CFGDEF_DEFAULT => 5432, + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, @@ -1736,24 +1740,24 @@ my %hOptionRule = &CFGOPT_DB_SSH_PORT => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_STANZA, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_INTEGER, - &CFGBLDDEF_RULE_PREFIX => CFGDEF_PREFIX_DB, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_COMMAND => CFGOPT_DB_HOST, - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_SECTION => CFGDEF_SECTION_STANZA, + &CFGDEF_TYPE => CFGDEF_TYPE_INTEGER, + &CFGDEF_PREFIX => CFGDEF_PREFIX_DB, + &CFGDEF_REQUIRED => false, + &CFGDEF_COMMAND => CFGOPT_DB_HOST, + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_DB_HOST + &CFGDEF_DEPEND_OPTION => CFGOPT_DB_HOST }, }, &CFGOPT_DB_SOCKET_PATH => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_STANZA, - &CFGBLDDEF_RULE_PREFIX => CFGDEF_PREFIX_DB, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_STANZA, + &CFGDEF_PREFIX => CFGDEF_PREFIX_DB, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_REQUIRED => false, + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, @@ -1766,11 +1770,11 @@ my %hOptionRule = &CFGOPT_DB_USER => { - &CFGBLDDEF_RULE_SECTION => CFGDEF_SECTION_STANZA, - &CFGBLDDEF_RULE_PREFIX => CFGDEF_PREFIX_DB, - &CFGBLDDEF_RULE_TYPE => CFGOPTDEF_TYPE_STRING, - &CFGBLDDEF_RULE_DEFAULT => 'postgres', - &CFGBLDDEF_RULE_COMMAND => + &CFGDEF_SECTION => CFGDEF_SECTION_STANZA, + &CFGDEF_PREFIX => CFGDEF_PREFIX_DB, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_DEFAULT => 'postgres', + &CFGDEF_COMMAND => { &CFGCMD_BACKUP => {}, &CFGCMD_CHECK => {}, @@ -1778,141 +1782,159 @@ my %hOptionRule = &CFGCMD_STANZA_CREATE => {}, &CFGCMD_STANZA_UPGRADE => {}, }, - &CFGBLDDEF_RULE_REQUIRED => false, - &CFGBLDDEF_RULE_DEPEND => + &CFGDEF_REQUIRED => false, + &CFGDEF_DEPEND => { - &CFGBLDDEF_RULE_DEPEND_OPTION => CFGOPT_DB_HOST + &CFGDEF_DEPEND_OPTION => CFGOPT_DB_HOST }, }, ); #################################################################################################################################### -# Process rule defaults +# Process define defaults #################################################################################################################################### -foreach my $strKey (sort(keys(%hOptionRule))) +foreach my $strKey (sort(keys(%hConfigDefine))) { - # If the rule is a scalar then copy the entire rule from the referenced option - if (!ref($hOptionRule{$strKey})) + # If the define is a scalar then copy the entire define from the referenced option + if (!ref($hConfigDefine{$strKey})) { - $hOptionRule{$strKey} = dclone($hOptionRule{$hOptionRule{$strKey}}); + $hConfigDefine{$strKey} = dclone($hConfigDefine{$hConfigDefine{$strKey}}); } # If the command section is a scalar then copy the section from the referenced option - if (defined($hOptionRule{$strKey}{&CFGBLDDEF_RULE_COMMAND}) && !ref($hOptionRule{$strKey}{&CFGBLDDEF_RULE_COMMAND})) + if (defined($hConfigDefine{$strKey}{&CFGDEF_COMMAND}) && !ref($hConfigDefine{$strKey}{&CFGDEF_COMMAND})) { - $hOptionRule{$strKey}{&CFGBLDDEF_RULE_COMMAND} = - dclone($hOptionRule{$hOptionRule{$strKey}{&CFGBLDDEF_RULE_COMMAND}}{&CFGBLDDEF_RULE_COMMAND}); + $hConfigDefine{$strKey}{&CFGDEF_COMMAND} = + dclone($hConfigDefine{$hConfigDefine{$strKey}{&CFGDEF_COMMAND}}{&CFGDEF_COMMAND}); } # If the required section is a scalar then copy the section from the referenced option - if (defined($hOptionRule{$strKey}{&CFGBLDDEF_RULE_DEPEND}) && !ref($hOptionRule{$strKey}{&CFGBLDDEF_RULE_DEPEND})) + if (defined($hConfigDefine{$strKey}{&CFGDEF_DEPEND}) && !ref($hConfigDefine{$strKey}{&CFGDEF_DEPEND})) { - $hOptionRule{$strKey}{&CFGBLDDEF_RULE_DEPEND} = - dclone($hOptionRule{$hOptionRule{$strKey}{&CFGBLDDEF_RULE_DEPEND}}{&CFGBLDDEF_RULE_DEPEND}); + $hConfigDefine{$strKey}{&CFGDEF_DEPEND} = + dclone($hConfigDefine{$hConfigDefine{$strKey}{&CFGDEF_DEPEND}}{&CFGDEF_DEPEND}); } # If the allow list is a scalar then copy the list from the referenced option - if (defined($hOptionRule{$strKey}{&CFGBLDDEF_RULE_ALLOW_LIST}) && !ref($hOptionRule{$strKey}{&CFGBLDDEF_RULE_ALLOW_LIST})) + if (defined($hConfigDefine{$strKey}{&CFGDEF_ALLOW_LIST}) && !ref($hConfigDefine{$strKey}{&CFGDEF_ALLOW_LIST})) { - $hOptionRule{$strKey}{&CFGBLDDEF_RULE_ALLOW_LIST} = - dclone($hOptionRule{$hOptionRule{$strKey}{&CFGBLDDEF_RULE_ALLOW_LIST}}{&CFGBLDDEF_RULE_ALLOW_LIST}); + $hConfigDefine{$strKey}{&CFGDEF_ALLOW_LIST} = + dclone($hConfigDefine{$hConfigDefine{$strKey}{&CFGDEF_ALLOW_LIST}}{&CFGDEF_ALLOW_LIST}); } # Default type is string - if (!defined($hOptionRule{$strKey}{&CFGBLDDEF_RULE_TYPE})) + if (!defined($hConfigDefine{$strKey}{&CFGDEF_TYPE})) { &log(ASSERT, "type is required for option '${strKey}'"); } - # All boolean config options can be negated. Boolean command-line options must be marked for negation individually. - if ($hOptionRule{$strKey}{&CFGBLDDEF_RULE_TYPE} eq CFGOPTDEF_TYPE_BOOLEAN && - defined($hOptionRule{$strKey}{&CFGBLDDEF_RULE_SECTION})) + # Default required is true + if (!defined($hConfigDefine{$strKey}{&CFGDEF_REQUIRED})) { - $hOptionRule{$strKey}{&CFGBLDDEF_RULE_NEGATE} = true; + $hConfigDefine{$strKey}{&CFGDEF_REQUIRED} = true; + } + + if (!defined($hConfigDefine{$strKey}{&CFGDEF_INDEX})) + { + } + + # Set index total for db-* + if (defined($hConfigDefine{$strKey}{&CFGDEF_PREFIX}) && + $hConfigDefine{$strKey}{&CFGDEF_PREFIX} eq CFGDEF_PREFIX_DB) + { + $hConfigDefine{$strKey}{&CFGDEF_INDEX_TOTAL} = CFGDEF_INDEX_DB; + } + # Else default index total is 1 + else + { + $hConfigDefine{$strKey}{&CFGDEF_INDEX_TOTAL} = 1; + } + + # All boolean config options can be negated. Boolean command-line options must be marked for negation individually. + if ($hConfigDefine{$strKey}{&CFGDEF_TYPE} eq CFGDEF_TYPE_BOOLEAN && + defined($hConfigDefine{$strKey}{&CFGDEF_SECTION})) + { + $hConfigDefine{$strKey}{&CFGDEF_NEGATE} = true; } # Default for negation is false - if (!defined($hOptionRule{$strKey}{&CFGBLDDEF_RULE_NEGATE})) + if (!defined($hConfigDefine{$strKey}{&CFGDEF_NEGATE})) { - $hOptionRule{$strKey}{&CFGBLDDEF_RULE_NEGATE} = false; + $hConfigDefine{$strKey}{&CFGDEF_NEGATE} = false; } # By default options are not secure - if (!defined($hOptionRule{$strKey}{&CFGBLDDEF_RULE_SECURE})) + if (!defined($hConfigDefine{$strKey}{&CFGDEF_SECURE})) { - $hOptionRule{$strKey}{&CFGBLDDEF_RULE_SECURE} = false; + $hConfigDefine{$strKey}{&CFGDEF_SECURE} = false; } # Set all indices to 1 by default - this defines how many copies of any option there can be - if (!defined($hOptionRule{$strKey}{&CFGBLDDEF_RULE_INDEX})) + if (!defined($hConfigDefine{$strKey}{&CFGDEF_INDEX_TOTAL})) { - $hOptionRule{$strKey}{&CFGBLDDEF_RULE_INDEX} = 1; + $hConfigDefine{$strKey}{&CFGDEF_INDEX_TOTAL} = 1; } } #################################################################################################################################### -# Generate indexed rules +# Get configuration definition #################################################################################################################################### -my $rhOptionRuleIndex = dclone(\%hOptionRule); - -foreach my $strKey (sort(keys(%{$rhOptionRuleIndex}))) +sub cfgDefine { - # Build options for all possible db configurations - if (defined($rhOptionRuleIndex->{$strKey}{&CFGBLDDEF_RULE_PREFIX}) && - $rhOptionRuleIndex->{$strKey}{&CFGBLDDEF_RULE_PREFIX} eq CFGDEF_PREFIX_DB) - { - my $strPrefix = $rhOptionRuleIndex->{$strKey}{&CFGBLDDEF_RULE_PREFIX}; - $rhOptionRuleIndex->{$strKey}{&CFGBLDDEF_RULE_INDEX} = CFGDEF_INDEX_DB; + return dclone(\%hConfigDefine); +} - for (my $iIndex = 1; $iIndex <= CFGDEF_INDEX_DB; $iIndex++) +push @EXPORT, qw(cfgDefine); + + +#################################################################################################################################### +# Get list of all commands +#################################################################################################################################### +sub cfgDefineCommandList +{ + my $rhCommandMap; + + # Get unique list of commands + foreach my $strOption (sort(keys(%hConfigDefine))) + { + foreach my $strCommand (sort(keys(%{$hConfigDefine{$strOption}{&CFGDEF_COMMAND}}))) { - my $strKeyNew = "${strPrefix}${iIndex}" . substr($strKey, length($strPrefix)); - - $rhOptionRuleIndex->{$strKeyNew} = dclone($rhOptionRuleIndex->{$strKey}); - - # Create the alternate name for option index 1 - if ($iIndex == 1) - { - $rhOptionRuleIndex->{$strKeyNew}{&CFGBLDDEF_RULE_ALT_NAME} = $strKey; - } - else - { - $rhOptionRuleIndex->{$strKeyNew}{&CFGBLDDEF_RULE_REQUIRED} = false; - } - - if (defined($rhOptionRuleIndex->{$strKeyNew}{&CFGBLDDEF_RULE_DEPEND}) && - defined($rhOptionRuleIndex->{$strKeyNew}{&CFGBLDDEF_RULE_DEPEND}{&CFGBLDDEF_RULE_DEPEND_OPTION})) - { - $rhOptionRuleIndex->{$strKeyNew}{&CFGBLDDEF_RULE_DEPEND}{&CFGBLDDEF_RULE_DEPEND_OPTION} = - "${strPrefix}${iIndex}" . - substr( - $rhOptionRuleIndex->{$strKeyNew}{&CFGBLDDEF_RULE_DEPEND}{&CFGBLDDEF_RULE_DEPEND_OPTION}, - length($strPrefix)); - } + $rhCommandMap->{$strCommand} = true; } - - delete($rhOptionRuleIndex->{$strKey}); } + + # Add special commands + $rhCommandMap->{&CFGCMD_HELP} = true; + $rhCommandMap->{&CFGCMD_VERSION} = true; + + # Return sorted list + return (sort(keys(%{$rhCommandMap}))); } +push @EXPORT, qw(cfgDefineCommandList); + #################################################################################################################################### -# cfgdefRule - get option rules without indexed options +# Get list of all option types #################################################################################################################################### -sub cfgdefRule +sub cfgDefineOptionTypeList { - return dclone(\%hOptionRule); + my $rhOptionTypeMap; + + # Get unique list of types + foreach my $strOption (sort(keys(%hConfigDefine))) + { + my $strOptionType = $hConfigDefine{$strOption}{&CFGDEF_TYPE}; + + if (!defined($rhOptionTypeMap->{$strOptionType})) + { + $rhOptionTypeMap->{$strOptionType} = true; + } + }; + + # Return sorted list + return (sort(keys(%{$rhOptionTypeMap}))); } -push @EXPORT, qw(cfgdefRule); - -#################################################################################################################################### -# cfgdefRuleIndex - get option rules -#################################################################################################################################### -sub cfgdefRuleIndex -{ - return dclone($rhOptionRuleIndex); -} - -push @EXPORT, qw(cfgdefRuleIndex); +push @EXPORT, qw(cfgDefineOptionTypeList); 1; diff --git a/lib/pgBackRest/Config/Rule.pm b/lib/pgBackRest/Config/Define.pm similarity index 58% rename from lib/pgBackRest/Config/Rule.pm rename to lib/pgBackRest/Config/Define.pm index f922bfb20..566644fa4 100644 --- a/lib/pgBackRest/Config/Rule.pm +++ b/lib/pgBackRest/Config/Define.pm @@ -1,7 +1,7 @@ #################################################################################################################################### -# Configuration Rule Interface +# Configuration Definition Interface #################################################################################################################################### -package pgBackRest::Config::Rule; +package pgBackRest::Config::Define; use strict; use warnings FATAL => qw(all); @@ -9,16 +9,71 @@ use Carp qw(confess); use Exporter qw(import); our @EXPORT = qw(); +use Storable qw(dclone); use pgBackRest::Common::Exception; use pgBackRest::Common::Log; use pgBackRest::Config::Data; #################################################################################################################################### -# Copy indexed rules locally +# Generate indexed defines #################################################################################################################################### -my $rhOptionRuleIndex = cfgdefRuleIndex(); -my $iOptionTotal = scalar(keys(%{$rhOptionRuleIndex})); +my $rhConfigDefineIndex = cfgDefine(); + +foreach my $strKey (sort(keys(%{$rhConfigDefineIndex}))) +{ + # Build options for all possible db configurations + if (defined($rhConfigDefineIndex->{$strKey}{&CFGDEF_PREFIX}) && + $rhConfigDefineIndex->{$strKey}{&CFGDEF_PREFIX} eq CFGDEF_PREFIX_DB) + { + my $strPrefix = $rhConfigDefineIndex->{$strKey}{&CFGDEF_PREFIX}; + + for (my $iIndex = 1; $iIndex <= CFGDEF_INDEX_DB; $iIndex++) + { + my $strKeyNew = "${strPrefix}${iIndex}" . substr($strKey, length($strPrefix)); + + $rhConfigDefineIndex->{$strKeyNew} = dclone($rhConfigDefineIndex->{$strKey}); + + $rhConfigDefineIndex->{$strKeyNew}{&CFGDEF_INDEX_TOTAL} = CFGDEF_INDEX_DB; + $rhConfigDefineIndex->{$strKeyNew}{&CFGDEF_INDEX} = $iIndex - 1; + + # Create the alternate name for option index 1 + if ($iIndex == 1) + { + $rhConfigDefineIndex->{$strKeyNew}{&CFGDEF_ALT_NAME} = $strKey; + } + else + { + $rhConfigDefineIndex->{$strKeyNew}{&CFGDEF_REQUIRED} = false; + } + + if (defined($rhConfigDefineIndex->{$strKeyNew}{&CFGDEF_DEPEND}) && + defined($rhConfigDefineIndex->{$strKeyNew}{&CFGDEF_DEPEND}{&CFGDEF_DEPEND_OPTION})) + { + $rhConfigDefineIndex->{$strKeyNew}{&CFGDEF_DEPEND}{&CFGDEF_DEPEND_OPTION} = + "${strPrefix}${iIndex}" . + substr( + $rhConfigDefineIndex->{$strKeyNew}{&CFGDEF_DEPEND}{&CFGDEF_DEPEND_OPTION}, + length($strPrefix)); + } + } + + delete($rhConfigDefineIndex->{$strKey}); + } + else + { + $rhConfigDefineIndex->{$strKey}{&CFGDEF_INDEX} = 0; + } +} + +my $iOptionTotal = scalar(keys(%{$rhConfigDefineIndex})); + +sub cfgDefineIndex +{ + return dclone($rhConfigDefineIndex); +} + +push @EXPORT, qw(cfgDefineIndex); #################################################################################################################################### # Create maps to convert option ids to names and vice versa @@ -30,16 +85,16 @@ my $rhOptionNameAlt; { my $iIndex = 0; - foreach my $strOption (sort(keys(%{$rhOptionRuleIndex}))) + foreach my $strOption (sort(keys(%{$rhConfigDefineIndex}))) { $rhOptionNameId->{$strOption} = $iIndex; $rhOptionNameAlt->{$strOption} = $strOption; $rhOptionIdName->{$iIndex} = $strOption; - if (defined(cfgRuleOptionNameAlt($strOption))) + if (defined(cfgDefOptionNameAlt($strOption))) { - $rhOptionNameId->{cfgRuleOptionNameAlt($strOption)} = $iIndex; - $rhOptionNameAlt->{cfgRuleOptionNameAlt($strOption)} = $strOption; + $rhOptionNameId->{cfgDefOptionNameAlt($strOption)} = $iIndex; + $rhOptionNameAlt->{cfgDefOptionNameAlt($strOption)} = $strOption; } $iIndex++; @@ -47,18 +102,19 @@ my $rhOptionNameAlt; } #################################################################################################################################### -# cfgOptionRule - get a rule for the option from a command or default +# Get a define for the option from a command or default #################################################################################################################################### -sub cfgOptionRule +sub cfgOptionDefine { my $strCommand = shift; my $strOption = shift; - my $strRule = shift; + my $strDefine = shift; return - defined($rhOptionRuleIndex->{$strOption}{&CFGBLDDEF_RULE_COMMAND}{$strCommand}{$strRule}) ? - $rhOptionRuleIndex->{$strOption}{&CFGBLDDEF_RULE_COMMAND}{$strCommand}{$strRule} : - $rhOptionRuleIndex->{$strOption}{$strRule}; + defined($rhConfigDefineIndex->{$strOption}{&CFGDEF_COMMAND}{$strCommand}) && + defined($rhConfigDefineIndex->{$strOption}{&CFGDEF_COMMAND}{$strCommand}{$strDefine}) ? + $rhConfigDefineIndex->{$strOption}{&CFGDEF_COMMAND}{$strCommand}{$strDefine} : + $rhConfigDefineIndex->{$strOption}{$strDefine}; } #################################################################################################################################### @@ -104,15 +160,15 @@ sub cfgOptionTotal push @EXPORT, qw(cfgOptionTotal); #################################################################################################################################### -# cfgRuleOptionAllowList - does the option have a specific list of allowed values? +# cfgDefOptionAllowList - does the option have a specific list of allowed values? #################################################################################################################################### -sub cfgRuleOptionAllowList +sub cfgDefOptionAllowList { my $strCommand = shift; my $strOption = cfgOptionName(shift); my $bError = shift; - my $rhAllowList = cfgOptionRule($strCommand, $strOption, CFGBLDDEF_RULE_ALLOW_LIST); + my $rhAllowList = cfgOptionDefine($strCommand, $strOption, CFGDEF_ALLOW_LIST); if (!defined($rhAllowList) && defined($bError) && $bError) { @@ -128,60 +184,60 @@ sub cfgRuleOptionAllowList return defined($rhAllowList) ? true : false; } -push @EXPORT, qw(cfgRuleOptionAllowList); +push @EXPORT, qw(cfgDefOptionAllowList); #################################################################################################################################### -# cfgRuleOptionAllowListValue - get an allow list value +# cfgDefOptionAllowListValue - get an allow list value #################################################################################################################################### -sub cfgRuleOptionAllowListValue +sub cfgDefOptionAllowListValue { my $strCommand = shift; my $strOption = cfgOptionName(shift); my $iValueIdx = shift; # Index shouldn't be greater than the total number of values - if ($iValueIdx >= cfgRuleOptionAllowListValueTotal($strCommand, $strOption, $iValueIdx)) + if ($iValueIdx >= cfgDefOptionAllowListValueTotal($strCommand, $strOption, $iValueIdx)) { confess &log(ASSERT, "invalid allow list value index ${iValueIdx} for ${strCommand}, ${strOption}"); } # Return value - return cfgOptionRule($strCommand, $strOption, CFGBLDDEF_RULE_ALLOW_LIST)->[$iValueIdx]; + return cfgOptionDefine($strCommand, $strOption, CFGDEF_ALLOW_LIST)->[$iValueIdx]; } -push @EXPORT, qw(cfgRuleOptionAllowListValue); +push @EXPORT, qw(cfgDefOptionAllowListValue); #################################################################################################################################### -# cfgRuleOptionAllowListValueTotal - how many values are allowed for the option? +# cfgDefOptionAllowListValueTotal - how many values are allowed for the option? #################################################################################################################################### -sub cfgRuleOptionAllowListValueTotal +sub cfgDefOptionAllowListValueTotal { my $strCommand = shift; my $strOption = cfgOptionName(shift); # Make sure the allow list exists - cfgRuleOptionAllowList($strCommand, $strOption, true); + cfgDefOptionAllowList($strCommand, $strOption, true); # Return total elements in the list - return scalar(@{cfgOptionRule($strCommand, $strOption, CFGBLDDEF_RULE_ALLOW_LIST)}); + return scalar(@{cfgOptionDefine($strCommand, $strOption, CFGDEF_ALLOW_LIST)}); } -push @EXPORT, qw(cfgRuleOptionAllowListValueTotal); +push @EXPORT, qw(cfgDefOptionAllowListValueTotal); #################################################################################################################################### -# cfgRuleOptionAllowListValueValid - is the value valid for this option? +# cfgDefOptionAllowListValueValid - is the value valid for this option? #################################################################################################################################### -sub cfgRuleOptionAllowListValueValid +sub cfgDefOptionAllowListValueValid { my $strCommand = shift; my $strOption = cfgOptionName(shift); my $strValue = shift; # Make sure the allow list exists - cfgRuleOptionAllowList($strCommand, $strOption, true); + cfgDefOptionAllowList($strCommand, $strOption, true); # Check if the value is valid - foreach my $strValueMatch (@{cfgOptionRule($strCommand, $strOption, CFGBLDDEF_RULE_ALLOW_LIST)}) + foreach my $strValueMatch (@{cfgOptionDefine($strCommand, $strOption, CFGDEF_ALLOW_LIST)}) { if ($strValue eq $strValueMatch) { @@ -192,18 +248,18 @@ sub cfgRuleOptionAllowListValueValid return false; } -push @EXPORT, qw(cfgRuleOptionAllowListValueValid); +push @EXPORT, qw(cfgDefOptionAllowListValueValid); #################################################################################################################################### -# cfgRuleOptionAllowRange - does the option have min/max values? +# cfgDefOptionAllowRange - does the option have min/max values? #################################################################################################################################### -sub cfgRuleOptionAllowRange +sub cfgDefOptionAllowRange { my $strCommand = shift; my $strOption = cfgOptionName(shift); my $bError = shift; - my $rhAllowRange = cfgOptionRule($strCommand, $strOption, CFGBLDDEF_RULE_ALLOW_RANGE); + my $rhAllowRange = cfgOptionDefine($strCommand, $strOption, CFGDEF_ALLOW_RANGE); if (!defined($rhAllowRange) && defined($bError) && $bError) { @@ -219,162 +275,162 @@ sub cfgRuleOptionAllowRange return defined($rhAllowRange) ? true : false; } -push @EXPORT, qw(cfgRuleOptionAllowRange); +push @EXPORT, qw(cfgDefOptionAllowRange); #################################################################################################################################### -# cfgRuleOptionAllowRangeMax - get max value in allowed range +# cfgDefOptionAllowRangeMax - get max value in allowed range #################################################################################################################################### -sub cfgRuleOptionAllowRangeMax +sub cfgDefOptionAllowRangeMax { my $strCommand = shift; my $strOption = cfgOptionName(shift); # Make sure the allow range exists - cfgRuleOptionAllowRange($strCommand, $strOption); + cfgDefOptionAllowRange($strCommand, $strOption); # Return value - return cfgOptionRule($strCommand, $strOption, CFGBLDDEF_RULE_ALLOW_RANGE)->[1]; + return cfgOptionDefine($strCommand, $strOption, CFGDEF_ALLOW_RANGE)->[1]; } -push @EXPORT, qw(cfgRuleOptionAllowRangeMax); +push @EXPORT, qw(cfgDefOptionAllowRangeMax); #################################################################################################################################### -# cfgRuleOptionAllowRangeMin - get min value in allowed range +# cfgDefOptionAllowRangeMin - get min value in allowed range #################################################################################################################################### -sub cfgRuleOptionAllowRangeMin +sub cfgDefOptionAllowRangeMin { my $strCommand = shift; my $strOption = cfgOptionName(shift); # Make sure the allow range exists - cfgRuleOptionAllowRange($strCommand, $strOption); + cfgDefOptionAllowRange($strCommand, $strOption); # Return value - return cfgOptionRule($strCommand, $strOption, CFGBLDDEF_RULE_ALLOW_RANGE)->[0]; + return cfgOptionDefine($strCommand, $strOption, CFGDEF_ALLOW_RANGE)->[0]; } -push @EXPORT, qw(cfgRuleOptionAllowRangeMin); +push @EXPORT, qw(cfgDefOptionAllowRangeMin); #################################################################################################################################### -# cfgRuleOptionDefault - option default, if any +# cfgDefOptionDefault - option default, if any #################################################################################################################################### -sub cfgRuleOptionDefault +sub cfgDefOptionDefault { my $strCommand = shift; my $strOption = cfgOptionName(shift); - return cfgOptionRule($strCommand, $strOption, CFGBLDDEF_RULE_DEFAULT); + return cfgOptionDefine($strCommand, $strOption, CFGDEF_DEFAULT); } -push @EXPORT, qw(cfgRuleOptionDefault); +push @EXPORT, qw(cfgDefOptionDefault); #################################################################################################################################### -# cfgRuleOptionDepend - does the option depend on another option being set or having a certain value? +# cfgDefOptionDepend - does the option depend on another option being set or having a certain value? #################################################################################################################################### -sub cfgRuleOptionDepend +sub cfgDefOptionDepend { my $strCommand = shift; my $strOption = cfgOptionName(shift); my $bError = shift; - my $rhDepend = cfgOptionRule($strCommand, $strOption, CFGBLDDEF_RULE_DEPEND); + my $rhDepend = cfgOptionDefine($strCommand, $strOption, CFGDEF_DEPEND); if (!defined($rhDepend) && defined($bError) && $bError) { - confess &log(ASSERT, "depend rule not set for ${strCommand}, ${strOption}"); + confess &log(ASSERT, "depend define not set for ${strCommand}, ${strOption}"); } return defined($rhDepend) ? true : false; } -push @EXPORT, qw(cfgRuleOptionDepend); +push @EXPORT, qw(cfgDefOptionDepend); #################################################################################################################################### -# cfgRuleOptionDependOption - name of the option that this option depends on +# cfgDefOptionDependOption - name of the option that this option depends on #################################################################################################################################### -sub cfgRuleOptionDependOption +sub cfgDefOptionDependOption { my $strCommand = shift; my $strOption = cfgOptionName(shift); - # Make sure the depend rule exists - cfgRuleOptionDepend($strCommand, $strOption, true); + # Make sure the depend define exists + cfgDefOptionDepend($strCommand, $strOption, true); # Error if the depend option does not exist - my $rhDepend = cfgOptionRule($strCommand, $strOption, CFGBLDDEF_RULE_DEPEND); + my $rhDepend = cfgOptionDefine($strCommand, $strOption, CFGDEF_DEPEND); - if (!defined($rhDepend->{&CFGBLDDEF_RULE_DEPEND_OPTION})) + if (!defined($rhDepend->{&CFGDEF_DEPEND_OPTION})) { - confess &log(ASSERT, "depend rule option not set for ${strCommand}, ${strOption}"); + confess &log(ASSERT, "depend define option not set for ${strCommand}, ${strOption}"); } - return $rhDepend->{&CFGBLDDEF_RULE_DEPEND_OPTION}; + return $rhDepend->{&CFGDEF_DEPEND_OPTION}; } -push @EXPORT, qw(cfgRuleOptionDependOption); +push @EXPORT, qw(cfgDefOptionDependOption); #################################################################################################################################### -# cfgRuleOptionDependValue - get a depend option value +# cfgDefOptionDependValue - get a depend option value #################################################################################################################################### -sub cfgRuleOptionDependValue +sub cfgDefOptionDependValue { my $strCommand = shift; my $strOption = cfgOptionName(shift); my $iValueIdx = shift; # Index shouldn't be greater than the total number of values - if ($iValueIdx >= cfgRuleOptionDependValueTotal($strCommand, $strOption, $iValueIdx)) + if ($iValueIdx >= cfgDefOptionDependValueTotal($strCommand, $strOption, $iValueIdx)) { confess &log(ASSERT, "invalid depend value index ${iValueIdx} for ${strCommand}, ${strOption}"); } # Return value - return cfgOptionRule($strCommand, $strOption, CFGBLDDEF_RULE_DEPEND)->{&CFGBLDDEF_RULE_DEPEND_LIST}->[$iValueIdx]; + return cfgOptionDefine($strCommand, $strOption, CFGDEF_DEPEND)->{&CFGDEF_DEPEND_LIST}->[$iValueIdx]; } -push @EXPORT, qw(cfgRuleOptionDependValue); +push @EXPORT, qw(cfgDefOptionDependValue); #################################################################################################################################### -# cfgRuleOptionDependValueTotal - how many values are allowed for the depend option? +# cfgDefOptionDependValueTotal - how many values are allowed for the depend option? # # 0 indicates that the value of the depend option doesn't matter, only that is is set. #################################################################################################################################### -sub cfgRuleOptionDependValueTotal +sub cfgDefOptionDependValueTotal { my $strCommand = shift; my $strOption = cfgOptionName(shift); - # Make sure the depend rule exists - cfgRuleOptionDepend($strCommand, $strOption, true); + # Make sure the depend define exists + cfgDefOptionDepend($strCommand, $strOption, true); # It's OK for the list not to be defined - my $rhDepend = cfgOptionRule($strCommand, $strOption, CFGBLDDEF_RULE_DEPEND); + my $rhDepend = cfgOptionDefine($strCommand, $strOption, CFGDEF_DEPEND); - if (!defined($rhDepend->{&CFGBLDDEF_RULE_DEPEND_LIST})) + if (!defined($rhDepend->{&CFGDEF_DEPEND_LIST})) { return 0; } # Return total elements in the list - return scalar(@{$rhDepend->{&CFGBLDDEF_RULE_DEPEND_LIST}}); + return scalar(@{$rhDepend->{&CFGDEF_DEPEND_LIST}}); } -push @EXPORT, qw(cfgRuleOptionDependValueTotal); +push @EXPORT, qw(cfgDefOptionDependValueTotal); #################################################################################################################################### -# cfgRuleOptionDependValueValid - is the depend valid valid? +# cfgDefOptionDependValueValid - is the depend valid valid? #################################################################################################################################### -sub cfgRuleOptionDependValueValid +sub cfgDefOptionDependValueValid { my $strCommand = shift; my $strOption = cfgOptionName(shift); my $strValue = shift; - # Make sure the depend rule exists - cfgRuleOptionDepend($strCommand, $strOption, true); + # Make sure the depend define exists + cfgDefOptionDepend($strCommand, $strOption, true); # Check if the value is valid - foreach my $strValueMatch (@{cfgOptionRule($strCommand, $strOption, CFGBLDDEF_RULE_DEPEND)->{&CFGBLDDEF_RULE_DEPEND_LIST}}) + foreach my $strValueMatch (@{cfgOptionDefine($strCommand, $strOption, CFGDEF_DEPEND)->{&CFGDEF_DEPEND_LIST}}) { if ($strValue eq $strValueMatch) { @@ -385,7 +441,19 @@ sub cfgRuleOptionDependValueValid return false; } -push @EXPORT, qw(cfgRuleOptionDependValueValid); +push @EXPORT, qw(cfgDefOptionDependValueValid); + +#################################################################################################################################### +# cfgOptionIndex - index for option +#################################################################################################################################### +sub cfgOptionIndex +{ + my $strOption = cfgOptionName(shift); + + return $rhConfigDefineIndex->{$strOption}{&CFGDEF_INDEX}; +} + +push @EXPORT, qw(cfgOptionIndex); #################################################################################################################################### # cfgOptionIndexTotal - max index for options that are indexed (e.g., db) @@ -394,108 +462,110 @@ sub cfgOptionIndexTotal { my $strOption = cfgOptionName(shift); - return $rhOptionRuleIndex->{$strOption}{&CFGBLDDEF_RULE_INDEX}; + return $rhConfigDefineIndex->{$strOption}{&CFGDEF_INDEX_TOTAL}; } push @EXPORT, qw(cfgOptionIndexTotal); #################################################################################################################################### -# cfgRuleOptionNameAlt - alternative or deprecated option name +# cfgDefOptionNameAlt - alternative or deprecated option name #################################################################################################################################### -sub cfgRuleOptionNameAlt +sub cfgDefOptionNameAlt { my $strOption = cfgOptionName(shift); - return $rhOptionRuleIndex->{$strOption}{&CFGBLDDEF_RULE_ALT_NAME}; + return $rhConfigDefineIndex->{$strOption}{&CFGDEF_ALT_NAME}; } -push @EXPORT, qw(cfgRuleOptionNameAlt); +push @EXPORT, qw(cfgDefOptionNameAlt); #################################################################################################################################### -# cfgRuleOptionNegate - is the boolean option negatable? +# cfgDefOptionNegate - is the boolean option negatable? #################################################################################################################################### -sub cfgRuleOptionNegate +sub cfgDefOptionNegate { my $strOption = cfgOptionName(shift); - return $rhOptionRuleIndex->{$strOption}{&CFGBLDDEF_RULE_NEGATE}; + return $rhConfigDefineIndex->{$strOption}{&CFGDEF_NEGATE}; } -push @EXPORT, qw(cfgRuleOptionNegate); +push @EXPORT, qw(cfgDefOptionNegate); #################################################################################################################################### -# cfgRuleOptionPrefix - fixed prefix for indexed options +# cfgDefOptionPrefix - fixed prefix for indexed options #################################################################################################################################### -sub cfgRuleOptionPrefix +sub cfgDefOptionPrefix { my $strOption = cfgOptionName(shift); - return $rhOptionRuleIndex->{$strOption}{&CFGBLDDEF_RULE_PREFIX}; + return $rhConfigDefineIndex->{$strOption}{&CFGDEF_PREFIX}; } -push @EXPORT, qw(cfgRuleOptionPrefix); +push @EXPORT, qw(cfgDefOptionPrefix); #################################################################################################################################### -# cfgRuleOptionRequired - is the option required? +# cfgDefOptionRequired - is the option required? #################################################################################################################################### -sub cfgRuleOptionRequired +sub cfgDefOptionRequired { my $strCommand = shift; my $strOption = cfgOptionName(shift); - my $rxRule = cfgOptionRule($strCommand, $strOption, CFGBLDDEF_RULE_REQUIRED); - return defined($rxRule) ? $rxRule : true; + my $rxDefine = cfgOptionDefine($strCommand, $strOption, CFGDEF_REQUIRED); + return defined($rxDefine) ? $rxDefine : true; } -push @EXPORT, qw(cfgRuleOptionRequired); +push @EXPORT, qw(cfgDefOptionRequired); #################################################################################################################################### -# cfgRuleOptionSection - section to contain optio (global or stanza), all others are command-line only +# cfgDefOptionSection - section to contain optio (global or stanza), all others are command-line only #################################################################################################################################### -sub cfgRuleOptionSection +sub cfgDefOptionSection { my $strOption = cfgOptionName(shift); - return $rhOptionRuleIndex->{$strOption}{&CFGBLDDEF_RULE_SECTION}; + return $rhConfigDefineIndex->{$strOption}{&CFGDEF_SECTION}; } -push @EXPORT, qw(cfgRuleOptionSection); +push @EXPORT, qw(cfgDefOptionSection); #################################################################################################################################### -# cfgRuleOptionSecure - can the option be passed on the command-line? +# cfgDefOptionSecure - can the option be passed on the command-line? #################################################################################################################################### -sub cfgRuleOptionSecure +sub cfgDefOptionSecure { my $strOption = cfgOptionName(shift); - return $rhOptionRuleIndex->{$strOption}{&CFGBLDDEF_RULE_SECURE}; + return $rhConfigDefineIndex->{$strOption}{&CFGDEF_SECURE}; } -push @EXPORT, qw(cfgRuleOptionSecure); +push @EXPORT, qw(cfgDefOptionSecure); #################################################################################################################################### -# cfgRuleOptionType - data type of the option (e.g. boolean, string) +# cfgDefOptionType - data type of the option (e.g. boolean, string) #################################################################################################################################### -sub cfgRuleOptionType +sub cfgDefOptionType { my $strOption = cfgOptionName(shift); - return $rhOptionRuleIndex->{$strOption}{&CFGBLDDEF_RULE_TYPE}; + return $rhConfigDefineIndex->{$strOption}{&CFGDEF_TYPE}; } -push @EXPORT, qw(cfgRuleOptionType); +push @EXPORT, qw(cfgDefOptionType); #################################################################################################################################### -# cfgRuleOptionValid - is the option valid for the command? +# cfgDefOptionValid - is the option valid for the command? #################################################################################################################################### -sub cfgRuleOptionValid +sub cfgDefOptionValid { my $strCommand = shift; my $strOption = cfgOptionName(shift); - return defined($rhOptionRuleIndex->{$strOption}{&CFGBLDDEF_RULE_COMMAND}{$strCommand}) ? true : false; + return + defined($rhConfigDefineIndex->{$strOption}{&CFGDEF_COMMAND}) && + defined($rhConfigDefineIndex->{$strOption}{&CFGDEF_COMMAND}{$strCommand}) ? true : false; } -push @EXPORT, qw(cfgRuleOptionValid); +push @EXPORT, qw(cfgDefOptionValid); 1; diff --git a/lib/pgBackRest/Config/LoadFailback.pm b/lib/pgBackRest/Config/LoadFailback.pm index 2b99cec7c..fc3667eb8 100644 --- a/lib/pgBackRest/Config/LoadFailback.pm +++ b/lib/pgBackRest/Config/LoadFailback.pm @@ -19,9 +19,9 @@ use pgBackRest::LibCLoad; if (libC()) { require pgBackRest::LibC; - pgBackRest::LibC->import(qw(:config :configRule)); + pgBackRest::LibC->import(qw(:config :configDefine)); push(@EXPORT, @{$pgBackRest::LibC::EXPORT_TAGS{config}}); - push(@EXPORT, @{$pgBackRest::LibC::EXPORT_TAGS{configRule}}); + push(@EXPORT, @{$pgBackRest::LibC::EXPORT_TAGS{configDefine}}); } else { @@ -29,9 +29,9 @@ else pgBackRest::Config::Data->import(); push(@EXPORT, @pgBackRest::Config::Data::EXPORT); - require pgBackRest::Config::Rule; - pgBackRest::Config::Rule->import(); - push(@EXPORT, @pgBackRest::Config::Rule::EXPORT); + require pgBackRest::Config::Define; + pgBackRest::Config::Define->import(); + push(@EXPORT, @pgBackRest::Config::Define::EXPORT); } 1; diff --git a/lib/pgBackRest/Db.pm b/lib/pgBackRest/Db.pm index b08a22ab1..f4eaddd04 100644 --- a/lib/pgBackRest/Db.pm +++ b/lib/pgBackRest/Db.pm @@ -89,7 +89,7 @@ sub new if (defined($self->{iRemoteIdx})) { - $self->{strDbPath} = cfgOption(cfgOptionIndex(CFGOPT_DB_PATH, $self->{iRemoteIdx})); + $self->{strDbPath} = cfgOption(cfgOptionIdFromIndex(CFGOPT_DB_PATH, $self->{iRemoteIdx})); if (!isDbLocal({iRemoteIdx => $self->{iRemoteIdx}})) { @@ -161,7 +161,7 @@ sub connect # Connect to the db my $strDbName = 'postgres'; my $strDbUser = getpwuid($<); - my $strDbSocketPath = cfgOption(cfgOptionIndex(CFGOPT_DB_SOCKET_PATH, $self->{iRemoteIdx}), false); + my $strDbSocketPath = cfgOption(cfgOptionIdFromIndex(CFGOPT_DB_SOCKET_PATH, $self->{iRemoteIdx}), false); # Make sure the socket path is absolute if (defined($strDbSocketPath) && $strDbSocketPath !~ /^\//) @@ -171,8 +171,9 @@ sub connect } # Construct the URI - my $strDbUri = "dbi:Pg:dbname=${strDbName};port=" . cfgOption(cfgOptionIndex(CFGOPT_DB_PORT, $self->{iRemoteIdx})) . - (defined($strDbSocketPath) ? ";host=${strDbSocketPath}" : ''); + my $strDbUri = + "dbi:Pg:dbname=${strDbName};port=" . cfgOption(cfgOptionIdFromIndex(CFGOPT_DB_PORT, $self->{iRemoteIdx})) . + (defined($strDbSocketPath) ? ";host=${strDbSocketPath}" : ''); logDebugMisc ( @@ -1032,8 +1033,8 @@ sub dbObjectGet for (my $iRemoteIdx = 1; $iRemoteIdx <= cfgOptionIndexTotal(CFGOPT_DB_HOST); $iRemoteIdx++) { # Make sure a db is defined for this index - if (cfgOptionTest(cfgOptionIndex(CFGOPT_DB_PATH, $iRemoteIdx)) || - cfgOptionTest(cfgOptionIndex(CFGOPT_DB_HOST, $iRemoteIdx))) + if (cfgOptionTest(cfgOptionIdFromIndex(CFGOPT_DB_PATH, $iRemoteIdx)) || + cfgOptionTest(cfgOptionIdFromIndex(CFGOPT_DB_HOST, $iRemoteIdx))) { # Create the db object my $oDb; @@ -1157,7 +1158,7 @@ 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))) + if (cfgOptionTest(cfgOptionIdFromIndex(CFGOPT_DB_PATH, $iDbPathIdx))) { return true; } diff --git a/lib/pgBackRest/DbVersion.pm b/lib/pgBackRest/DbVersion.pm index c8be2fdd7..0b9fd0c52 100644 --- a/lib/pgBackRest/DbVersion.pm +++ b/lib/pgBackRest/DbVersion.pm @@ -66,7 +66,7 @@ sub versionSupport my ($strOperation) = logDebugParam(__PACKAGE__ . '->versionSupport'); my @strySupportVersion = (PG_VERSION_83, PG_VERSION_84, PG_VERSION_90, PG_VERSION_91, PG_VERSION_92, PG_VERSION_93, - PG_VERSION_94, PG_VERSION_95, PG_VERSION_96); + PG_VERSION_94, PG_VERSION_95, PG_VERSION_96, PG_VERSION_10); # Return from function and log return values if any return logDebugReturn diff --git a/lib/pgBackRest/Protocol/Helper.pm b/lib/pgBackRest/Protocol/Helper.pm index 76cea3776..2a52bb3b2 100644 --- a/lib/pgBackRest/Protocol/Helper.pm +++ b/lib/pgBackRest/Protocol/Helper.pm @@ -125,7 +125,7 @@ sub isDbLocal confess &log(ASSERT, 'isDbLocal() not valid on ' . cfgOption(CFGOPT_TYPE) . ' remote'); } - my $bLocal = cfgOptionTest(cfgOptionIndex(CFGOPT_DB_HOST, $iRemoteIdx)) ? false : true; + my $bLocal = cfgOptionTest(cfgOptionIdFromIndex(CFGOPT_DB_HOST, $iRemoteIdx)) ? false : true; # Return from function and log return values if any return logDebugReturn @@ -172,7 +172,7 @@ sub protocolGet # If no remote requested or if the requested remote type is local then return a local protocol object if (!cfgOptionTest( - cfgOptionIndex($strRemoteType eq CFGOPTVAL_REMOTE_TYPE_DB ? CFGOPT_DB_HOST : CFGOPT_BACKUP_HOST, $iRemoteIdx))) + cfgOptionIdFromIndex($strRemoteType eq CFGOPTVAL_REMOTE_TYPE_DB ? CFGOPT_DB_HOST : CFGOPT_BACKUP_HOST, $iRemoteIdx))) { confess &log(ASSERT, 'protocol cannot be created when remote host is not specified'); } @@ -210,35 +210,35 @@ sub protocolGet if ($strRemoteType eq CFGOPTVAL_REMOTE_TYPE_DB) { - $iOptionIdCmd = cfgOptionIndex(CFGOPT_DB_CMD, $iRemoteIdx); - $iOptionIdConfig = cfgOptionIndex(CFGOPT_DB_CONFIG, $iRemoteIdx); - $iOptionIdHost = cfgOptionIndex(CFGOPT_DB_HOST, $iRemoteIdx); - $iOptionIdUser = cfgOptionIndex(CFGOPT_DB_USER, $iRemoteIdx); - $strOptionSshPort = cfgOptionIndex(CFGOPT_DB_SSH_PORT, $iRemoteIdx); + $iOptionIdCmd = cfgOptionIdFromIndex(CFGOPT_DB_CMD, $iRemoteIdx); + $iOptionIdConfig = cfgOptionIdFromIndex(CFGOPT_DB_CONFIG, $iRemoteIdx); + $iOptionIdHost = cfgOptionIdFromIndex(CFGOPT_DB_HOST, $iRemoteIdx); + $iOptionIdUser = cfgOptionIdFromIndex(CFGOPT_DB_USER, $iRemoteIdx); + $strOptionSshPort = cfgOptionIdFromIndex(CFGOPT_DB_SSH_PORT, $iRemoteIdx); } # Db path is not valid in all contexts (restore, for instance) - if (cfgOptionValid(cfgOptionIndex(CFGOPT_DB_PATH, $iRemoteIdx))) + if (cfgOptionValid(cfgOptionIdFromIndex(CFGOPT_DB_PATH, $iRemoteIdx))) { $strOptionDbPath = - cfgOptionSource(cfgOptionIndex(CFGOPT_DB_PATH, $iRemoteIdx)) eq CFGDEF_SOURCE_DEFAULT ? - undef : cfgOption(cfgOptionIndex(CFGOPT_DB_PATH, $iRemoteIdx)); + cfgOptionSource(cfgOptionIdFromIndex(CFGOPT_DB_PATH, $iRemoteIdx)) eq CFGDEF_SOURCE_DEFAULT ? + undef : cfgOption(cfgOptionIdFromIndex(CFGOPT_DB_PATH, $iRemoteIdx)); } # Db port is not valid in all contexts (restore, for instance) - if (cfgOptionValid(cfgOptionIndex(CFGOPT_DB_PORT, $iRemoteIdx))) + if (cfgOptionValid(cfgOptionIdFromIndex(CFGOPT_DB_PORT, $iRemoteIdx))) { $strOptionDbPort = - cfgOptionSource(cfgOptionIndex(CFGOPT_DB_PORT, $iRemoteIdx)) eq CFGDEF_SOURCE_DEFAULT ? - undef : cfgOption(cfgOptionIndex(CFGOPT_DB_PORT, $iRemoteIdx)); + cfgOptionSource(cfgOptionIdFromIndex(CFGOPT_DB_PORT, $iRemoteIdx)) eq CFGDEF_SOURCE_DEFAULT ? + undef : cfgOption(cfgOptionIdFromIndex(CFGOPT_DB_PORT, $iRemoteIdx)); } # Db socket is not valid in all contexts (restore, for instance) - if (cfgOptionValid(cfgOptionIndex(CFGOPT_DB_SOCKET_PATH, $iRemoteIdx))) + if (cfgOptionValid(cfgOptionIdFromIndex(CFGOPT_DB_SOCKET_PATH, $iRemoteIdx))) { $strOptionDbSocketPath = - cfgOptionSource(cfgOptionIndex(CFGOPT_DB_SOCKET_PATH, $iRemoteIdx)) eq CFGDEF_SOURCE_DEFAULT ? - undef : cfgOption(cfgOptionIndex(CFGOPT_DB_SOCKET_PATH, $iRemoteIdx)); + cfgOptionSource(cfgOptionIdFromIndex(CFGOPT_DB_SOCKET_PATH, $iRemoteIdx)) eq CFGDEF_SOURCE_DEFAULT ? + undef : cfgOption(cfgOptionIdFromIndex(CFGOPT_DB_SOCKET_PATH, $iRemoteIdx)); } # Build hash to set and override command options @@ -268,22 +268,22 @@ sub protocolGet &CFGOPT_PROTOCOL_TIMEOUT => {value => cfgOption(CFGOPT_PROTOCOL_TIMEOUT)} }; - # Override some per-db options that shouldn't be passed to the command. ??? This could be done better as a new rule for - # these options which would then be implemented in cfgCommandWrite(). + # Override some per-db options that shouldn't be passed to the command. ??? This could be done better as a new define + # for these options which would then be implemented in cfgCommandWrite(). for (my $iOptionIdx = 1; $iOptionIdx <= cfgOptionIndexTotal(CFGOPT_DB_HOST); $iOptionIdx++) { if ($iOptionIdx != 1) { - $rhCommandOption->{cfgOptionIndex(CFGOPT_DB_CONFIG, $iOptionIdx)} = {}; - $rhCommandOption->{cfgOptionIndex(CFGOPT_DB_HOST, $iOptionIdx)} = {}; - $rhCommandOption->{cfgOptionIndex(CFGOPT_DB_PATH, $iOptionIdx)} = {}; - $rhCommandOption->{cfgOptionIndex(CFGOPT_DB_PORT, $iOptionIdx)} = {}; - $rhCommandOption->{cfgOptionIndex(CFGOPT_DB_SOCKET_PATH, $iOptionIdx)} = {}; + $rhCommandOption->{cfgOptionIdFromIndex(CFGOPT_DB_CONFIG, $iOptionIdx)} = {}; + $rhCommandOption->{cfgOptionIdFromIndex(CFGOPT_DB_HOST, $iOptionIdx)} = {}; + $rhCommandOption->{cfgOptionIdFromIndex(CFGOPT_DB_PATH, $iOptionIdx)} = {}; + $rhCommandOption->{cfgOptionIdFromIndex(CFGOPT_DB_PORT, $iOptionIdx)} = {}; + $rhCommandOption->{cfgOptionIdFromIndex(CFGOPT_DB_SOCKET_PATH, $iOptionIdx)} = {}; } - $rhCommandOption->{cfgOptionIndex(CFGOPT_DB_CMD, $iOptionIdx)} = {}; - $rhCommandOption->{cfgOptionIndex(CFGOPT_DB_USER, $iOptionIdx)} = {}; - $rhCommandOption->{cfgOptionIndex(CFGOPT_DB_SSH_PORT, $iOptionIdx)} = {}; + $rhCommandOption->{cfgOptionIdFromIndex(CFGOPT_DB_CMD, $iOptionIdx)} = {}; + $rhCommandOption->{cfgOptionIdFromIndex(CFGOPT_DB_USER, $iOptionIdx)} = {}; + $rhCommandOption->{cfgOptionIdFromIndex(CFGOPT_DB_SSH_PORT, $iOptionIdx)} = {}; } $oProtocol = new pgBackRest::Protocol::Remote::Master diff --git a/lib/pgBackRest/Protocol/Storage/Helper.pm b/lib/pgBackRest/Protocol/Storage/Helper.pm index 840791ca7..4b80c8c84 100644 --- a/lib/pgBackRest/Protocol/Storage/Helper.pm +++ b/lib/pgBackRest/Protocol/Storage/Helper.pm @@ -60,7 +60,7 @@ sub storageDb if (isDbLocal({iRemoteIdx => $iRemoteIdx})) { $hStorage->{&STORAGE_DB}{$iRemoteIdx} = new pgBackRest::Storage::Local( - cfgOption(cfgOptionIndex(CFGOPT_DB_PATH, $iRemoteIdx)), new pgBackRest::Storage::Posix::Driver(), + cfgOption(cfgOptionIdFromIndex(CFGOPT_DB_PATH, $iRemoteIdx)), new pgBackRest::Storage::Posix::Driver(), {strTempExtension => STORAGE_TEMP_EXT, lBufferMax => cfgOption(CFGOPT_BUFFER_SIZE)}); } else diff --git a/libc/.gitignore b/libc/.gitignore deleted file mode 100644 index 6ad8f9c46..000000000 --- a/libc/.gitignore +++ /dev/null @@ -1 +0,0 @@ -lib/pgBackRest/LibC.pm diff --git a/libc/LibC.xs b/libc/LibC.xs index ac0bb7fad..6ac1ab2e5 100644 --- a/libc/LibC.xs +++ b/libc/LibC.xs @@ -28,7 +28,7 @@ These includes are from the src directory. There is no Perl-specific code in th #include "common/encode.h" #include "common/error.h" #include "config/config.h" -#include "config/configRule.h" +#include "config/define.h" #include "postgres/pageChecksum.h" /*********************************************************************************************************************************** @@ -42,6 +42,8 @@ XSH includes These includes define data structures that are required for the C to Perl interface but are not part of the regular C source. ***********************************************************************************************************************************/ #include "xs/common/encode.xsh" +#include "xs/config/config.auto.xsh" +#include "xs/config/define.auto.xsh" /*********************************************************************************************************************************** Constant include @@ -68,5 +70,5 @@ INCLUDE: const-xs.inc # ---------------------------------------------------------------------------------------------------------------------------------- INCLUDE: xs/common/encode.xs INCLUDE: xs/config/config.xs -INCLUDE: xs/config/configRule.xs +INCLUDE: xs/config/define.xs INCLUDE: xs/postgres/pageChecksum.xs diff --git a/libc/Makefile.PL b/libc/Makefile.PL index c8d909c46..c7f2f2247 100644 --- a/libc/Makefile.PL +++ b/libc/Makefile.PL @@ -7,291 +7,42 @@ use warnings FATAL => qw(all); use Carp qw(confess); use English '-no_match_vars'; -use Cwd qw(abs_path); -use File::Basename qw(dirname); +# Convert die to confess to capture the stack trace +$SIG{__DIE__} = sub { Carp::confess @_ }; -use lib dirname($0) . '/../build/lib'; -use lib dirname($0) . '/../lib'; +use Cwd qw(abs_path); +use ExtUtils::MakeMaker; +use File::Basename qw(dirname); +use File::Copy qw(copy); + +use lib dirname($0) . '/lib'; +use pgBackRest::LibCAuto; #################################################################################################################################### # Storage object to use for all file operations #################################################################################################################################### -use pgBackRest::Common::Log; -use pgBackRest::Storage::Local; -use pgBackRest::Storage::Posix::Driver; - -my $strBuildPath = dirname(dirname(abs_path($0))); - -my $oStorage = new pgBackRest::Storage::Local( - $strBuildPath, new pgBackRest::Storage::Posix::Driver({bFileSync => false, bPathSync => false})); - -#################################################################################################################################### -# Build C files required for the library -#################################################################################################################################### -use pgBackRestBuild::CodeGen::Common; -use pgBackRestBuild::Build; - -my $rhBuild = buildAll($strBuildPath); - -#################################################################################################################################### -# Perl function and constant exports -#################################################################################################################################### -use constant BLD_EXPORTTYPE_SUB => 'sub'; -use constant BLD_EXPORTTYPE_CONSTANT => 'constant'; - -my $rhExport = -{ - 'checksum' => - { - &BLD_EXPORTTYPE_SUB => [qw( - pageChecksum - pageChecksumBufferTest - pageChecksumTest - )], - }, - - 'config' => - { - &BLD_EXPORTTYPE_SUB => [qw( - cfgCommandName - cfgOptionIndexTotal - cfgOptionName - )], - }, - - 'configRule' => - { - &BLD_EXPORTTYPE_SUB => [qw( - cfgCommandId - cfgOptionId - cfgRuleOptionAllowList - cfgRuleOptionAllowListValue - cfgRuleOptionAllowListValueTotal - cfgRuleOptionAllowListValueValid - cfgRuleOptionAllowRange - cfgRuleOptionAllowRangeMax - cfgRuleOptionAllowRangeMin - cfgRuleOptionDefault - cfgRuleOptionDepend - cfgRuleOptionDependOption - cfgRuleOptionDependValue - cfgRuleOptionDependValueTotal - cfgRuleOptionDependValueValid - cfgRuleOptionNameAlt - cfgRuleOptionNegate - cfgRuleOptionPrefix - cfgRuleOptionRequired - cfgRuleOptionSection - cfgRuleOptionSecure - cfgRuleOptionType - cfgRuleOptionValid - cfgOptionTotal - )], - }, - - 'debug' => - { - &BLD_EXPORTTYPE_CONSTANT => [qw( - UVSIZE - )], - - &BLD_EXPORTTYPE_SUB => [qw( - libCVersion - )], - }, - - 'encode' => - { - &BLD_EXPORTTYPE_CONSTANT => [qw( - ENCODE_TYPE_BASE64 - )], - - &BLD_EXPORTTYPE_SUB => [qw( - encodeToStr decodeToBin - )], - }, -}; - -#################################################################################################################################### -# Generate LibC.pm -#################################################################################################################################### -use pgBackRest::Common::String; -use pgBackRest::Config::Data; -use pgBackRest::Version; - -use pgBackRestBuild::Build::Common; - +use constant BACKREST_NAME => 'pgBackRest'; use constant LIB_NAME => 'LibC'; - -# Split text into lines and indent -sub formatText -{ - my $strLine = shift; - my $iLength = shift; - my $iIndent = shift; - - my $strPart; - my $strResult; - my $bFirst = true; - - do - { - ($strPart, $strLine) = stringSplit($strLine, ' ', $iLength - $iIndent); - - $strResult .= ($bFirst ? '' : "\n") . (' ' x $iIndent) . trim($strPart); - - $bFirst = false; - } - while (defined($strLine)); - - return $strResult; -} - -# Build file -{ - my $strLibC = ${$oStorage->get('libc/' . LIB_NAME . '.template.pm')}; - - # Generate auto-build warning - my $strAutoWarning = cgenAutoWarning('Makefile.PL'); - $strLibC =~ s/\{\[LIBC\_AUTO\_WARNING\]\}/$strAutoWarning/g; - - # Get current version - my $strVersion = BACKREST_VERSION; - my $bDev = false; - - if ($strVersion =~ /dev$/) - { - $strVersion = substr($strVersion, 0, length($strVersion) - 3) . '.999'; - $bDev = true; - } - - $strLibC =~ s/\{\[LIBC\_VERSION\]\}/$strVersion/g; - - # Generate constants for options that have a list of strings as allowed values - my $rhOptionRule = cfgdefRule(); - my $strConstantBlock; - - foreach my $strOption (sort(keys(%{$rhOptionRule}))) - { - my $rhOption = $rhOptionRule->{$strOption}; - - next if $rhOption->{&CFGBLDDEF_RULE_TYPE} ne CFGOPTDEF_TYPE_STRING; - next if $strOption =~ /^log-level-/; - - if (defined($rhOption->{&CFGBLDDEF_RULE_ALLOW_LIST})) - { - $strConstantBlock .= defined($strConstantBlock) ? "\n" : ''; - - foreach my $strValue (@{$rhOption->{&CFGBLDDEF_RULE_ALLOW_LIST}}) - { - my $strConstant = 'CFGOPTVAL_' . uc("${strOption}_${strValue}"); - $strConstant =~ s/\-/\_/g; - - $strConstantBlock .= " ${strConstant}" . (' ' x (69 - length($strConstant) - 4)) . "=> '${strValue}',\n"; - push(@{$rhExport->{'config'}{&BLD_EXPORTTYPE_CONSTANT}}, $strConstant); - } - } - - foreach my $strCommand (sort(keys(%{$rhOption->{&CFGBLDDEF_RULE_COMMAND}}))) - { - my $rhCommand = $rhOption->{&CFGBLDDEF_RULE_COMMAND}{$strCommand}; - - if (defined($rhCommand->{&CFGBLDDEF_RULE_ALLOW_LIST})) - { - $strConstantBlock .= defined($strConstantBlock) ? "\n" : ''; - - foreach my $strValue (@{$rhCommand->{&CFGBLDDEF_RULE_ALLOW_LIST}}) - { - my $strConstant = 'CFGOPTVAL_' . uc("${strCommand}_${strOption}_${strValue}"); - $strConstant =~ s/\-/\_/g; - - $strConstantBlock .= " ${strConstant}" . (' ' x (69 - length($strConstant) - 4)) . "=> '${strValue}',\n"; - push(@{$rhExport->{'config'}{&BLD_EXPORTTYPE_CONSTANT}}, $strConstant); - } - } - } - } - - $strConstantBlock = trim($strConstantBlock); - $strLibC =~ s/\{\[LIBC\_CONSTANT\]\}/$strConstantBlock/g; - - # Generate export sections - foreach my $strPath (sort(keys(%{$rhBuild}))) - { - foreach my $strFile (sort(keys(%{$rhBuild->{$strPath}{&BLD_FILE}}))) - { - my $rhFileConstant = $rhBuild->{$strPath}{&BLD_FILE}{$strFile}{&BLD_CONSTANT_GROUP}; - - foreach my $strConstantGroup (sort(keys(%{$rhFileConstant}))) - { - my $rhConstantGroup = $rhFileConstant->{$strConstantGroup}; - - foreach my $strConstant (sort(keys(%{$rhConstantGroup->{&BLD_CONSTANT}}))) - { - my $rhConstant = $rhConstantGroup->{&BLD_CONSTANT}{$strConstant}; - - if ($rhConstant->{&BLD_CONSTANT_EXPORT}) - { - push(@{$rhExport->{$strFile}{&BLD_EXPORTTYPE_CONSTANT}}, $strConstant); - } - } - } - } - } - - # Generate export tags - my $strExportTags; - - foreach my $strSection (sort(keys(%{$rhExport}))) - { - my $rhExportSection = $rhExport->{$strSection}; - - $strExportTags .= (defined($strExportTags) ? "\n" : '') . " '${strSection}' => [qw(\n"; - - if (defined($rhExportSection->{&BLD_EXPORTTYPE_CONSTANT}) && @{$rhExportSection->{&BLD_EXPORTTYPE_CONSTANT}} > 0) - { - $strExportTags .= formatText(join(' ', sort(@{$rhExportSection->{&BLD_EXPORTTYPE_CONSTANT}})), 132, 8) . "\n"; - } - - if (defined($rhExportSection->{&BLD_EXPORTTYPE_SUB}) && @{$rhExportSection->{&BLD_EXPORTTYPE_SUB}} > 0) - { - $strExportTags .= formatText(join(' ', sort(@{$rhExportSection->{&BLD_EXPORTTYPE_SUB}})), 132, 8) . "\n"; - } - - $strExportTags .= " )],\n"; - } - - $strExportTags = trim($strExportTags); - $strLibC =~ s/\{\[LIBC\_EXPORT\_TAGS\]\}/$strExportTags/g; - - # Generate export ok - my $strExportOk; - - foreach my $strSection (sort(keys(%{$rhExport}))) - { - $strExportOk .= " \@{\$EXPORT_TAGS{'${strSection}'}},\n"; - } - - $strExportOk = trim($strExportOk); - $strLibC =~ s/\{\[LIBC\_EXPORT\_OK\]\}/$strExportOk/g; - - my $strLibFile = 'libc/lib/' . BACKREST_NAME . '/' . LIB_NAME . '.pm'; - $oStorage->pathCreate(dirname($strLibFile), {bCreateParent => true, bIgnoreExists => true}); - $oStorage->put($strLibFile, $strLibC); -} +use constant LIB_AUTO_NAME => LIB_NAME . 'Auto'; #################################################################################################################################### # Build list of constants to export from C and add them to the constant array #################################################################################################################################### { # Build constants + my $rhExport = pgBackRest::LibCAuto::libcAutoExportTag(); my @stryConstant; foreach my $strSection (sort(keys(%{$rhExport}))) { - foreach my $strConstant (@{$rhExport->{$strSection}{&BLD_EXPORTTYPE_CONSTANT}}) + # Search exports for constants + foreach my $strExport (@{$rhExport->{$strSection}}) { - push(@stryConstant, $strConstant); + # Constants will be upper-case + if (uc($strExport) eq $strExport) + { + push(@stryConstant, $strExport); + } } } @@ -316,19 +67,30 @@ sub formatText #################################################################################################################################### # Create C Makefile #################################################################################################################################### -use ExtUtils::MakeMaker; +my $strBuildPath = dirname(dirname(abs_path($0))); # Create C files array -my @stryCFile = qw(LibC.c); +my @stryCFile = +( + 'LibC.c', -foreach my $strFile (sort(keys(%{$oStorage->manifest('src')}))) + 'common/encode.c', + 'common/encode/base64.c', + 'common/error.c', + 'common/errorType.c', + 'common/memContext.c', + 'config/config.c', + 'config/define.c', + 'postgres/pageChecksum.c', +); + +# Add ../src for files that are outside libc +for (my $iFileIdx = 1; $iFileIdx < @stryCFile; $iFileIdx++) { - # Skip all files except .c files (including .auto.c) - next if $strFile !~ /(? BACKREST_NAME . '::LibC', @@ -336,6 +98,7 @@ WriteMakefile AUTHOR => 'David Steele ', CCFLAGS => join(' ', qw( + -Wfatal-errors -o $@ -std=c99 -D_FILE_OFFSET_BITS=64 @@ -349,7 +112,11 @@ WriteMakefile -I../src )), - PM => {('lib/' . BACKREST_NAME . '/' . LIB_NAME . '.pm') => ('$(INST_LIB)/' . BACKREST_NAME . '/' . LIB_NAME . '.pm')}, + PM => + { + ('lib/' . BACKREST_NAME . '/' . LIB_NAME . '.pm') => ('$(INST_LIB)/' . BACKREST_NAME . '/' . LIB_NAME . '.pm'), + ('lib/' . BACKREST_NAME . '/' . LIB_AUTO_NAME . '.pm') => ('$(INST_LIB)/' . BACKREST_NAME . '/' . LIB_AUTO_NAME . '.pm'), + }, C => \@stryCFile, diff --git a/libc/build/lib/pgBackRestLibC/Build.pm b/libc/build/lib/pgBackRestLibC/Build.pm new file mode 100644 index 000000000..9e31ffeb0 --- /dev/null +++ b/libc/build/lib/pgBackRestLibC/Build.pm @@ -0,0 +1,316 @@ +#################################################################################################################################### +# Auto-Generate XS and PM Files Required for Perl +#################################################################################################################################### +package pgBackRestLibC::Build; + +use strict; +use warnings FATAL => qw(all); +use Carp qw(confess); +use English '-no_match_vars'; + +use Cwd qw(abs_path); +use Exporter qw(import); + our @EXPORT = qw(); +use File::Basename qw(dirname); +use Storable qw(dclone); + +use lib dirname($0) . '/../build/lib'; +use lib dirname($0) . '/../lib'; + +use pgBackRest::Common::Log; +use pgBackRest::Common::String; +use pgBackRest::Config::Data; +use pgBackRest::Storage::Local; +use pgBackRest::Storage::Posix::Driver; +use pgBackRest::Version; + +use pgBackRestBuild::Build; +use pgBackRestBuild::Build::Common; + +use pgBackRestLibC::Config::Build; +use pgBackRestLibC::Config::BuildDefine; + +#################################################################################################################################### +# Perl function and constant exports +#################################################################################################################################### +use constant BLD_EXPORTTYPE_SUB => 'sub'; +use constant BLD_EXPORTTYPE_CONSTANT => 'constant'; + +use constant LIB_AUTO_NAME => 'LibCAuto'; + +#################################################################################################################################### +# Static exports +#################################################################################################################################### +my $rhExport = +{ + 'checksum' => + { + &BLD_EXPORTTYPE_SUB => [qw( + pageChecksum + pageChecksumBufferTest + pageChecksumTest + )], + }, + + 'config' => + { + &BLD_EXPORTTYPE_SUB => [qw( + cfgCommandName + cfgOptionIndex + cfgOptionIndexTotal + cfgOptionName + )], + }, + + 'configDefine' => + { + &BLD_EXPORTTYPE_SUB => [qw( + cfgCommandId + cfgDefOptionAllowList + cfgDefOptionAllowListValue + cfgDefOptionAllowListValueTotal + cfgDefOptionAllowListValueValid + cfgDefOptionAllowRange + cfgDefOptionAllowRangeMax + cfgDefOptionAllowRangeMin + cfgDefOptionDefault + cfgDefOptionDepend + cfgDefOptionDependOption + cfgDefOptionDependValue + cfgDefOptionDependValueTotal + cfgDefOptionDependValueValid + cfgDefOptionNameAlt + cfgDefOptionNegate + cfgDefOptionPrefix + cfgDefOptionRequired + cfgDefOptionSection + cfgDefOptionSecure + cfgDefOptionType + cfgDefOptionValid + cfgOptionId + cfgOptionTotal + )], + }, + + 'debug' => + { + &BLD_EXPORTTYPE_CONSTANT => [qw( + UVSIZE + )], + + &BLD_EXPORTTYPE_SUB => [qw( + libcVersion + )], + }, + + 'encode' => + { + &BLD_EXPORTTYPE_CONSTANT => [qw( + ENCODE_TYPE_BASE64 + )], + + &BLD_EXPORTTYPE_SUB => [qw( + decodeToBin + encodeToStr + )], + }, +}; + +#################################################################################################################################### +# Execute all build functions +#################################################################################################################################### +sub buildXsAll +{ + my $strBuildPath = shift; + + my $rhBuild = + { + 'config' => + { + &BLD_DATA => buildXsConfig(), + &BLD_PATH => 'xs/config', + }, + + 'configDefine' => + { + &BLD_DATA => buildXsConfigDefine(), + &BLD_PATH => 'xs/config', + }, + }; + + buildAll($strBuildPath, $rhBuild, 'xs'); + + # Storage + my $oStorage = new pgBackRest::Storage::Local( + $strBuildPath, new pgBackRest::Storage::Posix::Driver({bFileSync => false, bPathSync => false})); + + # Get current version + my $strVersion = BACKREST_VERSION; + my $bDev = false; + + if ($strVersion =~ /dev$/) + { + $strVersion = substr($strVersion, 0, length($strVersion) - 3) . '.999'; + $bDev = true; + } + + # Build interface file + my $strContent = + ('#' x 132) . "\n" . + '# ' . bldAutoWarning('Build.pm') . "\n" . + ('#' x 132) . "\n" . + "package pgBackRest::LibCAuto;\n" . + "\n" . + "# Library version (.999 indicates development version)\n" . + "sub libcAutoVersion\n" . + "{\n" . + " return '${strVersion}';\n" . + "}\n"; + + # Generate constants for options that have a list of strings as allowed values + my $rhConfigDefine = cfgDefine(); + my $strConstantBlock; + + foreach my $strOption (sort(keys(%{$rhConfigDefine}))) + { + my $rhOption = $rhConfigDefine->{$strOption}; + + next if $rhOption->{&CFGDEF_TYPE} ne CFGDEF_TYPE_STRING; + next if $strOption =~ /^log-level-/; + + if (defined($rhOption->{&CFGDEF_ALLOW_LIST})) + { + $strConstantBlock .= defined($strConstantBlock) ? "\n" : ''; + + foreach my $strValue (@{$rhOption->{&CFGDEF_ALLOW_LIST}}) + { + my $strConstant = 'CFGOPTVAL_' . uc("${strOption}_${strValue}"); + $strConstant =~ s/\-/\_/g; + + $strConstantBlock .= " ${strConstant}" . (' ' x (69 - length($strConstant) - 4)) . "=> '${strValue}',\n"; + push(@{$rhExport->{'config'}{&BLD_EXPORTTYPE_CONSTANT}}, $strConstant); + } + } + + foreach my $strCommand (sort(keys(%{$rhOption->{&CFGDEF_COMMAND}}))) + { + my $rhCommand = $rhOption->{&CFGDEF_COMMAND}{$strCommand}; + + if (defined($rhCommand->{&CFGDEF_ALLOW_LIST})) + { + $strConstantBlock .= defined($strConstantBlock) ? "\n" : ''; + + foreach my $strValue (@{$rhCommand->{&CFGDEF_ALLOW_LIST}}) + { + my $strConstant = 'CFGOPTVAL_' . uc("${strCommand}_${strOption}_${strValue}"); + $strConstant =~ s/\-/\_/g; + + $strConstantBlock .= " ${strConstant}" . (' ' x (69 - length($strConstant) - 4)) . "=> '${strValue}',\n"; + push(@{$rhExport->{'config'}{&BLD_EXPORTTYPE_CONSTANT}}, $strConstant); + } + } + } + } + + $strContent .= + "\n" . + "# Configuration option value constants\n" . + "sub libcAutoConstant\n" . + "{\n" . + " return \n" . + # " use constant\n" . + " {\n" . + " " . trim($strConstantBlock) . "\n" . + " }\n" . + "}\n"; + + foreach my $strBuild (sort(keys(%{$rhBuild}))) + { + foreach my $strFile (sort(keys(%{$rhBuild->{$strBuild}{&BLD_DATA}{&BLD_FILE}}))) + { + my $rhFileConstant = $rhBuild->{$strBuild}{&BLD_DATA}{&BLD_FILE}{$strFile}{&BLD_CONSTANT_GROUP}; + + foreach my $strConstantGroup (sort(keys(%{$rhFileConstant}))) + { + my $rhConstantGroup = $rhFileConstant->{$strConstantGroup}; + + foreach my $strConstant (sort(keys(%{$rhConstantGroup->{&BLD_CONSTANT}}))) + { + my $rhConstant = $rhConstantGroup->{&BLD_CONSTANT}{$strConstant}; + + if ($rhConstant->{&BLD_CONSTANT_EXPORT}) + { + push(@{$rhExport->{$strBuild}{&BLD_EXPORTTYPE_CONSTANT}}, $strConstant); + } + } + } + } + } + + # Generate export tags + my $strExportTags; + + foreach my $strSection (sort(keys(%{$rhExport}))) + { + my $rhExportSection = $rhExport->{$strSection}; + + $strExportTags .= (defined($strExportTags) ? "\n" : '') . " ${strSection} =>\n [\n"; + + if (defined($rhExportSection->{&BLD_EXPORTTYPE_CONSTANT}) && @{$rhExportSection->{&BLD_EXPORTTYPE_CONSTANT}} > 0) + { + foreach my $strConstant (@{$rhExportSection->{&BLD_EXPORTTYPE_CONSTANT}}) + { + $strExportTags .= " '${strConstant}',\n"; + } + } + + if (defined($rhExportSection->{&BLD_EXPORTTYPE_SUB}) && @{$rhExportSection->{&BLD_EXPORTTYPE_SUB}} > 0) + { + foreach my $strSub (@{$rhExportSection->{&BLD_EXPORTTYPE_SUB}}) + { + $strExportTags .= " '${strSub}',\n"; + } + } + + $strExportTags .= " ],\n"; + } + + $strContent .= + "\n" . + "# Export function and constants\n" . + "sub libcAutoExportTag\n" . + "{\n" . + " return\n" . + " {\n" . + $strExportTags . + " }\n" . + "}\n"; + + # Add module end marker + $strContent .= + "\n" . + "1;\n"; + + # Only save the file if it has changed + my $strLibFile = 'lib/' . BACKREST_NAME . '/' . LIB_AUTO_NAME . '.pm'; + my $bChanged = true; + + if ($oStorage->exists($strLibFile)) + { + my $strContentOld = ${$oStorage->get($strLibFile)}; + + if ($strContent eq $strContentOld) + { + $bChanged = false; + } + } + + if ($bChanged) + { + $oStorage->put($strLibFile, $strContent); + } +} + +push @EXPORT, qw(buildXsAll); + +1; diff --git a/libc/build/lib/pgBackRestLibC/Config/Build.pm b/libc/build/lib/pgBackRestLibC/Config/Build.pm new file mode 100644 index 000000000..3d057b212 --- /dev/null +++ b/libc/build/lib/pgBackRestLibC/Config/Build.pm @@ -0,0 +1,106 @@ +#################################################################################################################################### +# Auto-Generate Command and Option Configuration Constants for Export to Perl +#################################################################################################################################### +package pgBackRestLibC::Config::Build; + +use strict; +use warnings FATAL => qw(all); +use Carp qw(confess); +use English '-no_match_vars'; + +use Cwd qw(abs_path); +use Exporter qw(import); + our @EXPORT = qw(); +use File::Basename qw(dirname); +use Storable qw(dclone); + +use pgBackRest::Common::Log; +use pgBackRest::Common::String; +use pgBackRest::Config::Data; +use pgBackRest::Config::Define; +use pgBackRest::Version; + +use pgBackRestBuild::Build::Common; +use pgBackRestBuild::Config::Build; + +#################################################################################################################################### +# Constants +#################################################################################################################################### +use constant BLDLCL_FILE_CONFIG => 'config'; + +use constant BLDLCL_CONSTANT_COMMAND => '01-command'; +use constant BLDLCL_CONSTANT_OPTION => '02-option'; + +#################################################################################################################################### +# Definitions for constants and data to build +#################################################################################################################################### +my $rhBuild = +{ + &BLD_FILE => + { + #--------------------------------------------------------------------------------------------------------------------------- + &BLDLCL_FILE_CONFIG => + { + &BLD_SUMMARY => 'Command and Option Configuration', + + &BLD_CONSTANT_GROUP => + { + &BLDLCL_CONSTANT_COMMAND => + { + &BLD_SUMMARY => 'Command', + &BLD_CONSTANT => {}, + }, + + &BLDLCL_CONSTANT_OPTION => + { + &BLD_SUMMARY => 'Option', + &BLD_CONSTANT => {}, + }, + }, + }, + }, +}; + +#################################################################################################################################### +# Build constants and data +#################################################################################################################################### +sub buildXsConfig +{ + # Build command constants and data + #------------------------------------------------------------------------------------------------------------------------------- + my $rhConstant = $rhBuild->{&BLD_FILE}{&BLDLCL_FILE_CONFIG}{&BLD_CONSTANT_GROUP}{&BLDLCL_CONSTANT_COMMAND}{&BLD_CONSTANT}; + + foreach my $strCommand (cfgDefineCommandList()) + { + # Build Perl constant + my $strCommandEnum = buildConfigCommandEnum($strCommand); + my $strCommandConstant = "CFGCMD_" . uc($strCommand); + $strCommandConstant =~ s/\-/\_/g; + + $rhConstant->{$strCommandConstant}{&BLD_CONSTANT_VALUE} = $strCommandEnum; + $rhConstant->{$strCommandConstant}{&BLD_CONSTANT_EXPORT} = true; + } + + + # Build option constants and data + #------------------------------------------------------------------------------------------------------------------------------- + my $rhConfigDefine = cfgDefine(); + $rhConstant = $rhBuild->{&BLD_FILE}{&BLDLCL_FILE_CONFIG}{&BLD_CONSTANT_GROUP}{&BLDLCL_CONSTANT_OPTION}{&BLD_CONSTANT}; + + foreach my $strOption (sort(keys(%{$rhConfigDefine}))) + { + # Build Perl constant + my $strOptionEnum = buildConfigOptionEnum($strOption); + my $strOptionConstant = "CFGOPT_" . uc($strOption); + $strOptionConstant =~ s/\-/\_/g; + + $rhConstant->{$strOptionConstant}{&BLD_CONSTANT_VALUE} = $strOptionEnum; + $rhConstant->{$strOptionConstant}{&BLD_CONSTANT_EXPORT} = true; + } + + return $rhBuild; +} + +push @EXPORT, qw(buildXsConfig); + +1; diff --git a/libc/build/lib/pgBackRestLibC/Config/BuildDefine.pm b/libc/build/lib/pgBackRestLibC/Config/BuildDefine.pm new file mode 100644 index 000000000..ae3b50710 --- /dev/null +++ b/libc/build/lib/pgBackRestLibC/Config/BuildDefine.pm @@ -0,0 +1,82 @@ +#################################################################################################################################### +# Auto-Generate Command and Option Configuration Definition Constants for Export to Perl +#################################################################################################################################### +package pgBackRestLibC::Config::BuildDefine; + +use strict; +use warnings FATAL => qw(all); +use Carp qw(confess); +use English '-no_match_vars'; + +use Cwd qw(abs_path); +use Exporter qw(import); + our @EXPORT = qw(); +use File::Basename qw(dirname); +use Storable qw(dclone); + +use pgBackRest::Common::Log; +use pgBackRest::Common::String; +use pgBackRest::Config::Data; +use pgBackRest::Config::Define; +use pgBackRest::Version; + +use pgBackRestBuild::Build::Common; +use pgBackRestBuild::Config::BuildDefine; + +#################################################################################################################################### +# Constants +#################################################################################################################################### +use constant BLDLCL_FILE_DEFINE => 'define'; + +use constant BLDLCL_CONSTANT_OPTION_TYPE => '01-constantOptionType'; + +#################################################################################################################################### +# Definitions for constants and data to build +#################################################################################################################################### +my $strSummary = 'Command and Option Definitions'; + +my $rhBuild = +{ + &BLD_FILE => + { + &BLDLCL_FILE_DEFINE => + { + &BLD_SUMMARY => $strSummary, + + &BLD_CONSTANT_GROUP => + { + &BLDLCL_CONSTANT_OPTION_TYPE => + { + &BLD_SUMMARY => 'Option type', + &BLD_CONSTANT => {}, + }, + }, + }, + }, +}; + +#################################################################################################################################### +# Build configuration constants and data +#################################################################################################################################### +sub buildXsConfigDefine +{ + # Build option type constants + #------------------------------------------------------------------------------------------------------------------------------- + my $rhConstant = $rhBuild->{&BLD_FILE}{&BLDLCL_FILE_DEFINE}{&BLD_CONSTANT_GROUP}{&BLDLCL_CONSTANT_OPTION_TYPE}{&BLD_CONSTANT}; + + foreach my $strOptionType (cfgDefineOptionTypeList()) + { + # Build Perl constant + my $strOptionTypeConstant = "CFGDEF_TYPE_" . uc($strOptionType); + $strOptionTypeConstant =~ s/\-/\_/g; + + $rhConstant->{$strOptionTypeConstant}{&BLD_CONSTANT_VALUE} = buildConfigDefineOptionTypeEnum($strOptionType); + $rhConstant->{$strOptionTypeConstant}{&BLD_CONSTANT_EXPORT} = true; + }; + + return $rhBuild; +} + +push @EXPORT, qw(buildXsConfigDefine); + +1; diff --git a/libc/LibC.template.pm b/libc/lib/pgBackRest/LibC.pm similarity index 65% rename from libc/LibC.template.pm rename to libc/lib/pgBackRest/LibC.pm index 768f1b529..4c55480dd 100644 --- a/libc/LibC.template.pm +++ b/libc/lib/pgBackRest/LibC.pm @@ -1,7 +1,5 @@ #################################################################################################################################### # C to Perl Interface -# -# {[LIBC_AUTO_WARNING]} #################################################################################################################################### package pgBackRest::LibC; @@ -12,32 +10,37 @@ use Carp; require Exporter; use AutoLoader; - our @ISA = qw(Exporter); -# Library version (.999 indicates development version) -our $VERSION = '{[LIBC_VERSION]}'; +use pgBackRest::LibCAuto; -sub libCVersion {return $VERSION}; +# Library version +our $VERSION = pgBackRest::LibCAuto::libcAutoVersion(); -# Configuration option value constants -use constant +sub libcVersion { - {[LIBC_CONSTANT]} -}; + return $VERSION; +} + +# Dynamically create constants +my $rhConstant = pgBackRest::LibCAuto::libcAutoConstant(); + +foreach my $strConstant (keys(%{$rhConstant})) +{ + eval "use constant ${strConstant} => '" . $rhConstant->{$strConstant} . "'"; +} # Export function and constants -our %EXPORT_TAGS = -( - {[LIBC_EXPORT_TAGS]} -); +our %EXPORT_TAGS = %{pgBackRest::LibCAuto::libcAutoExportTag()}; +our @EXPORT_OK; -our @EXPORT_OK = ( - {[LIBC_EXPORT_OK]} -); +foreach my $strSection (keys(%EXPORT_TAGS)) +{ + push(@EXPORT_OK, @{$EXPORT_TAGS{$strSection}}); +} # Nothing is exported by default -our @EXPORT = qw(); +our @EXPORT = (); # Autoload constants from the constant() XS function sub AUTOLOAD diff --git a/libc/lib/pgBackRest/LibCAuto.pm b/libc/lib/pgBackRest/LibCAuto.pm new file mode 100644 index 000000000..1dd1ae290 --- /dev/null +++ b/libc/lib/pgBackRest/LibCAuto.pm @@ -0,0 +1,242 @@ +#################################################################################################################################### +# Automatically generated by Build.pm -- do not modify directly. +#################################################################################################################################### +package pgBackRest::LibCAuto; + +# Library version (.999 indicates development version) +sub libcAutoVersion +{ + return '1.26.999'; +} + +# Configuration option value constants +sub libcAutoConstant +{ + return + { + CFGOPTVAL_INFO_OUTPUT_TEXT => 'text', + CFGOPTVAL_INFO_OUTPUT_JSON => 'json', + + CFGOPTVAL_REPO_TYPE_CIFS => 'cifs', + CFGOPTVAL_REPO_TYPE_POSIX => 'posix', + CFGOPTVAL_REPO_TYPE_S3 => 's3', + + CFGOPTVAL_RETENTION_ARCHIVE_TYPE_FULL => 'full', + CFGOPTVAL_RETENTION_ARCHIVE_TYPE_DIFF => 'diff', + CFGOPTVAL_RETENTION_ARCHIVE_TYPE_INCR => 'incr', + + CFGOPTVAL_RESTORE_TARGET_ACTION_PAUSE => 'pause', + CFGOPTVAL_RESTORE_TARGET_ACTION_PROMOTE => 'promote', + CFGOPTVAL_RESTORE_TARGET_ACTION_SHUTDOWN => 'shutdown', + + CFGOPTVAL_BACKUP_TYPE_FULL => 'full', + CFGOPTVAL_BACKUP_TYPE_DIFF => 'diff', + CFGOPTVAL_BACKUP_TYPE_INCR => 'incr', + + CFGOPTVAL_LOCAL_TYPE_DB => 'db', + CFGOPTVAL_LOCAL_TYPE_BACKUP => 'backup', + + CFGOPTVAL_REMOTE_TYPE_DB => 'db', + CFGOPTVAL_REMOTE_TYPE_BACKUP => 'backup', + + CFGOPTVAL_RESTORE_TYPE_NAME => 'name', + CFGOPTVAL_RESTORE_TYPE_TIME => 'time', + CFGOPTVAL_RESTORE_TYPE_XID => 'xid', + CFGOPTVAL_RESTORE_TYPE_PRESERVE => 'preserve', + CFGOPTVAL_RESTORE_TYPE_NONE => 'none', + CFGOPTVAL_RESTORE_TYPE_IMMEDIATE => 'immediate', + CFGOPTVAL_RESTORE_TYPE_DEFAULT => 'default', + } +} + +# Export function and constants +sub libcAutoExportTag +{ + return + { + checksum => + [ + 'pageChecksum', + 'pageChecksumBufferTest', + 'pageChecksumTest', + ], + + config => + [ + 'CFGOPTVAL_INFO_OUTPUT_TEXT', + 'CFGOPTVAL_INFO_OUTPUT_JSON', + 'CFGOPTVAL_REPO_TYPE_CIFS', + 'CFGOPTVAL_REPO_TYPE_POSIX', + 'CFGOPTVAL_REPO_TYPE_S3', + 'CFGOPTVAL_RETENTION_ARCHIVE_TYPE_FULL', + 'CFGOPTVAL_RETENTION_ARCHIVE_TYPE_DIFF', + 'CFGOPTVAL_RETENTION_ARCHIVE_TYPE_INCR', + 'CFGOPTVAL_RESTORE_TARGET_ACTION_PAUSE', + 'CFGOPTVAL_RESTORE_TARGET_ACTION_PROMOTE', + 'CFGOPTVAL_RESTORE_TARGET_ACTION_SHUTDOWN', + 'CFGOPTVAL_BACKUP_TYPE_FULL', + 'CFGOPTVAL_BACKUP_TYPE_DIFF', + 'CFGOPTVAL_BACKUP_TYPE_INCR', + 'CFGOPTVAL_LOCAL_TYPE_DB', + 'CFGOPTVAL_LOCAL_TYPE_BACKUP', + 'CFGOPTVAL_REMOTE_TYPE_DB', + 'CFGOPTVAL_REMOTE_TYPE_BACKUP', + 'CFGOPTVAL_RESTORE_TYPE_NAME', + 'CFGOPTVAL_RESTORE_TYPE_TIME', + 'CFGOPTVAL_RESTORE_TYPE_XID', + 'CFGOPTVAL_RESTORE_TYPE_PRESERVE', + 'CFGOPTVAL_RESTORE_TYPE_NONE', + 'CFGOPTVAL_RESTORE_TYPE_IMMEDIATE', + 'CFGOPTVAL_RESTORE_TYPE_DEFAULT', + 'CFGCMD_ARCHIVE_GET', + 'CFGCMD_ARCHIVE_PUSH', + 'CFGCMD_BACKUP', + 'CFGCMD_CHECK', + 'CFGCMD_EXPIRE', + 'CFGCMD_HELP', + 'CFGCMD_INFO', + 'CFGCMD_LOCAL', + 'CFGCMD_REMOTE', + 'CFGCMD_RESTORE', + 'CFGCMD_STANZA_CREATE', + 'CFGCMD_STANZA_UPGRADE', + 'CFGCMD_START', + 'CFGCMD_STOP', + 'CFGCMD_VERSION', + 'CFGOPT_ARCHIVE_ASYNC', + 'CFGOPT_ARCHIVE_CHECK', + 'CFGOPT_ARCHIVE_COPY', + 'CFGOPT_ARCHIVE_MAX_MB', + 'CFGOPT_ARCHIVE_QUEUE_MAX', + 'CFGOPT_ARCHIVE_TIMEOUT', + 'CFGOPT_BACKUP_CMD', + 'CFGOPT_BACKUP_CONFIG', + 'CFGOPT_BACKUP_HOST', + 'CFGOPT_BACKUP_SSH_PORT', + 'CFGOPT_BACKUP_STANDBY', + 'CFGOPT_BACKUP_USER', + 'CFGOPT_BUFFER_SIZE', + 'CFGOPT_CHECKSUM_PAGE', + 'CFGOPT_CMD_SSH', + 'CFGOPT_COMMAND', + 'CFGOPT_COMPRESS', + 'CFGOPT_COMPRESS_LEVEL', + 'CFGOPT_COMPRESS_LEVEL_NETWORK', + 'CFGOPT_CONFIG', + 'CFGOPT_DB_CMD', + 'CFGOPT_DB_CONFIG', + 'CFGOPT_DB_HOST', + 'CFGOPT_DB_INCLUDE', + 'CFGOPT_DB_PATH', + 'CFGOPT_DB_PORT', + 'CFGOPT_DB_SOCKET_PATH', + 'CFGOPT_DB_SSH_PORT', + 'CFGOPT_DB_TIMEOUT', + 'CFGOPT_DB_USER', + 'CFGOPT_DELTA', + 'CFGOPT_FORCE', + 'CFGOPT_HARDLINK', + 'CFGOPT_HOST_ID', + 'CFGOPT_LINK_ALL', + 'CFGOPT_LINK_MAP', + 'CFGOPT_LOCK_PATH', + 'CFGOPT_LOG_LEVEL_CONSOLE', + 'CFGOPT_LOG_LEVEL_FILE', + 'CFGOPT_LOG_LEVEL_STDERR', + 'CFGOPT_LOG_PATH', + 'CFGOPT_LOG_TIMESTAMP', + 'CFGOPT_MANIFEST_SAVE_THRESHOLD', + 'CFGOPT_NEUTRAL_UMASK', + 'CFGOPT_ONLINE', + 'CFGOPT_OUTPUT', + 'CFGOPT_PROCESS', + 'CFGOPT_PROCESS_MAX', + 'CFGOPT_PROTOCOL_TIMEOUT', + 'CFGOPT_RECOVERY_OPTION', + 'CFGOPT_REPO_PATH', + 'CFGOPT_REPO_S3_BUCKET', + 'CFGOPT_REPO_S3_CA_FILE', + 'CFGOPT_REPO_S3_CA_PATH', + 'CFGOPT_REPO_S3_ENDPOINT', + 'CFGOPT_REPO_S3_HOST', + 'CFGOPT_REPO_S3_KEY', + 'CFGOPT_REPO_S3_KEY_SECRET', + 'CFGOPT_REPO_S3_REGION', + 'CFGOPT_REPO_S3_VERIFY_SSL', + 'CFGOPT_REPO_TYPE', + 'CFGOPT_RESUME', + 'CFGOPT_RETENTION_ARCHIVE', + 'CFGOPT_RETENTION_ARCHIVE_TYPE', + 'CFGOPT_RETENTION_DIFF', + 'CFGOPT_RETENTION_FULL', + 'CFGOPT_SET', + 'CFGOPT_SPOOL_PATH', + 'CFGOPT_STANZA', + 'CFGOPT_START_FAST', + 'CFGOPT_STOP_AUTO', + 'CFGOPT_TABLESPACE_MAP', + 'CFGOPT_TABLESPACE_MAP_ALL', + 'CFGOPT_TARGET', + 'CFGOPT_TARGET_ACTION', + 'CFGOPT_TARGET_EXCLUSIVE', + 'CFGOPT_TARGET_TIMELINE', + 'CFGOPT_TEST', + 'CFGOPT_TEST_DELAY', + 'CFGOPT_TEST_POINT', + 'CFGOPT_TYPE', + 'cfgCommandName', + 'cfgOptionIndex', + 'cfgOptionIndexTotal', + 'cfgOptionName', + ], + + configDefine => + [ + 'CFGDEF_TYPE_BOOLEAN', + 'CFGDEF_TYPE_FLOAT', + 'CFGDEF_TYPE_HASH', + 'CFGDEF_TYPE_INTEGER', + 'CFGDEF_TYPE_LIST', + 'CFGDEF_TYPE_STRING', + 'cfgCommandId', + 'cfgDefOptionAllowList', + 'cfgDefOptionAllowListValue', + 'cfgDefOptionAllowListValueTotal', + 'cfgDefOptionAllowListValueValid', + 'cfgDefOptionAllowRange', + 'cfgDefOptionAllowRangeMax', + 'cfgDefOptionAllowRangeMin', + 'cfgDefOptionDefault', + 'cfgDefOptionDepend', + 'cfgDefOptionDependOption', + 'cfgDefOptionDependValue', + 'cfgDefOptionDependValueTotal', + 'cfgDefOptionDependValueValid', + 'cfgDefOptionNameAlt', + 'cfgDefOptionNegate', + 'cfgDefOptionPrefix', + 'cfgDefOptionRequired', + 'cfgDefOptionSection', + 'cfgDefOptionSecure', + 'cfgDefOptionType', + 'cfgDefOptionValid', + 'cfgOptionId', + 'cfgOptionTotal', + ], + + debug => + [ + 'UVSIZE', + 'libcVersion', + ], + + encode => + [ + 'ENCODE_TYPE_BASE64', + 'decodeToBin', + 'encodeToStr', + ], + } +} + +1; diff --git a/libc/t/sanity.t b/libc/t/sanity.t index d27b3f808..986a5d28f 100644 --- a/libc/t/sanity.t +++ b/libc/t/sanity.t @@ -9,14 +9,16 @@ use Carp; use English '-no_match_vars'; # Set number of tests -use Test::More tests => 2; +use Test::More tests => 4; # Make sure the module loads without errors -BEGIN {use_ok('pgBackRest::LibC')}; - -# Load the module dynamically so it does not interfere with the test above -require pgBackRest::LibC; -pgBackRest::LibC->import(qw(:debug)); +BEGIN {use_ok('pgBackRest::LibC', qw(:debug :config :configDefine))}; # UVSIZE determines the pointer and long long int size. This needs to be 8 to indicate 64-bit types are available. ok (&UVSIZE == 8, 'UVSIZE == 8'); + +# Check constant that is created dynamically +ok (CFGOPTVAL_BACKUP_TYPE_FULL eq 'full', 'auto constant valid'); + +# Check constant that is exported from C +ok (CFGDEF_TYPE_HASH >= 0, 'auto constant valid'); diff --git a/libc/xs/config/config.auto.xsh b/libc/xs/config/config.auto.xsh new file mode 100644 index 000000000..407fd79d1 --- /dev/null +++ b/libc/xs/config/config.auto.xsh @@ -0,0 +1,113 @@ +/*********************************************************************************************************************************** +Command and Option Configuration + +Automatically generated by Build.pm -- do not modify directly. +***********************************************************************************************************************************/ +#ifndef XS_CONFIG_CONFIG_AUTO_H +#define XS_CONFIG_CONFIG_AUTO_H + +/*********************************************************************************************************************************** +Command constants +***********************************************************************************************************************************/ +#define CFGCMD_ARCHIVE_GET cfgCmdArchiveGet +#define CFGCMD_ARCHIVE_PUSH cfgCmdArchivePush +#define CFGCMD_BACKUP cfgCmdBackup +#define CFGCMD_CHECK cfgCmdCheck +#define CFGCMD_EXPIRE cfgCmdExpire +#define CFGCMD_HELP cfgCmdHelp +#define CFGCMD_INFO cfgCmdInfo +#define CFGCMD_LOCAL cfgCmdLocal +#define CFGCMD_REMOTE cfgCmdRemote +#define CFGCMD_RESTORE cfgCmdRestore +#define CFGCMD_STANZA_CREATE cfgCmdStanzaCreate +#define CFGCMD_STANZA_UPGRADE cfgCmdStanzaUpgrade +#define CFGCMD_START cfgCmdStart +#define CFGCMD_STOP cfgCmdStop +#define CFGCMD_VERSION cfgCmdVersion + +/*********************************************************************************************************************************** +Option constants +***********************************************************************************************************************************/ +#define CFGOPT_ARCHIVE_ASYNC cfgOptArchiveAsync +#define CFGOPT_ARCHIVE_CHECK cfgOptArchiveCheck +#define CFGOPT_ARCHIVE_COPY cfgOptArchiveCopy +#define CFGOPT_ARCHIVE_MAX_MB cfgOptArchiveMaxMb +#define CFGOPT_ARCHIVE_QUEUE_MAX cfgOptArchiveQueueMax +#define CFGOPT_ARCHIVE_TIMEOUT cfgOptArchiveTimeout +#define CFGOPT_BACKUP_CMD cfgOptBackupCmd +#define CFGOPT_BACKUP_CONFIG cfgOptBackupConfig +#define CFGOPT_BACKUP_HOST cfgOptBackupHost +#define CFGOPT_BACKUP_SSH_PORT cfgOptBackupSshPort +#define CFGOPT_BACKUP_STANDBY cfgOptBackupStandby +#define CFGOPT_BACKUP_USER cfgOptBackupUser +#define CFGOPT_BUFFER_SIZE cfgOptBufferSize +#define CFGOPT_CHECKSUM_PAGE cfgOptChecksumPage +#define CFGOPT_CMD_SSH cfgOptCmdSsh +#define CFGOPT_COMMAND cfgOptCommand +#define CFGOPT_COMPRESS cfgOptCompress +#define CFGOPT_COMPRESS_LEVEL cfgOptCompressLevel +#define CFGOPT_COMPRESS_LEVEL_NETWORK cfgOptCompressLevelNetwork +#define CFGOPT_CONFIG cfgOptConfig +#define CFGOPT_DB_CMD cfgOptDbCmd +#define CFGOPT_DB_CONFIG cfgOptDbConfig +#define CFGOPT_DB_HOST cfgOptDbHost +#define CFGOPT_DB_INCLUDE cfgOptDbInclude +#define CFGOPT_DB_PATH cfgOptDbPath +#define CFGOPT_DB_PORT cfgOptDbPort +#define CFGOPT_DB_SOCKET_PATH cfgOptDbSocketPath +#define CFGOPT_DB_SSH_PORT cfgOptDbSshPort +#define CFGOPT_DB_TIMEOUT cfgOptDbTimeout +#define CFGOPT_DB_USER cfgOptDbUser +#define CFGOPT_DELTA cfgOptDelta +#define CFGOPT_FORCE cfgOptForce +#define CFGOPT_HARDLINK cfgOptHardlink +#define CFGOPT_HOST_ID cfgOptHostId +#define CFGOPT_LINK_ALL cfgOptLinkAll +#define CFGOPT_LINK_MAP cfgOptLinkMap +#define CFGOPT_LOCK_PATH cfgOptLockPath +#define CFGOPT_LOG_LEVEL_CONSOLE cfgOptLogLevelConsole +#define CFGOPT_LOG_LEVEL_FILE cfgOptLogLevelFile +#define CFGOPT_LOG_LEVEL_STDERR cfgOptLogLevelStderr +#define CFGOPT_LOG_PATH cfgOptLogPath +#define CFGOPT_LOG_TIMESTAMP cfgOptLogTimestamp +#define CFGOPT_MANIFEST_SAVE_THRESHOLD cfgOptManifestSaveThreshold +#define CFGOPT_NEUTRAL_UMASK cfgOptNeutralUmask +#define CFGOPT_ONLINE cfgOptOnline +#define CFGOPT_OUTPUT cfgOptOutput +#define CFGOPT_PROCESS cfgOptProcess +#define CFGOPT_PROCESS_MAX cfgOptProcessMax +#define CFGOPT_PROTOCOL_TIMEOUT cfgOptProtocolTimeout +#define CFGOPT_RECOVERY_OPTION cfgOptRecoveryOption +#define CFGOPT_REPO_PATH cfgOptRepoPath +#define CFGOPT_REPO_S3_BUCKET cfgOptRepoS3Bucket +#define CFGOPT_REPO_S3_CA_FILE cfgOptRepoS3CaFile +#define CFGOPT_REPO_S3_CA_PATH cfgOptRepoS3CaPath +#define CFGOPT_REPO_S3_ENDPOINT cfgOptRepoS3Endpoint +#define CFGOPT_REPO_S3_HOST cfgOptRepoS3Host +#define CFGOPT_REPO_S3_KEY cfgOptRepoS3Key +#define CFGOPT_REPO_S3_KEY_SECRET cfgOptRepoS3KeySecret +#define CFGOPT_REPO_S3_REGION cfgOptRepoS3Region +#define CFGOPT_REPO_S3_VERIFY_SSL cfgOptRepoS3VerifySsl +#define CFGOPT_REPO_TYPE cfgOptRepoType +#define CFGOPT_RESUME cfgOptResume +#define CFGOPT_RETENTION_ARCHIVE cfgOptRetentionArchive +#define CFGOPT_RETENTION_ARCHIVE_TYPE cfgOptRetentionArchiveType +#define CFGOPT_RETENTION_DIFF cfgOptRetentionDiff +#define CFGOPT_RETENTION_FULL cfgOptRetentionFull +#define CFGOPT_SET cfgOptSet +#define CFGOPT_SPOOL_PATH cfgOptSpoolPath +#define CFGOPT_STANZA cfgOptStanza +#define CFGOPT_START_FAST cfgOptStartFast +#define CFGOPT_STOP_AUTO cfgOptStopAuto +#define CFGOPT_TABLESPACE_MAP cfgOptTablespaceMap +#define CFGOPT_TABLESPACE_MAP_ALL cfgOptTablespaceMapAll +#define CFGOPT_TARGET cfgOptTarget +#define CFGOPT_TARGET_ACTION cfgOptTargetAction +#define CFGOPT_TARGET_EXCLUSIVE cfgOptTargetExclusive +#define CFGOPT_TARGET_TIMELINE cfgOptTargetTimeline +#define CFGOPT_TEST cfgOptTest +#define CFGOPT_TEST_DELAY cfgOptTestDelay +#define CFGOPT_TEST_POINT cfgOptTestPoint +#define CFGOPT_TYPE cfgOptType + +#endif diff --git a/libc/xs/config/config.xs b/libc/xs/config/config.xs index 18bf17087..af8e376ba 100644 --- a/libc/xs/config/config.xs +++ b/libc/xs/config/config.xs @@ -8,6 +8,10 @@ const char * cfgCommandName(commandId) U32 commandId +I32 +cfgOptionIndex(optionId) + U32 optionId + I32 cfgOptionIndexTotal(optionId) U32 optionId diff --git a/libc/xs/config/configRule.xs b/libc/xs/config/configRule.xs deleted file mode 100644 index 68beead09..000000000 --- a/libc/xs/config/configRule.xs +++ /dev/null @@ -1,118 +0,0 @@ -# ---------------------------------------------------------------------------------------------------------------------------------- -# Config Rule Perl Exports -# ---------------------------------------------------------------------------------------------------------------------------------- - -MODULE = pgBackRest::LibC PACKAGE = pgBackRest::LibC - -I32 -cfgCommandId(commandName) - const char *commandName - -I32 -cfgOptionId(optionName) - const char *optionName - -bool -cfgRuleOptionAllowList(commandId, optionId) - U32 commandId - U32 optionId - -const char * -cfgRuleOptionAllowListValue(commandId, optionId, valueId) - U32 commandId - U32 optionId - U32 valueId - -I32 -cfgRuleOptionAllowListValueTotal(commandId, optionId) - U32 commandId - U32 optionId - -bool -cfgRuleOptionAllowListValueValid(commandId, optionId, value); - U32 commandId - U32 optionId - const char *value - -bool -cfgRuleOptionAllowRange(commandId, optionId) - U32 commandId - U32 optionId - -double -cfgRuleOptionAllowRangeMax(commandId, optionId) - U32 commandId - U32 optionId - -double -cfgRuleOptionAllowRangeMin(commandId, optionId) - U32 commandId - U32 optionId - -const char * -cfgRuleOptionDefault(commandId, optionId) - U32 commandId - U32 optionId - -bool -cfgRuleOptionDepend(commandId, optionId); - U32 commandId - U32 optionId - -I32 -cfgRuleOptionDependOption(commandId, optionId) - U32 commandId - U32 optionId - -const char * -cfgRuleOptionDependValue(commandId, optionId, valueId) - U32 commandId - U32 optionId - U32 valueId - -I32 -cfgRuleOptionDependValueTotal(commandId, optionId) - U32 commandId - U32 optionId - -bool -cfgRuleOptionDependValueValid(commandId, optionId, value) - U32 commandId - U32 optionId - const char *value - -const char * -cfgRuleOptionNameAlt(optionId) - U32 optionId - -bool cfgRuleOptionNegate(optionId) - U32 optionId - -const char * -cfgRuleOptionPrefix(optionId) - U32 optionId - -bool -cfgRuleOptionRequired(commandId, optionId) - U32 commandId - U32 optionId - -const char * -cfgRuleOptionSection(optionId) - U32 optionId - -bool -cfgRuleOptionSecure(optionId) - U32 optionId - -I32 -cfgRuleOptionType(optionId); - U32 optionId - -bool -cfgRuleOptionValid(commandId, optionId) - U32 commandId - U32 optionId - -U32 -cfgOptionTotal() diff --git a/libc/xs/config/define.auto.xsh b/libc/xs/config/define.auto.xsh new file mode 100644 index 000000000..3eea63577 --- /dev/null +++ b/libc/xs/config/define.auto.xsh @@ -0,0 +1,19 @@ +/*********************************************************************************************************************************** +Command and Option Definitions + +Automatically generated by Build.pm -- do not modify directly. +***********************************************************************************************************************************/ +#ifndef XS_CONFIG_DEFINE_AUTO_H +#define XS_CONFIG_DEFINE_AUTO_H + +/*********************************************************************************************************************************** +Option type constants +***********************************************************************************************************************************/ +#define CFGDEF_TYPE_BOOLEAN cfgDefOptTypeBoolean +#define CFGDEF_TYPE_FLOAT cfgDefOptTypeFloat +#define CFGDEF_TYPE_HASH cfgDefOptTypeHash +#define CFGDEF_TYPE_INTEGER cfgDefOptTypeInteger +#define CFGDEF_TYPE_LIST cfgDefOptTypeList +#define CFGDEF_TYPE_STRING cfgDefOptTypeString + +#endif diff --git a/libc/xs/config/define.xs b/libc/xs/config/define.xs new file mode 100644 index 000000000..0256f50b4 --- /dev/null +++ b/libc/xs/config/define.xs @@ -0,0 +1,370 @@ +# ---------------------------------------------------------------------------------------------------------------------------------- +# Config Definition Perl Exports +# ---------------------------------------------------------------------------------------------------------------------------------- + +MODULE = pgBackRest::LibC PACKAGE = pgBackRest::LibC + +I32 +cfgCommandId(commandName) + const char *commandName +CODE: + RETVAL = 0; + + ERROR_XS_BEGIN() + { + RETVAL = cfgCommandId(commandName); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +I32 +cfgOptionId(optionName) + const char *optionName +CODE: + RETVAL = 0; + + ERROR_XS_BEGIN() + { + RETVAL = cfgOptionId(optionName); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +bool +cfgDefOptionAllowList(commandId, optionId) + U32 commandId + U32 optionId +CODE: + RETVAL = false; + + ERROR_XS_BEGIN() + { + RETVAL = cfgDefOptionAllowList(cfgCommandDefIdFromId(commandId), cfgOptionDefIdFromId(optionId)); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +const char * +cfgDefOptionAllowListValue(commandId, optionId, valueId) + U32 commandId + U32 optionId + U32 valueId +CODE: + RETVAL = NULL; + + ERROR_XS_BEGIN() + { + RETVAL = cfgDefOptionAllowListValue(cfgCommandDefIdFromId(commandId), cfgOptionDefIdFromId(optionId), valueId); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +I32 +cfgDefOptionAllowListValueTotal(commandId, optionId) + U32 commandId + U32 optionId +CODE: + RETVAL = 0; + + ERROR_XS_BEGIN() + { + RETVAL = cfgDefOptionAllowListValueTotal(cfgCommandDefIdFromId(commandId), cfgOptionDefIdFromId(optionId)); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +bool +cfgDefOptionAllowListValueValid(commandId, optionId, value); + U32 commandId + U32 optionId + const char *value +CODE: + RETVAL = false; + + ERROR_XS_BEGIN() + { + RETVAL = cfgDefOptionAllowListValueValid(cfgCommandDefIdFromId(commandId), cfgOptionDefIdFromId(optionId), value); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +bool +cfgDefOptionAllowRange(commandId, optionId) + U32 commandId + U32 optionId +CODE: + RETVAL = false; + + ERROR_XS_BEGIN() + { + RETVAL = cfgDefOptionAllowRange(cfgCommandDefIdFromId(commandId), cfgOptionDefIdFromId(optionId)); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +double +cfgDefOptionAllowRangeMax(commandId, optionId) + U32 commandId + U32 optionId +CODE: + RETVAL = 0; + + ERROR_XS_BEGIN() + { + RETVAL = cfgDefOptionAllowRangeMax(cfgCommandDefIdFromId(commandId), cfgOptionDefIdFromId(optionId)); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +double +cfgDefOptionAllowRangeMin(commandId, optionId) + U32 commandId + U32 optionId +CODE: + RETVAL = 0; + + ERROR_XS_BEGIN() + { + RETVAL = cfgDefOptionAllowRangeMin(cfgCommandDefIdFromId(commandId), cfgOptionDefIdFromId(optionId)); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +const char * +cfgDefOptionDefault(commandId, optionId) + U32 commandId + U32 optionId +CODE: + RETVAL = NULL; + + ERROR_XS_BEGIN() + { + RETVAL = cfgDefOptionDefault(cfgCommandDefIdFromId(commandId), cfgOptionDefIdFromId(optionId)); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +bool +cfgDefOptionDepend(commandId, optionId); + U32 commandId + U32 optionId +CODE: + RETVAL = false; + + ERROR_XS_BEGIN() + { + RETVAL = cfgDefOptionDepend(cfgCommandDefIdFromId(commandId), cfgOptionDefIdFromId(optionId)); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +I32 +cfgDefOptionDependOption(commandId, optionId) + U32 commandId + U32 optionId +CODE: + RETVAL = 0; + + ERROR_XS_BEGIN() + { + RETVAL = cfgOptionIdFromDefId( + cfgDefOptionDependOption( + cfgCommandDefIdFromId(commandId), cfgOptionDefIdFromId(optionId)), cfgOptionIndex(optionId)); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +const char * +cfgDefOptionDependValue(commandId, optionId, valueId) + U32 commandId + U32 optionId + U32 valueId +CODE: + RETVAL = NULL; + + ERROR_XS_BEGIN() + { + RETVAL = cfgDefOptionDependValue(cfgCommandDefIdFromId(commandId), cfgOptionDefIdFromId(optionId), valueId); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +I32 +cfgDefOptionDependValueTotal(commandId, optionId) + U32 commandId + U32 optionId +CODE: + RETVAL = 0; + + ERROR_XS_BEGIN() + { + RETVAL = cfgDefOptionDependValueTotal(cfgCommandDefIdFromId(commandId), cfgOptionDefIdFromId(optionId)); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +bool +cfgDefOptionDependValueValid(commandId, optionId, value) + U32 commandId + U32 optionId + const char *value +CODE: + RETVAL = false; + + ERROR_XS_BEGIN() + { + RETVAL = cfgDefOptionDependValueValid(cfgCommandDefIdFromId(commandId), cfgOptionDefIdFromId(optionId), value); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +const char * +cfgDefOptionNameAlt(optionId) + U32 optionId +CODE: + RETVAL = NULL; + + ERROR_XS_BEGIN() + { + if (cfgOptionIndexTotal(optionId) > 1 && cfgOptionIndex(optionId) == 0) + RETVAL = cfgDefOptionName(cfgOptionDefIdFromId(optionId)); + else + RETVAL = cfgDefOptionNameAlt(cfgOptionDefIdFromId(optionId)); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +bool cfgDefOptionNegate(optionId) + U32 optionId +CODE: + RETVAL = false; + + ERROR_XS_BEGIN() + { + RETVAL = cfgDefOptionNegate(cfgOptionDefIdFromId(optionId)); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +const char * +cfgDefOptionPrefix(optionId) + U32 optionId +CODE: + RETVAL = NULL; + + ERROR_XS_BEGIN() + { + RETVAL = cfgDefOptionPrefix(cfgOptionDefIdFromId(optionId)); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +bool +cfgDefOptionRequired(commandId, optionId) + U32 commandId + U32 optionId +CODE: + RETVAL = false; + + ERROR_XS_BEGIN() + { + // Only the first indexed option is ever required + if (cfgOptionIndex(optionId) == 0) + { + RETVAL = cfgDefOptionRequired(cfgCommandDefIdFromId(commandId), cfgOptionDefIdFromId(optionId)); + } + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +const char * +cfgDefOptionSection(optionId) + U32 optionId +CODE: + RETVAL = NULL; + + ERROR_XS_BEGIN() + { + switch (cfgDefOptionSection(cfgOptionDefIdFromId(optionId))) + { + case cfgDefSectionGlobal: + RETVAL = "global"; + break; + + case cfgDefSectionStanza: + RETVAL = "stanza"; + break; + + default: + RETVAL = NULL; + break; + } + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +bool +cfgDefOptionSecure(optionId) + U32 optionId +CODE: + RETVAL = false; + + ERROR_XS_BEGIN() + { + RETVAL = cfgDefOptionSecure(cfgOptionDefIdFromId(optionId)); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +I32 +cfgDefOptionType(optionId); + U32 optionId +CODE: + RETVAL = 0; + + ERROR_XS_BEGIN() + { + RETVAL = cfgDefOptionType(cfgOptionDefIdFromId(optionId)); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +bool +cfgDefOptionValid(commandId, optionId) + U32 commandId + U32 optionId +CODE: + RETVAL = false; + + ERROR_XS_BEGIN() + { + RETVAL = cfgDefOptionValid(cfgCommandDefIdFromId(commandId), cfgOptionDefIdFromId(optionId)); + } + ERROR_XS_END(); +OUTPUT: + RETVAL + +U32 +cfgOptionTotal() diff --git a/src/.gitignore b/src/.gitignore deleted file mode 100644 index de4f38f3f..000000000 --- a/src/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -config.auto.h -config.auto.c -configRule.auto.c diff --git a/src/common/error.c b/src/common/error.c index 25c4eed67..418d40798 100644 --- a/src/common/error.c +++ b/src/common/error.c @@ -5,7 +5,7 @@ Error Handler #include #include -#include "error.h" +#include "common/error.h" /*********************************************************************************************************************************** Maximum allowed number of nested try blocks diff --git a/src/common/errorType.c b/src/common/errorType.c index eebd86920..15e046fd4 100644 --- a/src/common/errorType.c +++ b/src/common/errorType.c @@ -1,7 +1,7 @@ /*********************************************************************************************************************************** Application-Defined Errors ***********************************************************************************************************************************/ -#include "errorType.h" +#include "common/errorType.h" /*********************************************************************************************************************************** Error code range -- chosen to not overlap with defined return values diff --git a/src/common/type.h b/src/common/type.h index 4f4b12762..7da5d3930 100644 --- a/src/common/type.h +++ b/src/common/type.h @@ -19,10 +19,12 @@ Define standard integer types for portability ***********************************************************************************************************************************/ #include +typedef uint8_t uint8; typedef uint16_t uint16; typedef uint32_t uint32; typedef uint64_t uint64; +typedef int8_t int8; typedef int16_t int16; typedef int32_t int32; typedef int64_t int64; diff --git a/src/config/config.auto.c b/src/config/config.auto.c new file mode 100644 index 000000000..f85892d33 --- /dev/null +++ b/src/config/config.auto.c @@ -0,0 +1,1188 @@ +/*********************************************************************************************************************************** +Command and Option Configuration + +Automatically generated by Build.pm -- do not modify directly. +***********************************************************************************************************************************/ + +/*********************************************************************************************************************************** +Command data +***********************************************************************************************************************************/ +ConfigCommandData configCommandData[] = CONFIG_COMMAND_LIST +( + CONFIG_COMMAND + ( + CONFIG_COMMAND_NAME("archive-get") + ) + + CONFIG_COMMAND + ( + CONFIG_COMMAND_NAME("archive-push") + ) + + CONFIG_COMMAND + ( + CONFIG_COMMAND_NAME("backup") + ) + + CONFIG_COMMAND + ( + CONFIG_COMMAND_NAME("check") + ) + + CONFIG_COMMAND + ( + CONFIG_COMMAND_NAME("expire") + ) + + CONFIG_COMMAND + ( + CONFIG_COMMAND_NAME("help") + ) + + CONFIG_COMMAND + ( + CONFIG_COMMAND_NAME("info") + ) + + CONFIG_COMMAND + ( + CONFIG_COMMAND_NAME("local") + ) + + CONFIG_COMMAND + ( + CONFIG_COMMAND_NAME("remote") + ) + + CONFIG_COMMAND + ( + CONFIG_COMMAND_NAME("restore") + ) + + CONFIG_COMMAND + ( + CONFIG_COMMAND_NAME("stanza-create") + ) + + CONFIG_COMMAND + ( + CONFIG_COMMAND_NAME("stanza-upgrade") + ) + + CONFIG_COMMAND + ( + CONFIG_COMMAND_NAME("start") + ) + + CONFIG_COMMAND + ( + CONFIG_COMMAND_NAME("stop") + ) + + CONFIG_COMMAND + ( + CONFIG_COMMAND_NAME("version") + ) +) + +/*********************************************************************************************************************************** +Option data +***********************************************************************************************************************************/ +ConfigOptionData configOptionData[] = CONFIG_OPTION_LIST +( + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("archive-async") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptArchiveAsync) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("archive-check") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptArchiveCheck) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("archive-copy") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptArchiveCopy) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("archive-max-mb") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptArchiveMaxMb) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("archive-queue-max") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptArchiveQueueMax) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("archive-timeout") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptArchiveTimeout) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("backup-cmd") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptBackupCmd) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("backup-config") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptBackupConfig) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("backup-host") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptBackupHost) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("backup-ssh-port") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptBackupSshPort) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("backup-standby") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptBackupStandby) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("backup-user") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptBackupUser) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("buffer-size") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptBufferSize) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("checksum-page") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptChecksumPage) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("cmd-ssh") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptCmdSsh) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("command") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptCommand) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("compress") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptCompress) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("compress-level") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptCompressLevel) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("compress-level-network") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptCompressLevelNetwork) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("config") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptConfig) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db1-cmd") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbCmd) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db2-cmd") + CONFIG_OPTION_INDEX(1) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbCmd) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db3-cmd") + CONFIG_OPTION_INDEX(2) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbCmd) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db4-cmd") + CONFIG_OPTION_INDEX(3) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbCmd) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db5-cmd") + CONFIG_OPTION_INDEX(4) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbCmd) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db6-cmd") + CONFIG_OPTION_INDEX(5) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbCmd) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db7-cmd") + CONFIG_OPTION_INDEX(6) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbCmd) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db8-cmd") + CONFIG_OPTION_INDEX(7) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbCmd) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db1-config") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbConfig) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db2-config") + CONFIG_OPTION_INDEX(1) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbConfig) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db3-config") + CONFIG_OPTION_INDEX(2) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbConfig) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db4-config") + CONFIG_OPTION_INDEX(3) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbConfig) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db5-config") + CONFIG_OPTION_INDEX(4) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbConfig) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db6-config") + CONFIG_OPTION_INDEX(5) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbConfig) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db7-config") + CONFIG_OPTION_INDEX(6) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbConfig) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db8-config") + CONFIG_OPTION_INDEX(7) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbConfig) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db1-host") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbHost) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db2-host") + CONFIG_OPTION_INDEX(1) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbHost) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db3-host") + CONFIG_OPTION_INDEX(2) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbHost) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db4-host") + CONFIG_OPTION_INDEX(3) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbHost) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db5-host") + CONFIG_OPTION_INDEX(4) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbHost) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db6-host") + CONFIG_OPTION_INDEX(5) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbHost) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db7-host") + CONFIG_OPTION_INDEX(6) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbHost) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db8-host") + CONFIG_OPTION_INDEX(7) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbHost) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db-include") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbInclude) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db1-path") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db2-path") + CONFIG_OPTION_INDEX(1) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db3-path") + CONFIG_OPTION_INDEX(2) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db4-path") + CONFIG_OPTION_INDEX(3) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db5-path") + CONFIG_OPTION_INDEX(4) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db6-path") + CONFIG_OPTION_INDEX(5) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db7-path") + CONFIG_OPTION_INDEX(6) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db8-path") + CONFIG_OPTION_INDEX(7) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db1-port") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbPort) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db2-port") + CONFIG_OPTION_INDEX(1) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbPort) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db3-port") + CONFIG_OPTION_INDEX(2) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbPort) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db4-port") + CONFIG_OPTION_INDEX(3) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbPort) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db5-port") + CONFIG_OPTION_INDEX(4) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbPort) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db6-port") + CONFIG_OPTION_INDEX(5) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbPort) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db7-port") + CONFIG_OPTION_INDEX(6) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbPort) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db8-port") + CONFIG_OPTION_INDEX(7) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbPort) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db1-socket-path") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbSocketPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db2-socket-path") + CONFIG_OPTION_INDEX(1) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbSocketPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db3-socket-path") + CONFIG_OPTION_INDEX(2) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbSocketPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db4-socket-path") + CONFIG_OPTION_INDEX(3) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbSocketPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db5-socket-path") + CONFIG_OPTION_INDEX(4) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbSocketPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db6-socket-path") + CONFIG_OPTION_INDEX(5) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbSocketPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db7-socket-path") + CONFIG_OPTION_INDEX(6) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbSocketPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db8-socket-path") + CONFIG_OPTION_INDEX(7) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbSocketPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db1-ssh-port") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbSshPort) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db2-ssh-port") + CONFIG_OPTION_INDEX(1) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbSshPort) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db3-ssh-port") + CONFIG_OPTION_INDEX(2) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbSshPort) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db4-ssh-port") + CONFIG_OPTION_INDEX(3) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbSshPort) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db5-ssh-port") + CONFIG_OPTION_INDEX(4) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbSshPort) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db6-ssh-port") + CONFIG_OPTION_INDEX(5) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbSshPort) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db7-ssh-port") + CONFIG_OPTION_INDEX(6) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbSshPort) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db8-ssh-port") + CONFIG_OPTION_INDEX(7) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbSshPort) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db-timeout") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbTimeout) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db1-user") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbUser) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db2-user") + CONFIG_OPTION_INDEX(1) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbUser) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db3-user") + CONFIG_OPTION_INDEX(2) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbUser) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db4-user") + CONFIG_OPTION_INDEX(3) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbUser) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db5-user") + CONFIG_OPTION_INDEX(4) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbUser) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db6-user") + CONFIG_OPTION_INDEX(5) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbUser) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db7-user") + CONFIG_OPTION_INDEX(6) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbUser) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("db8-user") + CONFIG_OPTION_INDEX(7) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDbUser) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("delta") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptDelta) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("force") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptForce) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("hardlink") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptHardlink) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("host-id") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptHostId) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("link-all") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptLinkAll) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("link-map") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptLinkMap) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("lock-path") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptLockPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("log-level-console") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptLogLevelConsole) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("log-level-file") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptLogLevelFile) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("log-level-stderr") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptLogLevelStderr) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("log-path") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptLogPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("log-timestamp") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptLogTimestamp) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("manifest-save-threshold") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptManifestSaveThreshold) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("neutral-umask") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptNeutralUmask) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("online") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptOnline) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("output") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptOutput) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("process") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptProcess) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("process-max") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptProcessMax) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("protocol-timeout") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptProtocolTimeout) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("recovery-option") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptRecoveryOption) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("repo-path") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptRepoPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("repo-s3-bucket") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptRepoS3Bucket) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("repo-s3-ca-file") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptRepoS3CaFile) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("repo-s3-ca-path") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptRepoS3CaPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("repo-s3-endpoint") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptRepoS3Endpoint) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("repo-s3-host") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptRepoS3Host) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("repo-s3-key") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptRepoS3Key) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("repo-s3-key-secret") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptRepoS3KeySecret) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("repo-s3-region") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptRepoS3Region) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("repo-s3-verify-ssl") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptRepoS3VerifySsl) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("repo-type") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptRepoType) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("resume") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptResume) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("retention-archive") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptRetentionArchive) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("retention-archive-type") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptRetentionArchiveType) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("retention-diff") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptRetentionDiff) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("retention-full") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptRetentionFull) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("set") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptSet) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("spool-path") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptSpoolPath) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("stanza") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptStanza) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("start-fast") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptStartFast) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("stop-auto") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptStopAuto) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("tablespace-map") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptTablespaceMap) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("tablespace-map-all") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptTablespaceMapAll) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("target") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptTarget) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("target-action") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptTargetAction) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("target-exclusive") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptTargetExclusive) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("target-timeline") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptTargetTimeline) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("test") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptTest) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("test-delay") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptTestDelay) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("test-point") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptTestPoint) + ) + + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME("type") + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptType) + ) +) diff --git a/src/config/config.auto.h b/src/config/config.auto.h new file mode 100644 index 000000000..ea06a7b5f --- /dev/null +++ b/src/config/config.auto.h @@ -0,0 +1,119 @@ +/*********************************************************************************************************************************** +Command and Option Configuration + +Automatically generated by Build.pm -- do not modify directly. +***********************************************************************************************************************************/ +#ifndef CONFIG_CONFIG_AUTO_H +#define CONFIG_CONFIG_AUTO_H + +/*********************************************************************************************************************************** +Command enum +***********************************************************************************************************************************/ +typedef enum +{ + cfgCmdArchiveGet, + cfgCmdArchivePush, + cfgCmdBackup, + cfgCmdCheck, + cfgCmdExpire, + cfgCmdHelp, + cfgCmdInfo, + cfgCmdLocal, + cfgCmdRemote, + cfgCmdRestore, + cfgCmdStanzaCreate, + cfgCmdStanzaUpgrade, + cfgCmdStart, + cfgCmdStop, + cfgCmdVersion, +} ConfigCommand; + +/*********************************************************************************************************************************** +Option enum +***********************************************************************************************************************************/ +typedef enum +{ + cfgOptArchiveAsync, + cfgOptArchiveCheck, + cfgOptArchiveCopy, + cfgOptArchiveMaxMb, + cfgOptArchiveQueueMax, + cfgOptArchiveTimeout, + cfgOptBackupCmd, + cfgOptBackupConfig, + cfgOptBackupHost, + cfgOptBackupSshPort, + cfgOptBackupStandby, + cfgOptBackupUser, + cfgOptBufferSize, + cfgOptChecksumPage, + cfgOptCmdSsh, + cfgOptCommand, + cfgOptCompress, + cfgOptCompressLevel, + cfgOptCompressLevelNetwork, + cfgOptConfig, + cfgOptDbCmd, + cfgOptDbConfig = 28, + cfgOptDbHost = 36, + cfgOptDbInclude = 44, + cfgOptDbPath, + cfgOptDbPort = 53, + cfgOptDbSocketPath = 61, + cfgOptDbSshPort = 69, + cfgOptDbTimeout = 77, + cfgOptDbUser, + cfgOptDelta = 86, + cfgOptForce, + cfgOptHardlink, + cfgOptHostId, + cfgOptLinkAll, + cfgOptLinkMap, + cfgOptLockPath, + cfgOptLogLevelConsole, + cfgOptLogLevelFile, + cfgOptLogLevelStderr, + cfgOptLogPath, + cfgOptLogTimestamp, + cfgOptManifestSaveThreshold, + cfgOptNeutralUmask, + cfgOptOnline, + cfgOptOutput, + cfgOptProcess, + cfgOptProcessMax, + cfgOptProtocolTimeout, + cfgOptRecoveryOption, + cfgOptRepoPath, + cfgOptRepoS3Bucket, + cfgOptRepoS3CaFile, + cfgOptRepoS3CaPath, + cfgOptRepoS3Endpoint, + cfgOptRepoS3Host, + cfgOptRepoS3Key, + cfgOptRepoS3KeySecret, + cfgOptRepoS3Region, + cfgOptRepoS3VerifySsl, + cfgOptRepoType, + cfgOptResume, + cfgOptRetentionArchive, + cfgOptRetentionArchiveType, + cfgOptRetentionDiff, + cfgOptRetentionFull, + cfgOptSet, + cfgOptSpoolPath, + cfgOptStanza, + cfgOptStartFast, + cfgOptStopAuto, + cfgOptTablespaceMap, + cfgOptTablespaceMapAll, + cfgOptTarget, + cfgOptTargetAction, + cfgOptTargetExclusive, + cfgOptTargetTimeline, + cfgOptTest, + cfgOptTestDelay, + cfgOptTestPoint, + cfgOptType, +} ConfigOption; + +#endif diff --git a/src/config/config.auto.md b/src/config/config.auto.md deleted file mode 100644 index aec2c4984..000000000 --- a/src/config/config.auto.md +++ /dev/null @@ -1,76 +0,0 @@ -# Command and Option Configuration - -## cfgOptionIndexTotal - -Total index values allowed. - -### Truth Table: - -This function is valid when `cfgRuleOptionValid()` = `true`. Permutations that return `1` are excluded for brevity. - -| Function | optionId | Result | -| -------- | -------- | ------ | -| 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` | diff --git a/src/config/config.c b/src/config/config.c index 2055463cb..717dd442f 100644 --- a/src/config/config.c +++ b/src/config/config.c @@ -1,6 +1,206 @@ /*********************************************************************************************************************************** Command and Option Configuration ***********************************************************************************************************************************/ +#include + +#include "common/error.h" #include "config/config.h" +/*********************************************************************************************************************************** +Map command names to ids and vice versa. +***********************************************************************************************************************************/ +typedef struct ConfigCommandData +{ + const char *name; +} ConfigCommandData; + +#define CONFIG_COMMAND_LIST(...) \ + {__VA_ARGS__}; + +#define CONFIG_COMMAND(...) \ + {__VA_ARGS__}, + +#define CONFIG_COMMAND_NAME(nameParam) \ + .name = nameParam, + +/*********************************************************************************************************************************** +Map options names and indexes to option definitions. +***********************************************************************************************************************************/ +typedef struct ConfigOptionData +{ + const char *name; + + unsigned int index:5; + ConfigDefineOption defineId:7; +} ConfigOptionData; + +#define CONFIG_OPTION_LIST(...) \ + {__VA_ARGS__}; + +#define CONFIG_OPTION(...) \ + {__VA_ARGS__}, + +#define CONFIG_OPTION_INDEX(indexParam) \ + .index = indexParam, +#define CONFIG_OPTION_NAME(nameParam) \ + .name = nameParam, +#define CONFIG_OPTION_DEFINE_ID(defineIdParam) \ + .defineId = defineIdParam, + +/*********************************************************************************************************************************** +Include the automatically generated configuration data +***********************************************************************************************************************************/ #include "config.auto.c" + +/*********************************************************************************************************************************** +Ensure that command id is valid +***********************************************************************************************************************************/ +void +cfgCommandCheck(ConfigCommand commandId) +{ + if (commandId < 0 || commandId >= cfgCommandTotal()) + ERROR_THROW(AssertError, "command id %d invalid - must be >= 0 and < %d", commandId, cfgCommandTotal()); +} + +/*********************************************************************************************************************************** +Get the define id for this command + +This can be done by just casting the id to the define id. There may be a time when they are not one to one and this function can +be modified to do the mapping. +***********************************************************************************************************************************/ +ConfigDefineCommand +cfgCommandDefIdFromId(ConfigCommand commandId) +{ + cfgCommandCheck(commandId); + return (ConfigDefineCommand)commandId; +} + +/*********************************************************************************************************************************** +Get command id by name +***********************************************************************************************************************************/ +int +cfgCommandId(const char *commandName) +{ + ConfigCommand commandId; + + for (commandId = 0; commandId < cfgCommandTotal(); commandId++) + if (strcmp(commandName, configCommandData[commandId].name) == 0) + break; + + if (commandId == cfgCommandTotal()) + ERROR_THROW(AssertError, "invalid command '%s'", commandName); + + return commandId; +} + +/*********************************************************************************************************************************** +Get command name by id +***********************************************************************************************************************************/ +const char * +cfgCommandName(ConfigCommand commandId) +{ + cfgCommandCheck(commandId); + return configCommandData[commandId].name; +} + +/*********************************************************************************************************************************** +cfgCommandTotal - total number of commands +***********************************************************************************************************************************/ +int +cfgCommandTotal() +{ + return sizeof(configCommandData) / sizeof(ConfigCommandData); +} + +/*********************************************************************************************************************************** +Ensure that option id is valid +***********************************************************************************************************************************/ +void +cfgOptionCheck(ConfigOption optionId) +{ + if (optionId < 0 || optionId >= cfgOptionTotal()) + ERROR_THROW(AssertError, "option id %d invalid - must be >= 0 and < %d", optionId, cfgOptionTotal()); +} + +/*********************************************************************************************************************************** +Get the option define for this option +***********************************************************************************************************************************/ +ConfigDefineOption +cfgOptionDefIdFromId(ConfigOption optionId) +{ + cfgOptionCheck(optionId); + return configOptionData[optionId].defineId; +} + +/*********************************************************************************************************************************** +Get total indexed values for option +***********************************************************************************************************************************/ +int +cfgOptionIndex(ConfigOption optionId) +{ + cfgOptionCheck(optionId); + return configOptionData[optionId].index; +} + +/*********************************************************************************************************************************** +Get option id by name +***********************************************************************************************************************************/ +int +cfgOptionId(const char *optionName) +{ + for (ConfigOption optionId = 0; optionId < cfgOptionTotal(); optionId++) + if (strcmp(optionName, configOptionData[optionId].name) == 0) + return optionId; + + return -1; +} + +/*********************************************************************************************************************************** +Get total indexed values for option +***********************************************************************************************************************************/ +int +cfgOptionIndexTotal(ConfigOption optionId) +{ + cfgOptionCheck(optionId); + return cfgDefOptionIndexTotal(configOptionData[optionId].defineId); +} + +/*********************************************************************************************************************************** +Get the id for this option define +***********************************************************************************************************************************/ +ConfigOption +cfgOptionIdFromDefId(ConfigDefineOption optionDefId, int index) +{ + // Search for the option + ConfigOption optionId; + + for (optionId = 0; optionId < cfgOptionTotal(); optionId++) + if (configOptionData[optionId].defineId == optionDefId) + break; + + // Error when not found + if (optionId == cfgOptionTotal()) + cfgDefOptionCheck(optionDefId); + + // Return with original index + return optionId + index; +} + +/*********************************************************************************************************************************** +Get option name by id +***********************************************************************************************************************************/ +const char * +cfgOptionName(ConfigOption optionId) +{ + cfgOptionCheck(optionId); + return configOptionData[optionId].name; +} + +/*********************************************************************************************************************************** +cfgOptionTotal - total number of configuration options +***********************************************************************************************************************************/ +int +cfgOptionTotal() +{ + return sizeof(configOptionData) / sizeof(ConfigOptionData); +} diff --git a/src/config/config.h b/src/config/config.h index 7bd86915e..cabee3195 100644 --- a/src/config/config.h +++ b/src/config/config.h @@ -5,13 +5,24 @@ Command and Option Configuration #define CONFIG_H #include "common/type.h" +#include "config/define.h" + #include "config/config.auto.h" /*********************************************************************************************************************************** Functions ***********************************************************************************************************************************/ -const char *cfgCommandName(int commandId); -int cfgOptionIndexTotal(int optionId); -const char *cfgOptionName(int commandId); +int cfgCommandId(const char *commandName); +const char *cfgCommandName(ConfigCommand commandId); +ConfigDefineCommand cfgCommandDefIdFromId(ConfigCommand commandId); +int cfgCommandTotal(); + +int cfgOptionId(const char *optionName); +ConfigOption cfgOptionIdFromDefId(ConfigDefineOption optionDefId, int index); +int cfgOptionIndex(ConfigOption optionId); +int cfgOptionIndexTotal(ConfigOption optionDefId); +const char *cfgOptionName(ConfigOption optionId); +ConfigDefineOption cfgOptionDefIdFromId(ConfigOption optionId); +int cfgOptionTotal(); #endif diff --git a/src/config/configRule.auto.md b/src/config/configRule.auto.md deleted file mode 100644 index 440774cc7..000000000 --- a/src/config/configRule.auto.md +++ /dev/null @@ -1,1898 +0,0 @@ -# Command and Option Configuration Rules - -## cfgRuleOptionAllowList - -Is there an allow list for this option? - -### Truth Table: - -This function is valid when `cfgRuleOptionValid()` = `true`. Permutations that return `false` are excluded for brevity. - -| Function | commandId | optionId | Result | -| -------- | --------- | -------- | ------ | -| cfgRuleOptionAllowList | _\_ | `CFGOPT_BUFFER_SIZE` | `true` | -| cfgRuleOptionAllowList | _\_ | `CFGOPT_LOG_LEVEL_CONSOLE` | `true` | -| cfgRuleOptionAllowList | _\_ | `CFGOPT_LOG_LEVEL_FILE` | `true` | -| cfgRuleOptionAllowList | _\_ | `CFGOPT_LOG_LEVEL_STDERR` | `true` | -| cfgRuleOptionAllowList | _\_ | `CFGOPT_OUTPUT` | `true` | -| cfgRuleOptionAllowList | _\_ | `CFGOPT_REPO_TYPE` | `true` | -| cfgRuleOptionAllowList | _\_ | `CFGOPT_RETENTION_ARCHIVE_TYPE` | `true` | -| cfgRuleOptionAllowList | _\_ | `CFGOPT_TARGET_ACTION` | `true` | -| cfgRuleOptionAllowList | _\_ | `CFGOPT_TYPE` | `true` | - -## cfgRuleOptionAllowListValue - -Get value from allowed list. - -### Truth Table: - -This function is valid when `cfgRuleOptionAllowList()` = `true`. - -| Function | commandId | optionId | valueId | Result | -| -------- | --------- | -------- | ------- | ------ | -| cfgRuleOptionAllowListValue | `CFGCMD_BACKUP` | `CFGOPT_TYPE` | `0` | `"full"` | -| cfgRuleOptionAllowListValue | `CFGCMD_BACKUP` | `CFGOPT_TYPE` | `1` | `"diff"` | -| cfgRuleOptionAllowListValue | `CFGCMD_BACKUP` | `CFGOPT_TYPE` | `2` | `"incr"` | -| cfgRuleOptionAllowListValue | `CFGCMD_LOCAL` | `CFGOPT_TYPE` | `0` | `"db"` | -| cfgRuleOptionAllowListValue | `CFGCMD_LOCAL` | `CFGOPT_TYPE` | `1` | `"backup"` | -| cfgRuleOptionAllowListValue | `CFGCMD_REMOTE` | `CFGOPT_TYPE` | `0` | `"db"` | -| cfgRuleOptionAllowListValue | `CFGCMD_REMOTE` | `CFGOPT_TYPE` | `1` | `"backup"` | -| cfgRuleOptionAllowListValue | `CFGCMD_RESTORE` | `CFGOPT_TYPE` | `0` | `"name"` | -| cfgRuleOptionAllowListValue | `CFGCMD_RESTORE` | `CFGOPT_TYPE` | `1` | `"time"` | -| cfgRuleOptionAllowListValue | `CFGCMD_RESTORE` | `CFGOPT_TYPE` | `2` | `"xid"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_BUFFER_SIZE` | `0` | `"16384"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_BUFFER_SIZE` | `1` | `"32768"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_BUFFER_SIZE` | `2` | `"65536"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_BUFFER_SIZE` | `3` | `"131072"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_BUFFER_SIZE` | `4` | `"262144"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_BUFFER_SIZE` | `5` | `"524288"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_BUFFER_SIZE` | `6` | `"1048576"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_BUFFER_SIZE` | `7` | `"2097152"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_BUFFER_SIZE` | `8` | `"4194304"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_BUFFER_SIZE` | `9` | `"8388608"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_BUFFER_SIZE` | `10` | `"16777216"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_CONSOLE` | `0` | `"off"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_CONSOLE` | `1` | `"error"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_CONSOLE` | `2` | `"warn"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_CONSOLE` | `3` | `"info"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_CONSOLE` | `4` | `"detail"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_CONSOLE` | `5` | `"debug"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_CONSOLE` | `6` | `"trace"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_FILE` | `0` | `"off"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_FILE` | `1` | `"error"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_FILE` | `2` | `"warn"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_FILE` | `3` | `"info"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_FILE` | `4` | `"detail"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_FILE` | `5` | `"debug"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_FILE` | `6` | `"trace"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_STDERR` | `0` | `"off"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_STDERR` | `1` | `"error"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_STDERR` | `2` | `"warn"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_STDERR` | `3` | `"info"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_STDERR` | `4` | `"detail"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_STDERR` | `5` | `"debug"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_LOG_LEVEL_STDERR` | `6` | `"trace"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_OUTPUT` | `0` | `"text"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_OUTPUT` | `1` | `"json"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_REPO_TYPE` | `0` | `"cifs"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_REPO_TYPE` | `1` | `"posix"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_REPO_TYPE` | `2` | `"s3"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_RETENTION_ARCHIVE_TYPE` | `0` | `"full"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_RETENTION_ARCHIVE_TYPE` | `1` | `"diff"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_RETENTION_ARCHIVE_TYPE` | `2` | `"incr"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_TARGET_ACTION` | `0` | `"pause"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_TARGET_ACTION` | `1` | `"promote"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_TARGET_ACTION` | `2` | `"shutdown"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_TYPE` | `3` | `"preserve"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_TYPE` | `4` | `"none"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_TYPE` | `5` | `"immediate"` | -| cfgRuleOptionAllowListValue | _\_ | `CFGOPT_TYPE` | `6` | `"default"` | - -## cfgRuleOptionAllowListValueTotal - -Total number of values allowed. - -### Truth Table: - -This function is valid when `cfgRuleOptionAllowList()` = `true`. - -| Function | commandId | optionId | Result | -| -------- | --------- | -------- | ------ | -| cfgRuleOptionAllowListValueTotal | `CFGCMD_BACKUP` | `CFGOPT_TYPE` | `3` | -| cfgRuleOptionAllowListValueTotal | `CFGCMD_LOCAL` | `CFGOPT_TYPE` | `2` | -| cfgRuleOptionAllowListValueTotal | `CFGCMD_REMOTE` | `CFGOPT_TYPE` | `2` | -| cfgRuleOptionAllowListValueTotal | `CFGCMD_RESTORE` | `CFGOPT_TYPE` | `7` | -| cfgRuleOptionAllowListValueTotal | _\_ | `CFGOPT_BUFFER_SIZE` | `11` | -| cfgRuleOptionAllowListValueTotal | _\_ | `CFGOPT_LOG_LEVEL_CONSOLE` | `7` | -| cfgRuleOptionAllowListValueTotal | _\_ | `CFGOPT_LOG_LEVEL_FILE` | `7` | -| cfgRuleOptionAllowListValueTotal | _\_ | `CFGOPT_LOG_LEVEL_STDERR` | `7` | -| cfgRuleOptionAllowListValueTotal | _\_ | `CFGOPT_OUTPUT` | `2` | -| cfgRuleOptionAllowListValueTotal | _\_ | `CFGOPT_REPO_TYPE` | `3` | -| cfgRuleOptionAllowListValueTotal | _\_ | `CFGOPT_RETENTION_ARCHIVE_TYPE` | `3` | -| cfgRuleOptionAllowListValueTotal | _\_ | `CFGOPT_TARGET_ACTION` | `3` | - -## cfgRuleOptionAllowRange - -Is the option constrained to a range? - -### Truth Table: - -This function is valid when `cfgRuleOptionValid()` = `true`. Permutations that return `false` are excluded for brevity. - -| Function | commandId | optionId | Result | -| -------- | --------- | -------- | ------ | -| cfgRuleOptionAllowRange | _\_ | `CFGOPT_ARCHIVE_TIMEOUT` | `true` | -| cfgRuleOptionAllowRange | _\_ | `CFGOPT_COMPRESS_LEVEL` | `true` | -| cfgRuleOptionAllowRange | _\_ | `CFGOPT_COMPRESS_LEVEL_NETWORK` | `true` | -| cfgRuleOptionAllowRange | _\_ | `CFGOPT_DB_TIMEOUT` | `true` | -| cfgRuleOptionAllowRange | _\_ | `CFGOPT_PROCESS_MAX` | `true` | -| cfgRuleOptionAllowRange | _\_ | `CFGOPT_PROTOCOL_TIMEOUT` | `true` | -| cfgRuleOptionAllowRange | _\_ | `CFGOPT_RETENTION_ARCHIVE` | `true` | -| cfgRuleOptionAllowRange | _\_ | `CFGOPT_RETENTION_DIFF` | `true` | -| cfgRuleOptionAllowRange | _\_ | `CFGOPT_RETENTION_FULL` | `true` | - -## cfgRuleOptionAllowRangeMax - -Maximum value allowed (if the option is constrained to a range). - -### Truth Table: - -This function is valid when `cfgRuleOptionAllowRange()` = `true`. - -| Function | commandId | optionId | Result | -| -------- | --------- | -------- | ------ | -| cfgRuleOptionAllowRangeMax | _\_ | `CFGOPT_ARCHIVE_TIMEOUT` | `86400` | -| cfgRuleOptionAllowRangeMax | _\_ | `CFGOPT_COMPRESS_LEVEL` | `9` | -| cfgRuleOptionAllowRangeMax | _\_ | `CFGOPT_COMPRESS_LEVEL_NETWORK` | `9` | -| cfgRuleOptionAllowRangeMax | _\_ | `CFGOPT_DB_TIMEOUT` | `604800` | -| cfgRuleOptionAllowRangeMax | _\_ | `CFGOPT_PROCESS_MAX` | `96` | -| cfgRuleOptionAllowRangeMax | _\_ | `CFGOPT_PROTOCOL_TIMEOUT` | `604800` | -| cfgRuleOptionAllowRangeMax | _\_ | `CFGOPT_RETENTION_ARCHIVE` | `999999999` | -| cfgRuleOptionAllowRangeMax | _\_ | `CFGOPT_RETENTION_DIFF` | `999999999` | -| cfgRuleOptionAllowRangeMax | _\_ | `CFGOPT_RETENTION_FULL` | `999999999` | - -## cfgRuleOptionAllowRangeMin - -Minimum value allowed (if the option is constrained to a range). - -### Truth Table: - -This function is valid when `cfgRuleOptionAllowRange()` = `true`. - -| Function | commandId | optionId | Result | -| -------- | --------- | -------- | ------ | -| cfgRuleOptionAllowRangeMin | _\_ | `CFGOPT_ARCHIVE_TIMEOUT` | `0.1` | -| cfgRuleOptionAllowRangeMin | _\_ | `CFGOPT_COMPRESS_LEVEL` | `0` | -| cfgRuleOptionAllowRangeMin | _\_ | `CFGOPT_COMPRESS_LEVEL_NETWORK` | `0` | -| cfgRuleOptionAllowRangeMin | _\_ | `CFGOPT_DB_TIMEOUT` | `0.1` | -| cfgRuleOptionAllowRangeMin | _\_ | `CFGOPT_PROCESS_MAX` | `1` | -| cfgRuleOptionAllowRangeMin | _\_ | `CFGOPT_PROTOCOL_TIMEOUT` | `0.1` | -| cfgRuleOptionAllowRangeMin | _\_ | `CFGOPT_RETENTION_ARCHIVE` | `1` | -| cfgRuleOptionAllowRangeMin | _\_ | `CFGOPT_RETENTION_DIFF` | `1` | -| cfgRuleOptionAllowRangeMin | _\_ | `CFGOPT_RETENTION_FULL` | `1` | - -## cfgRuleOptionDefault - -Default value. - -### Truth Table: - -This function is valid when `cfgRuleOptionValid()` = `true`. Permutations that return `NULL` are excluded for brevity. - -| Function | commandId | optionId | Result | -| -------- | --------- | -------- | ------ | -| cfgRuleOptionDefault | `CFGCMD_BACKUP` | `CFGOPT_TYPE` | `"incr"` | -| cfgRuleOptionDefault | `CFGCMD_RESTORE` | `CFGOPT_TYPE` | `"default"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_ARCHIVE_ASYNC` | `"0"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_ARCHIVE_CHECK` | `"1"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_ARCHIVE_COPY` | `"0"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_ARCHIVE_TIMEOUT` | `"60"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_BACKUP_CONFIG` | `"/etc/pgbackrest.conf"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_BACKUP_STANDBY` | `"0"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_BACKUP_USER` | `"backrest"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_BUFFER_SIZE` | `"4194304"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_CMD_SSH` | `"ssh"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_COMPRESS` | `"1"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_COMPRESS_LEVEL` | `"6"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_COMPRESS_LEVEL_NETWORK` | `"3"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_CONFIG` | `"/etc/pgbackrest.conf"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB_TIMEOUT` | `"1800"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB1_CONFIG` | `"/etc/pgbackrest.conf"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB1_PORT` | `"5432"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB1_USER` | `"postgres"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB2_CONFIG` | `"/etc/pgbackrest.conf"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB2_PORT` | `"5432"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB2_USER` | `"postgres"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB3_CONFIG` | `"/etc/pgbackrest.conf"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB3_PORT` | `"5432"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB3_USER` | `"postgres"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB4_CONFIG` | `"/etc/pgbackrest.conf"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB4_PORT` | `"5432"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB4_USER` | `"postgres"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB5_CONFIG` | `"/etc/pgbackrest.conf"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB5_PORT` | `"5432"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB5_USER` | `"postgres"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB6_CONFIG` | `"/etc/pgbackrest.conf"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB6_PORT` | `"5432"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB6_USER` | `"postgres"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB7_CONFIG` | `"/etc/pgbackrest.conf"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB7_PORT` | `"5432"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB7_USER` | `"postgres"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB8_CONFIG` | `"/etc/pgbackrest.conf"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB8_PORT` | `"5432"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DB8_USER` | `"postgres"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_DELTA` | `"0"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_FORCE` | `"0"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_HARDLINK` | `"0"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_LINK_ALL` | `"0"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_LOCK_PATH` | `"/tmp/pgbackrest"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_LOG_LEVEL_CONSOLE` | `"warn"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_LOG_LEVEL_FILE` | `"info"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_LOG_LEVEL_STDERR` | `"warn"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_LOG_PATH` | `"/var/log/pgbackrest"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_LOG_TIMESTAMP` | `"1"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_MANIFEST_SAVE_THRESHOLD` | `"1073741824"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_NEUTRAL_UMASK` | `"1"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_ONLINE` | `"1"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_OUTPUT` | `"text"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_PROCESS_MAX` | `"1"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_PROTOCOL_TIMEOUT` | `"1830"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_REPO_PATH` | `"/var/lib/pgbackrest"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_REPO_S3_VERIFY_SSL` | `"1"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_REPO_TYPE` | `"posix"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_RESUME` | `"1"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_RETENTION_ARCHIVE_TYPE` | `"full"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_SET` | `"latest"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_SPOOL_PATH` | `"/var/spool/pgbackrest"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_START_FAST` | `"0"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_STOP_AUTO` | `"0"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_TARGET_ACTION` | `"pause"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_TARGET_EXCLUSIVE` | `"0"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_TEST` | `"0"` | -| cfgRuleOptionDefault | _\_ | `CFGOPT_TEST_DELAY` | `"5"` | - -## cfgRuleOptionDepend - -Does the option have a dependency on another option? - -### Truth Table: - -This function is valid when `cfgRuleOptionValid()` = `true`. Permutations that return `false` are excluded for brevity. - -| Function | commandId | optionId | Result | -| -------- | --------- | -------- | ------ | -| cfgRuleOptionDepend | `CFGCMD_BACKUP` | `CFGOPT_FORCE` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_ARCHIVE_CHECK` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_ARCHIVE_COPY` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_BACKUP_CMD` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_BACKUP_CONFIG` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_BACKUP_SSH_PORT` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_BACKUP_USER` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB1_CMD` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB1_CONFIG` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB1_SSH_PORT` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB1_USER` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB2_CMD` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB2_CONFIG` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB2_SSH_PORT` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB2_USER` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB3_CMD` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB3_CONFIG` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB3_SSH_PORT` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB3_USER` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB4_CMD` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB4_CONFIG` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB4_SSH_PORT` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB4_USER` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB5_CMD` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB5_CONFIG` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB5_SSH_PORT` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB5_USER` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB6_CMD` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB6_CONFIG` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB6_SSH_PORT` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB6_USER` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB7_CMD` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB7_CONFIG` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB7_SSH_PORT` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB7_USER` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB8_CMD` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB8_CONFIG` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB8_SSH_PORT` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_DB8_USER` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_RECOVERY_OPTION` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_REPO_S3_BUCKET` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_REPO_S3_CA_FILE` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_REPO_S3_CA_PATH` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_REPO_S3_ENDPOINT` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_REPO_S3_HOST` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_REPO_S3_KEY` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_REPO_S3_KEY_SECRET` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_REPO_S3_REGION` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_REPO_S3_VERIFY_SSL` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_SPOOL_PATH` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_TARGET` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_TARGET_ACTION` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_TARGET_EXCLUSIVE` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_TARGET_TIMELINE` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_TEST_DELAY` | `true` | -| cfgRuleOptionDepend | _\_ | `CFGOPT_TEST_POINT` | `true` | - -## cfgRuleOptionDependOption - -Name of the option that this option depends in order to be set. - -### Truth Table: - -This function is valid when `cfgRuleOptionDepend()` = `true`. - -| Function | commandId | optionId | Result | -| -------- | --------- | -------- | ------ | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_ARCHIVE_CHECK` | `CFGOPT_ONLINE` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_ARCHIVE_COPY` | `CFGOPT_ARCHIVE_CHECK` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_BACKUP_CMD` | `CFGOPT_BACKUP_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_BACKUP_CONFIG` | `CFGOPT_BACKUP_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_BACKUP_SSH_PORT` | `CFGOPT_BACKUP_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_BACKUP_USER` | `CFGOPT_BACKUP_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB1_CMD` | `CFGOPT_DB1_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB1_CONFIG` | `CFGOPT_DB1_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB1_SSH_PORT` | `CFGOPT_DB1_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB1_USER` | `CFGOPT_DB1_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB2_CMD` | `CFGOPT_DB2_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB2_CONFIG` | `CFGOPT_DB2_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB2_SSH_PORT` | `CFGOPT_DB2_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB2_USER` | `CFGOPT_DB2_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB3_CMD` | `CFGOPT_DB3_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB3_CONFIG` | `CFGOPT_DB3_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB3_SSH_PORT` | `CFGOPT_DB3_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB3_USER` | `CFGOPT_DB3_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB4_CMD` | `CFGOPT_DB4_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB4_CONFIG` | `CFGOPT_DB4_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB4_SSH_PORT` | `CFGOPT_DB4_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB4_USER` | `CFGOPT_DB4_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB5_CMD` | `CFGOPT_DB5_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB5_CONFIG` | `CFGOPT_DB5_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB5_SSH_PORT` | `CFGOPT_DB5_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB5_USER` | `CFGOPT_DB5_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB6_CMD` | `CFGOPT_DB6_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB6_CONFIG` | `CFGOPT_DB6_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB6_SSH_PORT` | `CFGOPT_DB6_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB6_USER` | `CFGOPT_DB6_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB7_CMD` | `CFGOPT_DB7_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB7_CONFIG` | `CFGOPT_DB7_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB7_SSH_PORT` | `CFGOPT_DB7_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB7_USER` | `CFGOPT_DB7_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB8_CMD` | `CFGOPT_DB8_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB8_CONFIG` | `CFGOPT_DB8_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB8_SSH_PORT` | `CFGOPT_DB8_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_DB8_USER` | `CFGOPT_DB8_HOST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_FORCE` | `CFGOPT_ONLINE` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_RECOVERY_OPTION` | `CFGOPT_TYPE` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_REPO_S3_BUCKET` | `CFGOPT_REPO_TYPE` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_REPO_S3_CA_FILE` | `CFGOPT_REPO_TYPE` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_REPO_S3_CA_PATH` | `CFGOPT_REPO_TYPE` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_REPO_S3_ENDPOINT` | `CFGOPT_REPO_TYPE` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_REPO_S3_HOST` | `CFGOPT_REPO_TYPE` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_REPO_S3_KEY` | `CFGOPT_REPO_TYPE` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_REPO_S3_KEY_SECRET` | `CFGOPT_REPO_TYPE` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_REPO_S3_REGION` | `CFGOPT_REPO_TYPE` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_REPO_S3_VERIFY_SSL` | `CFGOPT_REPO_TYPE` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_SPOOL_PATH` | `CFGOPT_ARCHIVE_ASYNC` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_TARGET` | `CFGOPT_TYPE` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_TARGET_ACTION` | `CFGOPT_TYPE` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_TARGET_EXCLUSIVE` | `CFGOPT_TYPE` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_TARGET_TIMELINE` | `CFGOPT_TYPE` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_TEST_DELAY` | `CFGOPT_TEST` | -| cfgRuleOptionDependOption | _\_ | `CFGOPT_TEST_POINT` | `CFGOPT_TEST` | - -## cfgRuleOptionDependValue - -The depend option must have one of these values before this option is set. - -### Truth Table: - -This function is valid when `cfgRuleOptionDepend()` = `true`. - -| Function | commandId | optionId | valueId | Result | -| -------- | --------- | -------- | ------- | ------ | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_ARCHIVE_CHECK` | `0` | `"1"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_ARCHIVE_COPY` | `0` | `"1"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_FORCE` | `0` | `"0"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_RECOVERY_OPTION` | `0` | `"default"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_RECOVERY_OPTION` | `1` | `"name"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_RECOVERY_OPTION` | `2` | `"time"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_RECOVERY_OPTION` | `3` | `"xid"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_REPO_S3_BUCKET` | `0` | `"s3"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_REPO_S3_CA_FILE` | `0` | `"s3"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_REPO_S3_CA_PATH` | `0` | `"s3"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_REPO_S3_ENDPOINT` | `0` | `"s3"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_REPO_S3_HOST` | `0` | `"s3"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_REPO_S3_KEY` | `0` | `"s3"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_REPO_S3_KEY_SECRET` | `0` | `"s3"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_REPO_S3_REGION` | `0` | `"s3"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_REPO_S3_VERIFY_SSL` | `0` | `"s3"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_SPOOL_PATH` | `0` | `"1"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_TARGET` | `0` | `"name"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_TARGET` | `1` | `"time"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_TARGET` | `2` | `"xid"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_TARGET_ACTION` | `0` | `"name"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_TARGET_ACTION` | `1` | `"time"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_TARGET_ACTION` | `2` | `"xid"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_TARGET_EXCLUSIVE` | `0` | `"time"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_TARGET_EXCLUSIVE` | `1` | `"xid"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_TARGET_TIMELINE` | `0` | `"default"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_TARGET_TIMELINE` | `1` | `"name"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_TARGET_TIMELINE` | `2` | `"time"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_TARGET_TIMELINE` | `3` | `"xid"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_TEST_DELAY` | `0` | `"1"` | -| cfgRuleOptionDependValue | _\_ | `CFGOPT_TEST_POINT` | `0` | `"1"` | - -## cfgRuleOptionDependValueTotal - -Total depend values for this option. - -### Truth Table: - -This function is valid when `cfgRuleOptionDepend()` = `true`. - -| Function | commandId | optionId | Result | -| -------- | --------- | -------- | ------ | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_ARCHIVE_CHECK` | `1` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_ARCHIVE_COPY` | `1` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_BACKUP_CMD` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_BACKUP_CONFIG` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_BACKUP_SSH_PORT` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_BACKUP_USER` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB1_CMD` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB1_CONFIG` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB1_SSH_PORT` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB1_USER` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB2_CMD` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB2_CONFIG` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB2_SSH_PORT` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB2_USER` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB3_CMD` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB3_CONFIG` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB3_SSH_PORT` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB3_USER` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB4_CMD` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB4_CONFIG` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB4_SSH_PORT` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB4_USER` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB5_CMD` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB5_CONFIG` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB5_SSH_PORT` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB5_USER` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB6_CMD` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB6_CONFIG` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB6_SSH_PORT` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB6_USER` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB7_CMD` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB7_CONFIG` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB7_SSH_PORT` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB7_USER` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB8_CMD` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB8_CONFIG` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB8_SSH_PORT` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_DB8_USER` | `0` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_FORCE` | `1` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_RECOVERY_OPTION` | `4` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_REPO_S3_BUCKET` | `1` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_REPO_S3_CA_FILE` | `1` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_REPO_S3_CA_PATH` | `1` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_REPO_S3_ENDPOINT` | `1` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_REPO_S3_HOST` | `1` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_REPO_S3_KEY` | `1` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_REPO_S3_KEY_SECRET` | `1` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_REPO_S3_REGION` | `1` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_REPO_S3_VERIFY_SSL` | `1` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_SPOOL_PATH` | `1` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_TARGET` | `3` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_TARGET_ACTION` | `3` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_TARGET_EXCLUSIVE` | `2` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_TARGET_TIMELINE` | `4` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_TEST_DELAY` | `1` | -| cfgRuleOptionDependValueTotal | _\_ | `CFGOPT_TEST_POINT` | `1` | - -## cfgRuleOptionNameAlt - -Alternate name for the option primarily used for deprecated names. - -### Truth Table: - -This function is valid when `cfgRuleOptionValid()` = `true`. Permutations that return `NULL` are excluded for brevity. - -| Function | optionId | Result | -| -------- | -------- | ------ | -| cfgRuleOptionNameAlt | `CFGOPT_DB1_CMD` | `"db-cmd"` | -| cfgRuleOptionNameAlt | `CFGOPT_DB1_CONFIG` | `"db-config"` | -| cfgRuleOptionNameAlt | `CFGOPT_DB1_HOST` | `"db-host"` | -| cfgRuleOptionNameAlt | `CFGOPT_DB1_PATH` | `"db-path"` | -| cfgRuleOptionNameAlt | `CFGOPT_DB1_PORT` | `"db-port"` | -| cfgRuleOptionNameAlt | `CFGOPT_DB1_SOCKET_PATH` | `"db-socket-path"` | -| cfgRuleOptionNameAlt | `CFGOPT_DB1_SSH_PORT` | `"db-ssh-port"` | -| cfgRuleOptionNameAlt | `CFGOPT_DB1_USER` | `"db-user"` | -| cfgRuleOptionNameAlt | `CFGOPT_PROCESS_MAX` | `"thread-max"` | - -## cfgRuleOptionNegate - -Can the boolean option be negated? - -### Truth Table: - -Permutations that return `false` are excluded for brevity. - -| Function | optionId | Result | -| -------- | -------- | ------ | -| cfgRuleOptionNegate | `CFGOPT_ARCHIVE_ASYNC` | `true` | -| cfgRuleOptionNegate | `CFGOPT_ARCHIVE_CHECK` | `true` | -| cfgRuleOptionNegate | `CFGOPT_ARCHIVE_COPY` | `true` | -| cfgRuleOptionNegate | `CFGOPT_BACKUP_STANDBY` | `true` | -| cfgRuleOptionNegate | `CFGOPT_CHECKSUM_PAGE` | `true` | -| cfgRuleOptionNegate | `CFGOPT_COMPRESS` | `true` | -| cfgRuleOptionNegate | `CFGOPT_CONFIG` | `true` | -| cfgRuleOptionNegate | `CFGOPT_HARDLINK` | `true` | -| cfgRuleOptionNegate | `CFGOPT_LINK_ALL` | `true` | -| cfgRuleOptionNegate | `CFGOPT_LOG_TIMESTAMP` | `true` | -| cfgRuleOptionNegate | `CFGOPT_NEUTRAL_UMASK` | `true` | -| cfgRuleOptionNegate | `CFGOPT_ONLINE` | `true` | -| cfgRuleOptionNegate | `CFGOPT_REPO_S3_VERIFY_SSL` | `true` | -| cfgRuleOptionNegate | `CFGOPT_RESUME` | `true` | -| cfgRuleOptionNegate | `CFGOPT_START_FAST` | `true` | -| cfgRuleOptionNegate | `CFGOPT_STOP_AUTO` | `true` | - -## cfgRuleOptionPrefix - -Prefix when the option has an index > 1 (e.g. "db"). - -### Truth Table: - -Permutations that return `NULL` are excluded for brevity. - -| Function | optionId | Result | -| -------- | -------- | ------ | -| cfgRuleOptionPrefix | `CFGOPT_DB1_CMD` | `"db"` | -| cfgRuleOptionPrefix | `CFGOPT_DB1_CONFIG` | `"db"` | -| cfgRuleOptionPrefix | `CFGOPT_DB1_HOST` | `"db"` | -| cfgRuleOptionPrefix | `CFGOPT_DB1_PATH` | `"db"` | -| cfgRuleOptionPrefix | `CFGOPT_DB1_PORT` | `"db"` | -| cfgRuleOptionPrefix | `CFGOPT_DB1_SOCKET_PATH` | `"db"` | -| cfgRuleOptionPrefix | `CFGOPT_DB1_SSH_PORT` | `"db"` | -| cfgRuleOptionPrefix | `CFGOPT_DB1_USER` | `"db"` | -| cfgRuleOptionPrefix | `CFGOPT_DB2_CMD` | `"db"` | -| cfgRuleOptionPrefix | `CFGOPT_DB2_CONFIG` | `"db"` | -| cfgRuleOptionPrefix | `CFGOPT_DB2_HOST` | `"db"` | -| cfgRuleOptionPrefix | `CFGOPT_DB2_PATH` | `"db"` | -| cfgRuleOptionPrefix | `CFGOPT_DB2_PORT` | `"db"` | -| 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 - -Is the option required? - -### Truth Table: - -This function is valid when `cfgRuleOptionValid()` = `true`. Permutations that return `false` are excluded for brevity. - -| Function | commandId | optionId | Result | -| -------- | --------- | -------- | ------ | -| cfgRuleOptionRequired | `CFGCMD_ARCHIVE_GET` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionRequired | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionRequired | `CFGCMD_BACKUP` | `CFGOPT_DB1_PATH` | `true` | -| cfgRuleOptionRequired | `CFGCMD_BACKUP` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionRequired | `CFGCMD_CHECK` | `CFGOPT_DB1_PATH` | `true` | -| cfgRuleOptionRequired | `CFGCMD_CHECK` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionRequired | `CFGCMD_EXPIRE` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionRequired | `CFGCMD_LOCAL` | `CFGOPT_PROCESS` | `true` | -| cfgRuleOptionRequired | `CFGCMD_LOCAL` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionRequired | `CFGCMD_RESTORE` | `CFGOPT_DB1_PATH` | `true` | -| cfgRuleOptionRequired | `CFGCMD_RESTORE` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionRequired | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB1_PATH` | `true` | -| cfgRuleOptionRequired | `CFGCMD_STANZA_CREATE` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionRequired | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB1_PATH` | `true` | -| cfgRuleOptionRequired | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_ARCHIVE_ASYNC` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_ARCHIVE_CHECK` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_ARCHIVE_COPY` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_ARCHIVE_TIMEOUT` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_BACKUP_CONFIG` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_BACKUP_STANDBY` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_BUFFER_SIZE` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_CMD_SSH` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_COMMAND` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_COMPRESS` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_COMPRESS_LEVEL` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_COMPRESS_LEVEL_NETWORK` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_CONFIG` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_DB_TIMEOUT` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_DB1_CONFIG` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_DB1_PORT` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_DELTA` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_FORCE` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_HARDLINK` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_HOST_ID` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_LINK_ALL` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_LOCK_PATH` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_LOG_LEVEL_CONSOLE` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_LOG_LEVEL_FILE` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_LOG_LEVEL_STDERR` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_LOG_PATH` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_LOG_TIMESTAMP` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_MANIFEST_SAVE_THRESHOLD` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_NEUTRAL_UMASK` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_ONLINE` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_OUTPUT` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_PROCESS_MAX` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_PROTOCOL_TIMEOUT` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_REPO_PATH` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_REPO_S3_BUCKET` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_REPO_S3_ENDPOINT` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_REPO_S3_REGION` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_REPO_S3_VERIFY_SSL` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_REPO_TYPE` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_RESUME` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_RETENTION_ARCHIVE_TYPE` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_SET` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_SPOOL_PATH` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_START_FAST` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_STOP_AUTO` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_TARGET` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_TARGET_ACTION` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_TARGET_EXCLUSIVE` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_TEST` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_TEST_DELAY` | `true` | -| cfgRuleOptionRequired | _\_ | `CFGOPT_TYPE` | `true` | - -## cfgRuleOptionSection - -Section that the option belongs in, NULL means command-line only. - -### Truth Table: - -Permutations that return `NULL` are excluded for brevity. - -| Function | optionId | Result | -| -------- | -------- | ------ | -| cfgRuleOptionSection | `CFGOPT_ARCHIVE_ASYNC` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_ARCHIVE_CHECK` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_ARCHIVE_COPY` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_ARCHIVE_MAX_MB` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_ARCHIVE_QUEUE_MAX` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_ARCHIVE_TIMEOUT` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_BACKUP_CMD` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_BACKUP_CONFIG` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_BACKUP_HOST` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_BACKUP_SSH_PORT` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_BACKUP_STANDBY` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_BACKUP_USER` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_BUFFER_SIZE` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_CHECKSUM_PAGE` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_CMD_SSH` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_COMPRESS` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_COMPRESS_LEVEL` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_COMPRESS_LEVEL_NETWORK` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_DB_INCLUDE` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_DB_TIMEOUT` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_DB1_CMD` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_DB1_CONFIG` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_DB1_HOST` | `"stanza"` | -| cfgRuleOptionSection | `CFGOPT_DB1_PATH` | `"stanza"` | -| cfgRuleOptionSection | `CFGOPT_DB1_PORT` | `"stanza"` | -| cfgRuleOptionSection | `CFGOPT_DB1_SOCKET_PATH` | `"stanza"` | -| cfgRuleOptionSection | `CFGOPT_DB1_SSH_PORT` | `"stanza"` | -| cfgRuleOptionSection | `CFGOPT_DB1_USER` | `"stanza"` | -| cfgRuleOptionSection | `CFGOPT_DB2_CMD` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_DB2_CONFIG` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_DB2_HOST` | `"stanza"` | -| cfgRuleOptionSection | `CFGOPT_DB2_PATH` | `"stanza"` | -| cfgRuleOptionSection | `CFGOPT_DB2_PORT` | `"stanza"` | -| 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"` | -| cfgRuleOptionSection | `CFGOPT_LOCK_PATH` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_LOG_LEVEL_CONSOLE` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_LOG_LEVEL_FILE` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_LOG_LEVEL_STDERR` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_LOG_PATH` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_LOG_TIMESTAMP` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_MANIFEST_SAVE_THRESHOLD` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_NEUTRAL_UMASK` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_PROCESS_MAX` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_PROTOCOL_TIMEOUT` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_RECOVERY_OPTION` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_REPO_PATH` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_REPO_S3_BUCKET` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_REPO_S3_CA_FILE` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_REPO_S3_CA_PATH` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_REPO_S3_ENDPOINT` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_REPO_S3_HOST` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_REPO_S3_KEY` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_REPO_S3_KEY_SECRET` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_REPO_S3_REGION` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_REPO_S3_VERIFY_SSL` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_REPO_TYPE` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_RESUME` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_RETENTION_ARCHIVE` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_RETENTION_ARCHIVE_TYPE` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_RETENTION_DIFF` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_RETENTION_FULL` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_SPOOL_PATH` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_START_FAST` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_STOP_AUTO` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_TABLESPACE_MAP` | `"global"` | -| cfgRuleOptionSection | `CFGOPT_TABLESPACE_MAP_ALL` | `"global"` | - -## cfgRuleOptionSecure - -Secure options can never be passed on the commmand-line. - -### Truth Table: - -Permutations that return `false` are excluded for brevity. - -| Function | optionId | Result | -| -------- | -------- | ------ | -| cfgRuleOptionSecure | `CFGOPT_REPO_S3_KEY` | `true` | -| cfgRuleOptionSecure | `CFGOPT_REPO_S3_KEY_SECRET` | `true` | - -## cfgRuleOptionType - -Secure options can never be passed on the commmand-line. - -### Truth Table: - -| Function | optionId | Result | -| -------- | -------- | ------ | -| cfgRuleOptionType | `CFGOPT_ARCHIVE_ASYNC` | `CFGOPTDEF_TYPE_BOOLEAN` | -| cfgRuleOptionType | `CFGOPT_ARCHIVE_CHECK` | `CFGOPTDEF_TYPE_BOOLEAN` | -| cfgRuleOptionType | `CFGOPT_ARCHIVE_COPY` | `CFGOPTDEF_TYPE_BOOLEAN` | -| cfgRuleOptionType | `CFGOPT_ARCHIVE_MAX_MB` | `CFGOPTDEF_TYPE_INTEGER` | -| cfgRuleOptionType | `CFGOPT_ARCHIVE_QUEUE_MAX` | `CFGOPTDEF_TYPE_INTEGER` | -| cfgRuleOptionType | `CFGOPT_ARCHIVE_TIMEOUT` | `CFGOPTDEF_TYPE_FLOAT` | -| cfgRuleOptionType | `CFGOPT_BACKUP_CMD` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_BACKUP_CONFIG` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_BACKUP_HOST` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_BACKUP_SSH_PORT` | `CFGOPTDEF_TYPE_INTEGER` | -| cfgRuleOptionType | `CFGOPT_BACKUP_STANDBY` | `CFGOPTDEF_TYPE_BOOLEAN` | -| cfgRuleOptionType | `CFGOPT_BACKUP_USER` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_BUFFER_SIZE` | `CFGOPTDEF_TYPE_INTEGER` | -| cfgRuleOptionType | `CFGOPT_CHECKSUM_PAGE` | `CFGOPTDEF_TYPE_BOOLEAN` | -| cfgRuleOptionType | `CFGOPT_CMD_SSH` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_COMMAND` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_COMPRESS` | `CFGOPTDEF_TYPE_BOOLEAN` | -| cfgRuleOptionType | `CFGOPT_COMPRESS_LEVEL` | `CFGOPTDEF_TYPE_INTEGER` | -| cfgRuleOptionType | `CFGOPT_COMPRESS_LEVEL_NETWORK` | `CFGOPTDEF_TYPE_INTEGER` | -| cfgRuleOptionType | `CFGOPT_CONFIG` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_DB_INCLUDE` | `CFGOPTDEF_TYPE_LIST` | -| cfgRuleOptionType | `CFGOPT_DB_TIMEOUT` | `CFGOPTDEF_TYPE_FLOAT` | -| cfgRuleOptionType | `CFGOPT_DB1_CMD` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_DB1_CONFIG` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_DB1_HOST` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_DB1_PATH` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_DB1_PORT` | `CFGOPTDEF_TYPE_INTEGER` | -| cfgRuleOptionType | `CFGOPT_DB1_SOCKET_PATH` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_DB1_SSH_PORT` | `CFGOPTDEF_TYPE_INTEGER` | -| cfgRuleOptionType | `CFGOPT_DB1_USER` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_DB2_CMD` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_DB2_CONFIG` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_DB2_HOST` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_DB2_PATH` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_DB2_PORT` | `CFGOPTDEF_TYPE_INTEGER` | -| 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` | -| cfgRuleOptionType | `CFGOPT_HOST_ID` | `CFGOPTDEF_TYPE_INTEGER` | -| cfgRuleOptionType | `CFGOPT_LINK_ALL` | `CFGOPTDEF_TYPE_BOOLEAN` | -| cfgRuleOptionType | `CFGOPT_LINK_MAP` | `CFGOPTDEF_TYPE_HASH` | -| cfgRuleOptionType | `CFGOPT_LOCK_PATH` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_LOG_LEVEL_CONSOLE` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_LOG_LEVEL_FILE` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_LOG_LEVEL_STDERR` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_LOG_PATH` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_LOG_TIMESTAMP` | `CFGOPTDEF_TYPE_BOOLEAN` | -| cfgRuleOptionType | `CFGOPT_MANIFEST_SAVE_THRESHOLD` | `CFGOPTDEF_TYPE_INTEGER` | -| cfgRuleOptionType | `CFGOPT_NEUTRAL_UMASK` | `CFGOPTDEF_TYPE_BOOLEAN` | -| cfgRuleOptionType | `CFGOPT_ONLINE` | `CFGOPTDEF_TYPE_BOOLEAN` | -| cfgRuleOptionType | `CFGOPT_OUTPUT` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_PROCESS` | `CFGOPTDEF_TYPE_INTEGER` | -| cfgRuleOptionType | `CFGOPT_PROCESS_MAX` | `CFGOPTDEF_TYPE_INTEGER` | -| cfgRuleOptionType | `CFGOPT_PROTOCOL_TIMEOUT` | `CFGOPTDEF_TYPE_FLOAT` | -| cfgRuleOptionType | `CFGOPT_RECOVERY_OPTION` | `CFGOPTDEF_TYPE_HASH` | -| cfgRuleOptionType | `CFGOPT_REPO_PATH` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_REPO_S3_BUCKET` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_REPO_S3_CA_FILE` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_REPO_S3_CA_PATH` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_REPO_S3_ENDPOINT` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_REPO_S3_HOST` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_REPO_S3_KEY` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_REPO_S3_KEY_SECRET` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_REPO_S3_REGION` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_REPO_S3_VERIFY_SSL` | `CFGOPTDEF_TYPE_BOOLEAN` | -| cfgRuleOptionType | `CFGOPT_REPO_TYPE` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_RESUME` | `CFGOPTDEF_TYPE_BOOLEAN` | -| cfgRuleOptionType | `CFGOPT_RETENTION_ARCHIVE` | `CFGOPTDEF_TYPE_INTEGER` | -| cfgRuleOptionType | `CFGOPT_RETENTION_ARCHIVE_TYPE` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_RETENTION_DIFF` | `CFGOPTDEF_TYPE_INTEGER` | -| cfgRuleOptionType | `CFGOPT_RETENTION_FULL` | `CFGOPTDEF_TYPE_INTEGER` | -| cfgRuleOptionType | `CFGOPT_SET` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_SPOOL_PATH` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_STANZA` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_START_FAST` | `CFGOPTDEF_TYPE_BOOLEAN` | -| cfgRuleOptionType | `CFGOPT_STOP_AUTO` | `CFGOPTDEF_TYPE_BOOLEAN` | -| cfgRuleOptionType | `CFGOPT_TABLESPACE_MAP` | `CFGOPTDEF_TYPE_HASH` | -| cfgRuleOptionType | `CFGOPT_TABLESPACE_MAP_ALL` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_TARGET` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_TARGET_ACTION` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_TARGET_EXCLUSIVE` | `CFGOPTDEF_TYPE_BOOLEAN` | -| cfgRuleOptionType | `CFGOPT_TARGET_TIMELINE` | `CFGOPTDEF_TYPE_STRING` | -| cfgRuleOptionType | `CFGOPT_TEST` | `CFGOPTDEF_TYPE_BOOLEAN` | -| cfgRuleOptionType | `CFGOPT_TEST_DELAY` | `CFGOPTDEF_TYPE_FLOAT` | -| cfgRuleOptionType | `CFGOPT_TEST_POINT` | `CFGOPTDEF_TYPE_HASH` | -| cfgRuleOptionType | `CFGOPT_TYPE` | `CFGOPTDEF_TYPE_STRING` | - -## cfgRuleOptionValid - -Is the option valid for this command? - -### Truth Table: - -Permutations that return `false` are excluded for brevity. - -| Function | commandId | optionId | Result | -| -------- | --------- | -------- | ------ | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_BACKUP_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_BACKUP_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_BACKUP_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_BACKUP_SSH_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_BACKUP_USER` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_BUFFER_SIZE` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_CMD_SSH` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_COMPRESS` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_COMPRESS_LEVEL` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_COMPRESS_LEVEL_NETWORK` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_CONFIG` | `true` | -| 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` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_LOG_LEVEL_STDERR` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_LOG_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_LOG_TIMESTAMP` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_NEUTRAL_UMASK` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_PROTOCOL_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_REPO_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_REPO_S3_BUCKET` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_REPO_S3_CA_FILE` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_REPO_S3_CA_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_REPO_S3_ENDPOINT` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_REPO_S3_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_REPO_S3_KEY` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_REPO_S3_KEY_SECRET` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_REPO_S3_REGION` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_REPO_S3_VERIFY_SSL` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_REPO_TYPE` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_GET` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_ARCHIVE_ASYNC` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_ARCHIVE_MAX_MB` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_ARCHIVE_QUEUE_MAX` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_ARCHIVE_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_BACKUP_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_BACKUP_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_BACKUP_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_BACKUP_SSH_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_BACKUP_USER` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_BUFFER_SIZE` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_CMD_SSH` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_COMPRESS` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_COMPRESS_LEVEL` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_COMPRESS_LEVEL_NETWORK` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB1_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB1_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_DB1_SSH_PORT` | `true` | -| 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` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_LOG_LEVEL_STDERR` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_LOG_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_LOG_TIMESTAMP` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_NEUTRAL_UMASK` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_PROCESS_MAX` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_PROTOCOL_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_REPO_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_REPO_S3_BUCKET` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_REPO_S3_CA_FILE` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_REPO_S3_CA_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_REPO_S3_ENDPOINT` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_REPO_S3_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_REPO_S3_KEY` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_REPO_S3_KEY_SECRET` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_REPO_S3_REGION` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_REPO_S3_VERIFY_SSL` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_REPO_TYPE` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_SPOOL_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_TEST` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_TEST_DELAY` | `true` | -| cfgRuleOptionValid | `CFGCMD_ARCHIVE_PUSH` | `CFGOPT_TEST_POINT` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_ARCHIVE_CHECK` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_ARCHIVE_COPY` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_ARCHIVE_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_BACKUP_STANDBY` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_BUFFER_SIZE` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_CHECKSUM_PAGE` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_CMD_SSH` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_COMPRESS` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_COMPRESS_LEVEL` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_COMPRESS_LEVEL_NETWORK` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB1_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB1_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB1_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB1_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB1_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB1_SOCKET_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB1_SSH_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB1_USER` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB2_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB2_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB2_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB2_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_DB2_PORT` | `true` | -| 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` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_LOG_LEVEL_CONSOLE` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_LOG_LEVEL_FILE` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_LOG_LEVEL_STDERR` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_LOG_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_LOG_TIMESTAMP` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_MANIFEST_SAVE_THRESHOLD` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_NEUTRAL_UMASK` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_ONLINE` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_PROCESS_MAX` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_PROTOCOL_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_REPO_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_REPO_S3_BUCKET` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_REPO_S3_CA_FILE` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_REPO_S3_CA_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_REPO_S3_ENDPOINT` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_REPO_S3_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_REPO_S3_KEY` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_REPO_S3_KEY_SECRET` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_REPO_S3_REGION` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_REPO_S3_VERIFY_SSL` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_REPO_TYPE` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_RESUME` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_RETENTION_ARCHIVE` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_RETENTION_ARCHIVE_TYPE` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_RETENTION_DIFF` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_RETENTION_FULL` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_START_FAST` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_STOP_AUTO` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_TEST` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_TEST_DELAY` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_TEST_POINT` | `true` | -| cfgRuleOptionValid | `CFGCMD_BACKUP` | `CFGOPT_TYPE` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_ARCHIVE_CHECK` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_ARCHIVE_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_BACKUP_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_BACKUP_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_BACKUP_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_BACKUP_SSH_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_BACKUP_STANDBY` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_BACKUP_USER` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_BUFFER_SIZE` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_CMD_SSH` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_COMPRESS_LEVEL` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_COMPRESS_LEVEL_NETWORK` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB1_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB1_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB1_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB1_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB1_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB1_SOCKET_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB1_SSH_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB1_USER` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB2_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB2_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB2_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB2_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_DB2_PORT` | `true` | -| 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` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_LOG_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_LOG_TIMESTAMP` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_NEUTRAL_UMASK` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_ONLINE` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_PROTOCOL_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_REPO_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_REPO_S3_BUCKET` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_REPO_S3_CA_FILE` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_REPO_S3_CA_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_REPO_S3_ENDPOINT` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_REPO_S3_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_REPO_S3_KEY` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_REPO_S3_KEY_SECRET` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_REPO_S3_REGION` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_REPO_S3_VERIFY_SSL` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_REPO_TYPE` | `true` | -| cfgRuleOptionValid | `CFGCMD_CHECK` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_BUFFER_SIZE` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_CMD_SSH` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB1_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB1_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB1_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB1_SSH_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_DB2_CMD` | `true` | -| 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` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_LOG_LEVEL_STDERR` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_LOG_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_LOG_TIMESTAMP` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_NEUTRAL_UMASK` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_REPO_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_REPO_S3_BUCKET` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_REPO_S3_CA_FILE` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_REPO_S3_CA_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_REPO_S3_ENDPOINT` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_REPO_S3_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_REPO_S3_KEY` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_REPO_S3_KEY_SECRET` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_REPO_S3_REGION` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_REPO_S3_VERIFY_SSL` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_REPO_TYPE` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_RETENTION_ARCHIVE` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_RETENTION_ARCHIVE_TYPE` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_RETENTION_DIFF` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_RETENTION_FULL` | `true` | -| cfgRuleOptionValid | `CFGCMD_EXPIRE` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_BACKUP_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_BACKUP_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_BACKUP_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_BACKUP_SSH_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_BACKUP_USER` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_BUFFER_SIZE` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_CMD_SSH` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_COMPRESS_LEVEL` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_COMPRESS_LEVEL_NETWORK` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_LOCK_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_LOG_LEVEL_CONSOLE` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_LOG_LEVEL_FILE` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_LOG_LEVEL_STDERR` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_LOG_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_LOG_TIMESTAMP` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_OUTPUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_PROTOCOL_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_REPO_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_REPO_S3_BUCKET` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_REPO_S3_CA_FILE` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_REPO_S3_CA_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_REPO_S3_ENDPOINT` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_REPO_S3_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_REPO_S3_KEY` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_REPO_S3_KEY_SECRET` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_REPO_S3_REGION` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_REPO_S3_VERIFY_SSL` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_REPO_TYPE` | `true` | -| cfgRuleOptionValid | `CFGCMD_INFO` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_BACKUP_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_BACKUP_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_BACKUP_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_BACKUP_SSH_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_BACKUP_USER` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_BUFFER_SIZE` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_CMD_SSH` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_COMMAND` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_COMPRESS_LEVEL` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_COMPRESS_LEVEL_NETWORK` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB1_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB1_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB1_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB1_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB1_SOCKET_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB1_SSH_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB1_USER` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB2_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB2_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB2_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_DB2_PATH` | `true` | -| 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` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_LOG_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_NEUTRAL_UMASK` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_PROCESS` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_PROTOCOL_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_REPO_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_REPO_S3_BUCKET` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_REPO_S3_CA_FILE` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_REPO_S3_CA_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_REPO_S3_ENDPOINT` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_REPO_S3_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_REPO_S3_KEY` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_REPO_S3_KEY_SECRET` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_REPO_S3_REGION` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_REPO_S3_VERIFY_SSL` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_REPO_TYPE` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionValid | `CFGCMD_LOCAL` | `CFGOPT_TYPE` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_BUFFER_SIZE` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_COMMAND` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_COMPRESS_LEVEL` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_COMPRESS_LEVEL_NETWORK` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB1_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB1_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_DB1_SOCKET_PATH` | `true` | -| 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` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_NEUTRAL_UMASK` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_PROCESS` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_PROTOCOL_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_REPO_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_REPO_S3_BUCKET` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_REPO_S3_CA_FILE` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_REPO_S3_CA_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_REPO_S3_ENDPOINT` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_REPO_S3_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_REPO_S3_KEY` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_REPO_S3_KEY_SECRET` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_REPO_S3_REGION` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_REPO_S3_VERIFY_SSL` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_REPO_TYPE` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionValid | `CFGCMD_REMOTE` | `CFGOPT_TYPE` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_BACKUP_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_BACKUP_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_BACKUP_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_BACKUP_SSH_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_BACKUP_USER` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_BUFFER_SIZE` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_CMD_SSH` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_COMPRESS` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_COMPRESS_LEVEL` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_COMPRESS_LEVEL_NETWORK` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_CONFIG` | `true` | -| 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` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_LINK_MAP` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_LOCK_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_LOG_LEVEL_CONSOLE` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_LOG_LEVEL_FILE` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_LOG_LEVEL_STDERR` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_LOG_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_LOG_TIMESTAMP` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_NEUTRAL_UMASK` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_PROCESS_MAX` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_PROTOCOL_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_RECOVERY_OPTION` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_REPO_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_REPO_S3_BUCKET` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_REPO_S3_CA_FILE` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_REPO_S3_CA_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_REPO_S3_ENDPOINT` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_REPO_S3_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_REPO_S3_KEY` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_REPO_S3_KEY_SECRET` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_REPO_S3_REGION` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_REPO_S3_VERIFY_SSL` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_REPO_TYPE` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_SET` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_TABLESPACE_MAP` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_TABLESPACE_MAP_ALL` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_TARGET` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_TARGET_ACTION` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_TARGET_EXCLUSIVE` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_TARGET_TIMELINE` | `true` | -| cfgRuleOptionValid | `CFGCMD_RESTORE` | `CFGOPT_TYPE` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_BACKUP_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_BACKUP_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_BACKUP_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_BACKUP_SSH_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_BACKUP_STANDBY` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_BACKUP_USER` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_BUFFER_SIZE` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_CMD_SSH` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_COMPRESS_LEVEL` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_COMPRESS_LEVEL_NETWORK` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB1_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB1_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB1_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB1_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB1_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB1_SOCKET_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB1_SSH_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB1_USER` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB2_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB2_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB2_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB2_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_DB2_PORT` | `true` | -| 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` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_LOG_LEVEL_FILE` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_LOG_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_LOG_TIMESTAMP` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_NEUTRAL_UMASK` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_ONLINE` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_PROTOCOL_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_REPO_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_REPO_S3_BUCKET` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_REPO_S3_CA_FILE` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_REPO_S3_CA_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_REPO_S3_ENDPOINT` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_REPO_S3_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_REPO_S3_KEY` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_REPO_S3_KEY_SECRET` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_REPO_S3_REGION` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_REPO_S3_VERIFY_SSL` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_REPO_TYPE` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_CREATE` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_BACKUP_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_BACKUP_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_BACKUP_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_BACKUP_SSH_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_BACKUP_STANDBY` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_BACKUP_USER` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_BUFFER_SIZE` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_CMD_SSH` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_COMPRESS_LEVEL` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_COMPRESS_LEVEL_NETWORK` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB1_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB1_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB1_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB1_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB1_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB1_SOCKET_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB1_SSH_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB1_USER` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB2_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB2_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB2_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB2_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_DB2_PORT` | `true` | -| 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` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_LOG_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_LOG_TIMESTAMP` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_NEUTRAL_UMASK` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_ONLINE` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_PROTOCOL_TIMEOUT` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_REPO_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_REPO_S3_BUCKET` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_REPO_S3_CA_FILE` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_REPO_S3_CA_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_REPO_S3_ENDPOINT` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_REPO_S3_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_REPO_S3_KEY` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_REPO_S3_KEY_SECRET` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_REPO_S3_REGION` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_REPO_S3_VERIFY_SSL` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_REPO_TYPE` | `true` | -| cfgRuleOptionValid | `CFGCMD_STANZA_UPGRADE` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_BACKUP_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_BACKUP_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_BACKUP_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_BACKUP_SSH_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_BACKUP_USER` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_CMD_SSH` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB1_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB1_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB1_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB1_SSH_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_DB2_CMD` | `true` | -| 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` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_LOG_LEVEL_STDERR` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_LOG_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_LOG_TIMESTAMP` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_NEUTRAL_UMASK` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_REPO_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_REPO_S3_BUCKET` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_REPO_S3_CA_FILE` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_REPO_S3_CA_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_REPO_S3_ENDPOINT` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_REPO_S3_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_REPO_S3_KEY` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_REPO_S3_KEY_SECRET` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_REPO_S3_REGION` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_REPO_S3_VERIFY_SSL` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_REPO_TYPE` | `true` | -| cfgRuleOptionValid | `CFGCMD_START` | `CFGOPT_STANZA` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_BACKUP_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_BACKUP_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_BACKUP_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_BACKUP_SSH_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_BACKUP_USER` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_CMD_SSH` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB1_CMD` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB1_CONFIG` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB1_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB1_SSH_PORT` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_DB2_CMD` | `true` | -| 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` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_LOG_LEVEL_FILE` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_LOG_LEVEL_STDERR` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_LOG_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_LOG_TIMESTAMP` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_NEUTRAL_UMASK` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_REPO_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_REPO_S3_BUCKET` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_REPO_S3_CA_FILE` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_REPO_S3_CA_PATH` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_REPO_S3_ENDPOINT` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_REPO_S3_HOST` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_REPO_S3_KEY` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_REPO_S3_KEY_SECRET` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_REPO_S3_REGION` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_REPO_S3_VERIFY_SSL` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_REPO_TYPE` | `true` | -| cfgRuleOptionValid | `CFGCMD_STOP` | `CFGOPT_STANZA` | `true` | diff --git a/src/config/configRule.c b/src/config/configRule.c deleted file mode 100644 index aa35e2890..000000000 --- a/src/config/configRule.c +++ /dev/null @@ -1,59 +0,0 @@ -/*********************************************************************************************************************************** -Command and Option Configuration Rules -***********************************************************************************************************************************/ -#include - -#include "config.h" -#include "configRule.h" - -#include "configRule.auto.c" - -/*********************************************************************************************************************************** -cfgCommandTotal - total number of commands -***********************************************************************************************************************************/ -int -cfgCommandTotal() -{ - return CFGCMDDEF_TOTAL; -} - -/*********************************************************************************************************************************** -cfgOptionTotal - total number of configuration options -***********************************************************************************************************************************/ -int -cfgOptionTotal() -{ - return CFGOPTDEF_TOTAL; -} - -/*********************************************************************************************************************************** -cfgRuleOptionAllowListValueValid - check if the value matches a value in the allow list -***********************************************************************************************************************************/ -bool -cfgRuleOptionAllowListValueValid(int commandId, int optionId, const char *value) -{ - if (value != NULL) - { - for (int valueIdx = 0; valueIdx < cfgRuleOptionAllowListValueTotal(commandId, optionId); valueIdx++) - if (strcmp(value, cfgRuleOptionAllowListValue(commandId, optionId, valueIdx)) == 0) - return true; - } - - return false; -} - -/*********************************************************************************************************************************** -cfgRuleOptionDependValueValid - check if the value matches a value in the allow list -***********************************************************************************************************************************/ -bool -cfgRuleOptionDependValueValid(int commandId, int optionId, const char *value) -{ - if (value != NULL) - { - for (int valueIdx = 0; valueIdx < cfgRuleOptionDependValueTotal(commandId, optionId); valueIdx++) - if (strcmp(value, cfgRuleOptionDependValue(commandId, optionId, valueIdx)) == 0) - return true; - } - - return false; -} diff --git a/src/config/configRule.h b/src/config/configRule.h deleted file mode 100644 index a2a28fc85..000000000 --- a/src/config/configRule.h +++ /dev/null @@ -1,41 +0,0 @@ -/*********************************************************************************************************************************** -Command and Option Configuration Rules -***********************************************************************************************************************************/ -#ifndef CONFIG_RULE_H -#define CONFIG_RULE_H - -#include "common/type.h" - -/*********************************************************************************************************************************** -Functions -***********************************************************************************************************************************/ -int cfgCommandId(const char *commandName); -int cfgOptionId(const char *optionName); -bool cfgRuleOptionAllowListValueValid(int commandId, int optionId, const char *value); -bool cfgRuleOptionDependValueValid(int commandId, int optionId, const char *value); -int cfgOptionTotal(); - -/*********************************************************************************************************************************** -Auto-Generated Functions -***********************************************************************************************************************************/ -bool cfgRuleOptionAllowList(int commandId, int optionId); -const char * cfgRuleOptionAllowListValue(int commandId, int optionId, int valueId); -int cfgRuleOptionAllowListValueTotal(int commandId, int optionId); -bool cfgRuleOptionAllowRange(int commandId, int optionId); -double cfgRuleOptionAllowRangeMax(int commandId, int optionId); -double cfgRuleOptionAllowRangeMin(int commandId, int optionId); -const char * cfgRuleOptionDefault(int commandId, int optionId); -bool cfgRuleOptionDepend(int commandId, int optionId); -int cfgRuleOptionDependOption(int commandId, int optionId); -const char *cfgRuleOptionDependValue(int commandId, int optionId, int valueId); -int cfgRuleOptionDependValueTotal(int commandId, int optionId); -const char *cfgRuleOptionNameAlt(int optionId); -bool cfgRuleOptionNegate(int optionId); -const char *cfgRuleOptionPrefix(int optionId); -bool cfgRuleOptionRequired(int commandId, int optionId); -const char *cfgRuleOptionSection(int optionId); -bool cfgRuleOptionSecure(int optionId); -int cfgRuleOptionType(int optionId); -bool cfgRuleOptionValid(int commandId, int optionId); - -#endif diff --git a/src/config/define.auto.c b/src/config/define.auto.c new file mode 100644 index 000000000..0dc06407d --- /dev/null +++ b/src/config/define.auto.c @@ -0,0 +1,2699 @@ +/*********************************************************************************************************************************** +Command and Option Definition + +Automatically generated by Build.pm -- do not modify directly. +***********************************************************************************************************************************/ + +/*********************************************************************************************************************************** +Command define data +***********************************************************************************************************************************/ +ConfigDefineCommandData configDefineCommandData[] = CFGDEFDATA_COMMAND_LIST +( + CFGDEFDATA_COMMAND + ( + CFGDEFDATA_COMMAND_NAME("archive-get") + ) + + CFGDEFDATA_COMMAND + ( + CFGDEFDATA_COMMAND_NAME("archive-push") + ) + + CFGDEFDATA_COMMAND + ( + CFGDEFDATA_COMMAND_NAME("backup") + ) + + CFGDEFDATA_COMMAND + ( + CFGDEFDATA_COMMAND_NAME("check") + ) + + CFGDEFDATA_COMMAND + ( + CFGDEFDATA_COMMAND_NAME("expire") + ) + + CFGDEFDATA_COMMAND + ( + CFGDEFDATA_COMMAND_NAME("help") + ) + + CFGDEFDATA_COMMAND + ( + CFGDEFDATA_COMMAND_NAME("info") + ) + + CFGDEFDATA_COMMAND + ( + CFGDEFDATA_COMMAND_NAME("local") + ) + + CFGDEFDATA_COMMAND + ( + CFGDEFDATA_COMMAND_NAME("remote") + ) + + CFGDEFDATA_COMMAND + ( + CFGDEFDATA_COMMAND_NAME("restore") + ) + + CFGDEFDATA_COMMAND + ( + CFGDEFDATA_COMMAND_NAME("stanza-create") + ) + + CFGDEFDATA_COMMAND + ( + CFGDEFDATA_COMMAND_NAME("stanza-upgrade") + ) + + CFGDEFDATA_COMMAND + ( + CFGDEFDATA_COMMAND_NAME("start") + ) + + CFGDEFDATA_COMMAND + ( + CFGDEFDATA_COMMAND_NAME("stop") + ) + + CFGDEFDATA_COMMAND + ( + CFGDEFDATA_COMMAND_NAME("version") + ) +) + +/*********************************************************************************************************************************** +Option define data +***********************************************************************************************************************************/ +ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST +( + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("archive-async") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeBoolean) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(true) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("0") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("archive-check") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeBoolean) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(true) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptOnline, + "1" + ) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("1") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("archive-copy") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeBoolean) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(true) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("0") + + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdBackup) + + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptArchiveCheck, + "1" + ) + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("archive-max-mb") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeInteger) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("archive-queue-max") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeInteger) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("archive-timeout") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeFloat) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_RANGE(0.1, 86400) + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("60") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("backup-cmd") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND(cfgDefOptBackupHost) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("backup-config") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND(cfgDefOptBackupHost) + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("/etc/pgbackrest.conf") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("backup-host") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("backup-ssh-port") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeInteger) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND(cfgDefOptBackupHost) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("backup-standby") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeBoolean) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(true) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("0") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("backup-user") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND(cfgDefOptBackupHost) + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("backrest") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("buffer-size") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeInteger) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_LIST + ( + "16384", + "32768", + "65536", + "131072", + "262144", + "524288", + "1048576", + "2097152", + "4194304", + "8388608", + "16777216" + ) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("4194304") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("checksum-page") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeBoolean) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(true) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("cmd-ssh") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("ssh") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("command") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionCommandLine) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("compress") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeBoolean) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(true) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("1") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("compress-level") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeInteger) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_RANGE(0, 9) + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("6") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("compress-level-network") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeInteger) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_RANGE(0, 9) + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("3") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("config") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionCommandLine) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(true) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("/etc/pgbackrest.conf") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("db-cmd") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(8) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND(cfgDefOptDbHost) + CFGDEFDATA_OPTION_OPTIONAL_PREFIX("db") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("db-config") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(8) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND(cfgDefOptDbHost) + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("/etc/pgbackrest.conf") + CFGDEFDATA_OPTION_OPTIONAL_PREFIX("db") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("db-host") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionStanza) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(8) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_PREFIX("db") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("db-include") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeList) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("db-path") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionStanza) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(8) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_PREFIX("db") + + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdArchiveGet) + + CFGDEFDATA_OPTION_OPTIONAL_REQUIRED(false) + ) + + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdArchivePush) + + CFGDEFDATA_OPTION_OPTIONAL_REQUIRED(false) + ) + + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdLocal) + + CFGDEFDATA_OPTION_OPTIONAL_REQUIRED(false) + ) + + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdRemote) + + CFGDEFDATA_OPTION_OPTIONAL_REQUIRED(false) + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("db-port") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionStanza) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeInteger) + + CFGDEFDATA_OPTION_INDEX_TOTAL(8) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("5432") + CFGDEFDATA_OPTION_OPTIONAL_PREFIX("db") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("db-socket-path") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionStanza) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(8) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_PREFIX("db") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("db-ssh-port") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionStanza) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeInteger) + + CFGDEFDATA_OPTION_INDEX_TOTAL(8) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND(cfgDefOptDbHost) + CFGDEFDATA_OPTION_OPTIONAL_PREFIX("db") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("db-timeout") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeFloat) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_RANGE(0.1, 604800) + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("1800") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("db-user") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionStanza) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(8) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND(cfgDefOptDbHost) + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("postgres") + CFGDEFDATA_OPTION_OPTIONAL_PREFIX("db") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("delta") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionCommandLine) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeBoolean) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdRestore) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("0") + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("force") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionCommandLine) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeBoolean) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdBackup) + + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptOnline, + "0" + ) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("0") + ) + + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdRestore) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("0") + ) + + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdStanzaCreate) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("0") + ) + + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdStop) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("0") + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("hardlink") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeBoolean) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(true) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("0") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("host-id") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionCommandLine) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeInteger) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("link-all") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeBoolean) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(true) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("0") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("link-map") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeHash) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("lock-path") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("/tmp/pgbackrest") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("log-level-console") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_LIST + ( + "off", + "error", + "warn", + "info", + "detail", + "debug", + "trace" + ) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("warn") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("log-level-file") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_LIST + ( + "off", + "error", + "warn", + "info", + "detail", + "debug", + "trace" + ) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("info") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("log-level-stderr") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_LIST + ( + "off", + "error", + "warn", + "info", + "detail", + "debug", + "trace" + ) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("warn") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("log-path") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("/var/log/pgbackrest") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("log-timestamp") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeBoolean) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(true) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("1") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("manifest-save-threshold") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeInteger) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("1073741824") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("neutral-umask") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeBoolean) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(true) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("1") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("online") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionCommandLine) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeBoolean) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(true) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("1") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("output") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionCommandLine) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdInfo) + + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_LIST + ( + "text", + "json" + ) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("text") + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("process") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionCommandLine) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeInteger) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdLocal) + + CFGDEFDATA_OPTION_OPTIONAL_REQUIRED(true) + ) + + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdRemote) + + CFGDEFDATA_OPTION_OPTIONAL_REQUIRED(false) + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("process-max") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeInteger) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_RANGE(1, 96) + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("1") + CFGDEFDATA_OPTION_OPTIONAL_NAME_ALT("thread-max") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("protocol-timeout") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeFloat) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_RANGE(0.1, 604800) + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("1830") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("recovery-option") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeHash) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptType, + "default", + "name", + "time", + "xid" + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("repo-path") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("/var/lib/pgbackrest") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("repo-s3-bucket") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptRepoType, + "s3" + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("repo-s3-ca-file") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptRepoType, + "s3" + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("repo-s3-ca-path") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptRepoType, + "s3" + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("repo-s3-endpoint") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptRepoType, + "s3" + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("repo-s3-host") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptRepoType, + "s3" + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("repo-s3-key") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(true) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptRepoType, + "s3" + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("repo-s3-key-secret") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(true) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptRepoType, + "s3" + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("repo-s3-region") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptRepoType, + "s3" + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("repo-s3-verify-ssl") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeBoolean) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(true) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptRepoType, + "s3" + ) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("1") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("repo-type") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_LIST + ( + "cifs", + "posix", + "s3" + ) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("posix") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("resume") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeBoolean) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(true) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("1") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("retention-archive") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeInteger) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_RANGE(1, 9999999) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("retention-archive-type") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_LIST + ( + "full", + "diff", + "incr" + ) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("full") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("retention-diff") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeInteger) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_RANGE(1, 9999999) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("retention-full") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeInteger) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_RANGE(1, 9999999) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("set") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionCommandLine) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdRestore) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("latest") + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("spool-path") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptArchiveAsync, + "1" + ) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("/var/spool/pgbackrest") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("stanza") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionCommandLine) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchiveGet) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdCheck) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdExpire) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdInfo) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaCreate) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStanzaUpgrade) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStart) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdStop) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdInfo) + + CFGDEFDATA_OPTION_OPTIONAL_REQUIRED(false) + ) + + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdRemote) + + CFGDEFDATA_OPTION_OPTIONAL_REQUIRED(false) + ) + + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdStart) + + CFGDEFDATA_OPTION_OPTIONAL_REQUIRED(false) + ) + + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdStop) + + CFGDEFDATA_OPTION_OPTIONAL_REQUIRED(false) + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("start-fast") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeBoolean) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(true) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("0") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("stop-auto") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeBoolean) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(true) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("0") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("tablespace-map") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeHash) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("tablespace-map-all") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("target") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionCommandLine) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdRestore) + + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptType, + "name", + "time", + "xid" + ) + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("target-action") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionCommandLine) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdRestore) + + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_LIST + ( + "pause", + "promote", + "shutdown" + ) + + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptType, + "name", + "time", + "xid" + ) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("pause") + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("target-exclusive") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionCommandLine) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeBoolean) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdRestore) + + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptType, + "time", + "xid" + ) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("0") + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("target-timeline") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionCommandLine) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdRestore) + + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptType, + "default", + "name", + "time", + "xid" + ) + + CFGDEFDATA_OPTION_OPTIONAL_REQUIRED(false) + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("test") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionCommandLine) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeBoolean) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("0") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("test-delay") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionCommandLine) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeFloat) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptTest, + "1" + ) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("5") + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("test-point") + CFGDEFDATA_OPTION_REQUIRED(false) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionCommandLine) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeHash) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST + ( + cfgDefOptTest, + "1" + ) + ) + ) + + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("type") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionCommandLine) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_NEGATE(false) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdLocal) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRemote) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdRestore) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdBackup) + + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_LIST + ( + "full", + "diff", + "incr" + ) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("incr") + ) + + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdLocal) + + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_LIST + ( + "db", + "backup" + ) + ) + + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdRemote) + + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_LIST + ( + "db", + "backup" + ) + ) + + CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE + ( + CFGDEFDATA_OPTION_OPTIONAL_COMMAND(cfgDefCmdRestore) + + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_LIST + ( + "name", + "time", + "xid", + "preserve", + "none", + "immediate", + "default" + ) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("default") + ) + ) + ) +) diff --git a/src/config/define.auto.h b/src/config/define.auto.h new file mode 100644 index 000000000..1b94d765d --- /dev/null +++ b/src/config/define.auto.h @@ -0,0 +1,132 @@ +/*********************************************************************************************************************************** +Command and Option Definition + +Automatically generated by Build.pm -- do not modify directly. +***********************************************************************************************************************************/ +#ifndef CONFIG_DEFINE_AUTO_H +#define CONFIG_DEFINE_AUTO_H + +/*********************************************************************************************************************************** +Command define enum +***********************************************************************************************************************************/ +typedef enum +{ + cfgDefCmdArchiveGet, + cfgDefCmdArchivePush, + cfgDefCmdBackup, + cfgDefCmdCheck, + cfgDefCmdExpire, + cfgDefCmdHelp, + cfgDefCmdInfo, + cfgDefCmdLocal, + cfgDefCmdRemote, + cfgDefCmdRestore, + cfgDefCmdStanzaCreate, + cfgDefCmdStanzaUpgrade, + cfgDefCmdStart, + cfgDefCmdStop, + cfgDefCmdVersion, +} ConfigDefineCommand; + +/*********************************************************************************************************************************** +Option type define enum +***********************************************************************************************************************************/ +typedef enum +{ + cfgDefOptTypeBoolean, + cfgDefOptTypeFloat, + cfgDefOptTypeHash, + cfgDefOptTypeInteger, + cfgDefOptTypeList, + cfgDefOptTypeString, +} ConfigDefineOptionType; + +/*********************************************************************************************************************************** +Option define enum +***********************************************************************************************************************************/ +typedef enum +{ + cfgDefOptArchiveAsync, + cfgDefOptArchiveCheck, + cfgDefOptArchiveCopy, + cfgDefOptArchiveMaxMb, + cfgDefOptArchiveQueueMax, + cfgDefOptArchiveTimeout, + cfgDefOptBackupCmd, + cfgDefOptBackupConfig, + cfgDefOptBackupHost, + cfgDefOptBackupSshPort, + cfgDefOptBackupStandby, + cfgDefOptBackupUser, + cfgDefOptBufferSize, + cfgDefOptChecksumPage, + cfgDefOptCmdSsh, + cfgDefOptCommand, + cfgDefOptCompress, + cfgDefOptCompressLevel, + cfgDefOptCompressLevelNetwork, + cfgDefOptConfig, + cfgDefOptDbCmd, + cfgDefOptDbConfig, + cfgDefOptDbHost, + cfgDefOptDbInclude, + cfgDefOptDbPath, + cfgDefOptDbPort, + cfgDefOptDbSocketPath, + cfgDefOptDbSshPort, + cfgDefOptDbTimeout, + cfgDefOptDbUser, + cfgDefOptDelta, + cfgDefOptForce, + cfgDefOptHardlink, + cfgDefOptHostId, + cfgDefOptLinkAll, + cfgDefOptLinkMap, + cfgDefOptLockPath, + cfgDefOptLogLevelConsole, + cfgDefOptLogLevelFile, + cfgDefOptLogLevelStderr, + cfgDefOptLogPath, + cfgDefOptLogTimestamp, + cfgDefOptManifestSaveThreshold, + cfgDefOptNeutralUmask, + cfgDefOptOnline, + cfgDefOptOutput, + cfgDefOptProcess, + cfgDefOptProcessMax, + cfgDefOptProtocolTimeout, + cfgDefOptRecoveryOption, + cfgDefOptRepoPath, + cfgDefOptRepoS3Bucket, + cfgDefOptRepoS3CaFile, + cfgDefOptRepoS3CaPath, + cfgDefOptRepoS3Endpoint, + cfgDefOptRepoS3Host, + cfgDefOptRepoS3Key, + cfgDefOptRepoS3KeySecret, + cfgDefOptRepoS3Region, + cfgDefOptRepoS3VerifySsl, + cfgDefOptRepoType, + cfgDefOptResume, + cfgDefOptRetentionArchive, + cfgDefOptRetentionArchiveType, + cfgDefOptRetentionDiff, + cfgDefOptRetentionFull, + cfgDefOptSet, + cfgDefOptSpoolPath, + cfgDefOptStanza, + cfgDefOptStartFast, + cfgDefOptStopAuto, + cfgDefOptTablespaceMap, + cfgDefOptTablespaceMapAll, + cfgDefOptTarget, + cfgDefOptTargetAction, + cfgDefOptTargetExclusive, + cfgDefOptTargetTimeline, + cfgDefOptTest, + cfgDefOptTestDelay, + cfgDefOptTestPoint, + cfgDefOptType, +} ConfigDefineOption; + +#endif diff --git a/src/config/define.c b/src/config/define.c new file mode 100644 index 000000000..409152aed --- /dev/null +++ b/src/config/define.c @@ -0,0 +1,518 @@ +/*********************************************************************************************************************************** +Command and Option Configuration Definition +***********************************************************************************************************************************/ +#include + +#include "common/error.h" +#include "config/define.h" + +/*********************************************************************************************************************************** +Map command names to ids and vice versa. +***********************************************************************************************************************************/ +typedef struct ConfigDefineCommandData +{ + char *name; // Command name +} ConfigDefineCommandData; + +// Command macros are intended to make the command definitions easy to read and to produce good diffs. +//---------------------------------------------------------------------------------------------------------------------------------- +#define CFGDEFDATA_COMMAND_LIST(...) \ + {__VA_ARGS__}; + +#define CFGDEFDATA_COMMAND(...) \ + {__VA_ARGS__}, + +#define CFGDEFDATA_COMMAND_NAME(nameParam) \ + .name = nameParam, + +/*********************************************************************************************************************************** +Define how an option is parsed and interacts with other options. +***********************************************************************************************************************************/ +typedef struct ConfigDefineOptionData +{ + char *name; // Option name + unsigned int type:3; // Option type (e.g. string, int, boolean, etc.) + unsigned int indexTotal:4; // 0 normally, > 0 if indexed option (e.g. db1-*) + ConfigDefSection section:2; // Config section (e.g. global, stanza, cmd-line) + bool negate:1; // Can the option be negated? + bool required:1; // Is the option required? + bool secure:1; // Does the option need to be redacted on logs and cmd-line? + unsigned int commandValid:15; // Bitmap for commands that is option is valid for + void **data; // Optional data and command overrides +} ConfigDefineOptionData; + +// Option macros are intended to make the command definitions easy to read and to produce good diffs. +//---------------------------------------------------------------------------------------------------------------------------------- +#define CFGDEFDATA_OPTION_LIST(...) \ + {__VA_ARGS__}; + +#define CFGDEFDATA_OPTION(...) \ + {__VA_ARGS__}, + +#define CFGDEFDATA_OPTION_NAME(nameParam) \ + .name = nameParam, +#define CFGDEFDATA_OPTION_INDEX_TOTAL(indexTotalParam) \ + .indexTotal = indexTotalParam, +#define CFGDEFDATA_OPTION_NEGATE(negateParam) \ + .negate = negateParam, +#define CFGDEFDATA_OPTION_REQUIRED(requiredParam) \ + .required = requiredParam, +#define CFGDEFDATA_OPTION_SECTION(sectionParam) \ + .section = sectionParam, +#define CFGDEFDATA_OPTION_SECURE(secureParam) \ + .secure = secureParam, +#define CFGDEFDATA_OPTION_TYPE(typeParam) \ + .type = typeParam, + +// Define additional types of data that can be associated with an option. Because these types are rare they are not give dedicated +// fields and are instead packed into an array which is read at runtime. This may seem inefficient but they are only accessed a +// single time during parse so space efficiency is more important than performance. +//---------------------------------------------------------------------------------------------------------------------------------- +typedef enum +{ + configDefDataTypeEnd, // Indicates there is no more data + configDefDataTypeAllowList, + configDefDataTypeAllowRange, + configDefDataTypeCommand, + configDefDataTypeDefault, + configDefDataTypeDepend, + configDefDataTypeNameAlt, + configDefDataTypePrefix, + configDefDataTypeRequired, +} ConfigDefineDataType; + +#define CFGDATA_OPTION_OPTIONAL_PUSH_LIST(type, size, data, ...) \ + (void *)((uint32)type << 24 | (uint32)size << 16 | (uint32)data), __VA_ARGS__ + +#define CFGDATA_OPTION_OPTIONAL_PUSH(type, size, data) \ + (void *)((uint32)type << 24 | (uint32)size << 16 | (uint32)data) + +#define CFGDEFDATA_OPTION_COMMAND_LIST(...) \ + .commandValid = 0 __VA_ARGS__, + +#define CFGDEFDATA_OPTION_COMMAND(commandParam) \ + | (1 << commandParam) + +#define CFGDEFDATA_OPTION_OPTIONAL_LIST(...) \ + .data = (void *[]){__VA_ARGS__ NULL}, + +#define CFGDEFDATA_OPTION_OPTIONAL_DEFAULT(defaultValue) \ + CFGDATA_OPTION_OPTIONAL_PUSH_LIST(configDefDataTypeDefault, 1, 0, defaultValue), + +#define CFGDEFDATA_OPTION_OPTIONAL_ALLOW_LIST(...) \ + CFGDATA_OPTION_OPTIONAL_PUSH_LIST( \ + configDefDataTypeAllowList, sizeof((char *[]){__VA_ARGS__}) / sizeof(char *), 0, __VA_ARGS__), + +#define CFGDEFDATA_OPTION_OPTIONAL_ALLOW_RANGE(rangeMinParam, rangeMaxParam) \ + CFGDATA_OPTION_OPTIONAL_PUSH_LIST( \ + configDefDataTypeAllowRange, 2, 0, (void *)(intptr_t)(int32)(rangeMinParam * 100), \ + (void *)(intptr_t)(int32)(rangeMaxParam * 100)), + +#define CFGDEFDATA_OPTION_OPTIONAL_NAME_ALT(nameAltParam) \ + CFGDATA_OPTION_OPTIONAL_PUSH_LIST(configDefDataTypeNameAlt, 1, 0, nameAltParam), + +#define CFGDEFDATA_OPTION_OPTIONAL_PREFIX(prefixParam) \ + CFGDATA_OPTION_OPTIONAL_PUSH_LIST(configDefDataTypePrefix, 1, 0, prefixParam), + +#define CFGDEFDATA_OPTION_OPTIONAL_DEPEND(optionDepend) \ + CFGDATA_OPTION_OPTIONAL_PUSH(configDefDataTypeDepend, 0, optionDepend), + +#define CFGDEFDATA_OPTION_OPTIONAL_DEPEND_LIST(optionDepend, ...) \ + CFGDATA_OPTION_OPTIONAL_PUSH_LIST( \ + configDefDataTypeDepend, sizeof((char *[]){__VA_ARGS__}) / sizeof(char *), optionDepend, __VA_ARGS__), + +#define CFGDEFDATA_OPTION_OPTIONAL_COMMAND_OVERRRIDE(...) \ + __VA_ARGS__ + +#define CFGDEFDATA_OPTION_OPTIONAL_COMMAND(command) \ + CFGDATA_OPTION_OPTIONAL_PUSH(configDefDataTypeCommand, 0, command), + +#define CFGDEFDATA_OPTION_OPTIONAL_REQUIRED(commandOptionRequired) \ + CFGDATA_OPTION_OPTIONAL_PUSH(configDefDataTypeRequired, 0, commandOptionRequired), + +/*********************************************************************************************************************************** +Include the automatically generated configuration data. +***********************************************************************************************************************************/ +#include "define.auto.c" + +/*********************************************************************************************************************************** +Find optional data for a command and option. +***********************************************************************************************************************************/ +static void +cfgDefDataFind( + ConfigDefineDataType typeFind, ConfigDefineCommand commandDefId, void **dataList, bool *dataDefFound, int *dataDef, + void ***dataDefList, int *dataDefListSize) +{ + *dataDefFound = false; + + // Only proceed if there is data + if (dataList != NULL) + { + ConfigDefineDataType type; + int offset = 0; + int size; + int data; + int commandCurrent = -1; + + // Loop through all data + do + { + // Extract data + type = (ConfigDefineDataType)(((uintptr_t)dataList[offset] >> 24) & 0xFF); + size = ((uintptr_t)dataList[offset] >> 16) & 0xFF; + data = (uintptr_t)dataList[offset] & 0xFFFF; + + // If a command block then set the current command + if (type == configDefDataTypeCommand) + { + // If data was not found in the expected command then there's nothing more to look for + if (commandCurrent == commandDefId) + break; + + // Set the current command + commandCurrent = data; + } + // Only find type if not in a command block yet or in the expected command + else if (type == typeFind && (commandCurrent == -1 || commandCurrent == commandDefId)) + { + // Store the data found + *dataDefFound = true; + *dataDef = data; + *dataDefList = &dataList[offset + 1]; + *dataDefListSize = size; + + // If found in the expected command block then nothing more to look for + if (commandCurrent == commandDefId) + break; + } + + offset += size + 1; + } + while(type != configDefDataTypeEnd); + } +} + +#define CONFIG_DEFINE_DATA_FIND(commandDefId, optionDefId, type) \ + bool dataDefFound = false; \ + int dataDef = 0; \ + int dataDefListSize = 0; \ + void **dataDefList = NULL; \ + \ + cfgDefDataFind( \ + type, commandDefId, configDefineOptionData[optionDefId].data, &dataDefFound, &dataDef, &dataDefList, &dataDefListSize); + +/*********************************************************************************************************************************** +Command and option define totals +***********************************************************************************************************************************/ +int +cfgDefCommandTotal() +{ + return sizeof(configDefineCommandData) / sizeof(ConfigDefineCommandData); +} + +int +cfgDefOptionTotal() +{ + return sizeof(configDefineOptionData) / sizeof(ConfigDefineOptionData); +} + +/*********************************************************************************************************************************** +Check that command and option ids are valid +***********************************************************************************************************************************/ +void +cfgDefCommandCheck(ConfigDefineCommand commandDefId) +{ + if (commandDefId < 0 || commandDefId >= cfgDefCommandTotal()) + ERROR_THROW(AssertError, "command def id %d invalid - must be >= 0 and < %d", commandDefId, cfgDefCommandTotal()); +} + +void +cfgDefOptionCheck(ConfigDefineOption optionDefId) +{ + if (optionDefId < 0 || optionDefId >= cfgDefOptionTotal()) + ERROR_THROW(AssertError, "option def id %d invalid - must be >= 0 and < %d", optionDefId, cfgDefOptionTotal()); +} + +static void +cfgDefCommandOptionCheck(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId) +{ + cfgDefCommandCheck(commandDefId); + cfgDefOptionCheck(optionDefId); +} + +/*********************************************************************************************************************************** +Option allow lists +***********************************************************************************************************************************/ +bool +cfgDefOptionAllowList(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId) +{ + cfgDefCommandOptionCheck(commandDefId, optionDefId); + + CONFIG_DEFINE_DATA_FIND(commandDefId, optionDefId, configDefDataTypeAllowList); + + return dataDefFound; +} + +const char * +cfgDefOptionAllowListValue(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, int valueId) +{ + cfgDefCommandOptionCheck(commandDefId, optionDefId); + + CONFIG_DEFINE_DATA_FIND(commandDefId, optionDefId, configDefDataTypeAllowList); + + if (valueId < 0 || valueId >= dataDefListSize) + ERROR_THROW(AssertError, "value id %d invalid - must be >= 0 and < %d", valueId, dataDefListSize); + + return (char *)dataDefList[valueId]; +} + +int +cfgDefOptionAllowListValueTotal(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId) +{ + cfgDefCommandOptionCheck(commandDefId, optionDefId); + + CONFIG_DEFINE_DATA_FIND(commandDefId, optionDefId, configDefDataTypeAllowList); + + return dataDefListSize; +} + +// Check if the value matches a value in the allow list +bool +cfgDefOptionAllowListValueValid(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, const char *value) +{ + if (value != NULL) + { + for (int valueIdx = 0; valueIdx < cfgDefOptionAllowListValueTotal(commandDefId, optionDefId); valueIdx++) + if (strcmp(value, cfgDefOptionAllowListValue(commandDefId, optionDefId, valueIdx)) == 0) + return true; + } + + return false; +} + +/*********************************************************************************************************************************** +Allow range +***********************************************************************************************************************************/ +bool +cfgDefOptionAllowRange(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId) +{ + cfgDefCommandOptionCheck(commandDefId, optionDefId); + + CONFIG_DEFINE_DATA_FIND(commandDefId, optionDefId, configDefDataTypeAllowRange); + + return dataDefFound; +} + +double +cfgDefOptionAllowRangeMax(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId) +{ + cfgDefCommandOptionCheck(commandDefId, optionDefId); + + CONFIG_DEFINE_DATA_FIND(commandDefId, optionDefId, configDefDataTypeAllowRange); + + return (double)(intptr_t)dataDefList[1] / 100; +} + +double +cfgDefOptionAllowRangeMin(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId) +{ + cfgDefCommandOptionCheck(commandDefId, optionDefId); + + CONFIG_DEFINE_DATA_FIND(commandDefId, optionDefId, configDefDataTypeAllowRange); + + return (double)(intptr_t)dataDefList[0] / 100; +} + +/*********************************************************************************************************************************** +Default value for the option +***********************************************************************************************************************************/ +const char * +cfgDefOptionDefault(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId) +{ + cfgDefCommandOptionCheck(commandDefId, optionDefId); + + CONFIG_DEFINE_DATA_FIND(commandDefId, optionDefId, configDefDataTypeDefault); + + if (dataDefFound) + return (char *)dataDefList[0]; + + return NULL; +} + +/*********************************************************************************************************************************** +Dependencies and depend lists +***********************************************************************************************************************************/ +bool +cfgDefOptionDepend(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId) +{ + cfgDefCommandOptionCheck(commandDefId, optionDefId); + + CONFIG_DEFINE_DATA_FIND(commandDefId, optionDefId, configDefDataTypeDepend); + + return dataDefFound; +} + +ConfigDefineOption +cfgDefOptionDependOption(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId) +{ + cfgDefCommandOptionCheck(commandDefId, optionDefId); + + CONFIG_DEFINE_DATA_FIND(commandDefId, optionDefId, configDefDataTypeDepend); + + return (ConfigDefineOption)dataDef; +} + +const char * +cfgDefOptionDependValue(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, int valueId) +{ + cfgDefCommandOptionCheck(commandDefId, optionDefId); + + CONFIG_DEFINE_DATA_FIND(commandDefId, optionDefId, configDefDataTypeDepend); + + if (valueId < 0 || valueId >= dataDefListSize) + ERROR_THROW(AssertError, "value id %d invalid - must be >= 0 and < %d", valueId, dataDefListSize); + + return (char *)dataDefList[valueId]; +} + +int +cfgDefOptionDependValueTotal(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId) +{ + cfgDefCommandOptionCheck(commandDefId, optionDefId); + + CONFIG_DEFINE_DATA_FIND(commandDefId, optionDefId, configDefDataTypeDepend); + + return dataDefListSize; +} + +// Check if the value matches a value in the allow list +bool +cfgDefOptionDependValueValid(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, const char *value) +{ + if (value != NULL) + { + for (int valueIdx = 0; valueIdx < cfgDefOptionDependValueTotal(commandDefId, optionDefId); valueIdx++) + if (strcmp(value, cfgDefOptionDependValue(commandDefId, optionDefId, valueIdx)) == 0) + return true; + } + + return false; +} + +/*********************************************************************************************************************************** +Get total indexed values for option +***********************************************************************************************************************************/ +int +cfgDefOptionIndexTotal(ConfigDefineOption optionDefId) +{ + cfgDefOptionCheck(optionDefId); + return configDefineOptionData[optionDefId].indexTotal; +} + +/*********************************************************************************************************************************** +Name of the option +***********************************************************************************************************************************/ +const char * +cfgDefOptionName(ConfigDefineOption optionDefId) +{ + cfgDefOptionCheck(optionDefId); + return configDefineOptionData[optionDefId].name; +} + +/*********************************************************************************************************************************** +Alternate name for the option -- generally used for deprecation +***********************************************************************************************************************************/ +const char * +cfgDefOptionNameAlt(ConfigDefineOption optionDefId) +{ + cfgDefOptionCheck(optionDefId); + + CONFIG_DEFINE_DATA_FIND(-1, optionDefId, configDefDataTypeNameAlt); + + if (dataDefFound) + return (char *)dataDefList[0]; + + return NULL; +} + +/*********************************************************************************************************************************** +Can the option be negated? +***********************************************************************************************************************************/ +bool +cfgDefOptionNegate(ConfigDefineOption optionDefId) +{ + cfgDefOptionCheck(optionDefId); + return configDefineOptionData[optionDefId].negate; +} + +/*********************************************************************************************************************************** +Option prefix for indexed options +***********************************************************************************************************************************/ +const char * +cfgDefOptionPrefix(ConfigDefineOption optionDefId) +{ + cfgDefOptionCheck(optionDefId); + + CONFIG_DEFINE_DATA_FIND(-1, optionDefId, configDefDataTypePrefix); + + if (dataDefFound) + return (char *)dataDefList[0]; + + return NULL; +} + +/*********************************************************************************************************************************** +Does the option need to be protected from showing up in logs, command lines, etc? +***********************************************************************************************************************************/ +bool +cfgDefOptionSecure(ConfigDefineOption optionDefId) +{ + cfgDefOptionCheck(optionDefId); + return configDefineOptionData[optionDefId].secure; +} + +/*********************************************************************************************************************************** +Is the option required +***********************************************************************************************************************************/ +bool +cfgDefOptionRequired(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId) +{ + cfgDefCommandOptionCheck(commandDefId, optionDefId); + + CONFIG_DEFINE_DATA_FIND(commandDefId, optionDefId, configDefDataTypeRequired); + + if (dataDefFound) + return (bool)dataDef; + + return configDefineOptionData[optionDefId].required; +} + +/*********************************************************************************************************************************** +Get option section +***********************************************************************************************************************************/ +ConfigDefSection +cfgDefOptionSection(ConfigDefineOption optionDefId) +{ + cfgDefOptionCheck(optionDefId); + return configDefineOptionData[optionDefId].section; +} + +/*********************************************************************************************************************************** +Get option data type +***********************************************************************************************************************************/ +int +cfgDefOptionType(ConfigDefineOption optionDefId) +{ + cfgDefOptionCheck(optionDefId); + return configDefineOptionData[optionDefId].type; +} + +/*********************************************************************************************************************************** +Is the option valid for the command? +***********************************************************************************************************************************/ +bool +cfgDefOptionValid(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId) +{ + cfgDefCommandOptionCheck(commandDefId, optionDefId); + return configDefineOptionData[optionDefId].commandValid & (1 << commandDefId); +} diff --git a/src/config/define.h b/src/config/define.h new file mode 100644 index 000000000..377006184 --- /dev/null +++ b/src/config/define.h @@ -0,0 +1,52 @@ +/*********************************************************************************************************************************** +Command and Option Configuration Definition +***********************************************************************************************************************************/ +#ifndef CONFIG_DEFINE_H +#define CONFIG_DEFINE_H + +#include "common/type.h" +#include "config/define.auto.h" + +/*********************************************************************************************************************************** +Section enum - defines which sections of the config an option can appear in +***********************************************************************************************************************************/ +typedef enum +{ + cfgDefSectionCommandLine, // command-line only + cfgDefSectionGlobal, // command-line or in any config section + cfgDefSectionStanza, // command-line of in any config stanza section +} ConfigDefSection; + +/*********************************************************************************************************************************** +Functions +***********************************************************************************************************************************/ +int cfgDefCommandTotal(); +void cfgDefCommandCheck(ConfigDefineCommand commandDefId); + +bool cfgDefOptionAllowList(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId); +int cfgDefOptionAllowListValueTotal(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId); +bool cfgDefOptionAllowListValueValid(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, const char *value); +const char *cfgDefOptionAllowListValue(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, int valueId); +bool cfgDefOptionAllowRange(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId); +double cfgDefOptionAllowRangeMax(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId); +double cfgDefOptionAllowRangeMin(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId); +void cfgDefOptionCheck(ConfigDefineOption optionDefId); +const char *cfgDefOptionDefault(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId); +bool cfgDefOptionDepend(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId); +ConfigDefineOption cfgDefOptionDependOption(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId); +int cfgDefOptionDependValueTotal(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId); +bool cfgDefOptionDependValueValid(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, const char *value); +const char *cfgDefOptionDependValue(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, int valueId); +int cfgDefOptionIndexTotal(ConfigDefineOption optionDefId); +const char *cfgDefOptionName(ConfigDefineOption optionDefId); +const char *cfgDefOptionNameAlt(ConfigDefineOption optionDefId); +bool cfgDefOptionNegate(ConfigDefineOption optionDefId); +const char *cfgDefOptionPrefix(ConfigDefineOption optionDefId); +bool cfgDefOptionRequired(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId); +ConfigDefSection cfgDefOptionSection(ConfigDefineOption optionDefId); +bool cfgDefOptionSecure(ConfigDefineOption optionDefId); +int cfgDefOptionTotal(); +int cfgDefOptionType(ConfigDefineOption optionDefId); +bool cfgDefOptionValid(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId); + +#endif diff --git a/test/Vagrantfile b/test/Vagrantfile index 242bd33de..8a42dcbc3 100644 --- a/test/Vagrantfile +++ b/test/Vagrantfile @@ -40,6 +40,11 @@ Vagrant.configure(2) do |config| echo 'supersede domain-name-servers 8.8.8.8;' >> /etc/dhcp/dhclient.conf /etc/init.d/networking restart + # If builds fail with 'modification time in the future', the following command will sync the vm clock with the host + #--------------------------------------------------------------------------------------------------------------------------- + echo 'Start Time Sync Service' && date + sudo /usr/sbin/VBoxService --timesync-set-start + #--------------------------------------------------------------------------------------------------------------------------- echo 'Install Perl Modules' && date apt-get install -y libdbd-pg-perl libio-socket-ssl-perl libxml-libxml-perl libxml-checker-perl libperl-critic-perl \ diff --git a/test/expect/archive-stop-001.log b/test/expect/archive-stop-001.log index 1494e83af..26387724d 100644 --- a/test/expect/archive-stop-001.log +++ b/test/expect/archive-stop-001.log @@ -4,7 +4,7 @@ run 001 - rmt 0, cmp 0, error version, s3 0 stanza-create db - create required data for stanza (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/db-master/repo/backup/db/backup.info diff --git a/test/expect/archive-stop-002.log b/test/expect/archive-stop-002.log index 488c8b6ba..9308bb2a1 100644 --- a/test/expect/archive-stop-002.log +++ b/test/expect/archive-stop-002.log @@ -4,7 +4,7 @@ run 002 - rmt 0, cmp 1, error version, s3 0 stanza-create db - create required data for stanza (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/db-master/repo/backup/db/backup.info diff --git a/test/expect/archive-stop-003.log b/test/expect/archive-stop-003.log index 94abb3bb3..e045e6d42 100644 --- a/test/expect/archive-stop-003.log +++ b/test/expect/archive-stop-003.log @@ -4,7 +4,7 @@ run 003 - rmt 1, cmp 0, error version, s3 0 stanza-create db - create required data for stanza (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/backup/repo/backup/db/backup.info diff --git a/test/expect/archive-stop-004.log b/test/expect/archive-stop-004.log index 37d4591fe..823d8fd09 100644 --- a/test/expect/archive-stop-004.log +++ b/test/expect/archive-stop-004.log @@ -4,7 +4,7 @@ run 004 - rmt 1, cmp 0, error connect, s3 0 stanza-create db - create required data for stanza (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/backup/repo/backup/db/backup.info diff --git a/test/expect/archive-stop-005.log b/test/expect/archive-stop-005.log index 9f0bb5440..0d50c26a0 100644 --- a/test/expect/archive-stop-005.log +++ b/test/expect/archive-stop-005.log @@ -4,7 +4,7 @@ run 005 - rmt 1, cmp 1, error version, s3 0 stanza-create db - create required data for stanza (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/backup/repo/backup/db/backup.info diff --git a/test/expect/archive-stop-006.log b/test/expect/archive-stop-006.log index fc2e18efa..a1eb34109 100644 --- a/test/expect/archive-stop-006.log +++ b/test/expect/archive-stop-006.log @@ -4,7 +4,7 @@ run 006 - rmt 1, cmp 1, error connect, s3 0 stanza-create db - create required data for stanza (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/backup/repo/backup/db/backup.info diff --git a/test/expect/archive-stop-007.log b/test/expect/archive-stop-007.log index 62652a8bd..3d7db041f 100644 --- a/test/expect/archive-stop-007.log +++ b/test/expect/archive-stop-007.log @@ -4,7 +4,7 @@ run 007 - rmt 1, cmp 0, error connect, s3 1 stanza-create db - create required data for stanza (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: /backup/db/backup.info diff --git a/test/expect/mock-all-001.log b/test/expect/mock-all-001.log index fda74a907..a55286672 100644 --- a/test/expect/mock-all-001.log +++ b/test/expect/mock-all-001.log @@ -14,7 +14,7 @@ info all stanzas - no stanzas exist (db-master host) stanza-create db - create required data for stanza (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/db-master/repo/backup/db/backup.info @@ -52,7 +52,7 @@ db-version="9.4" full backup - error on identical link destinations (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 ERROR: [070]: link [TEST_PATH]/db-master/db/base/postgresql.conf (../pg_config) references a subdirectory of or the same directory as link [TEST_PATH]/db-master/db/base/pg_config_bad (../../db/pg_config) @@ -61,7 +61,7 @@ P00 INFO: backup command end: aborted with exception [070] full backup - error on link to a link (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 ERROR: [070]: link '[TEST_PATH]/db-master/db/base/postgresql.conf.bad' -> '../pg_config/postgresql.conf.link' cannot reference another link @@ -70,7 +70,7 @@ P00 INFO: backup command end: aborted with exception [070] full backup - create pg_stat link, pg_clog dir (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --manifest-save-threshold=3 --buffer-size=16384 --checksum-page --process-max=1 --repo-type=cifs --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=16384 --checksum-page --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --manifest-save-threshold=3 --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --repo-type=cifs --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=16384 --checksum-page --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --manifest-save-threshold=3 --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --repo-type=cifs --stanza=db --start-fast --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 DEBUG: Storage::Posix::Driver->new(): bFileSync = , bPathSync = @@ -152,8 +152,8 @@ P00 DEBUG: Protocol::Local::Process->queueJob(): iHostConfigIdx = 1, rParam P00 DEBUG: Protocol::Local::Process->queueJob(): iHostConfigIdx = 1, rParam = ([TEST_PATH]/db-master/db/base/base/1/PG_VERSION, pg_data/base/1/PG_VERSION, 3, [undef], 0, [BACKUP-FULL-1], 0, 3, [MODIFICATION-TIME-1], 1, [undef]), strKey = pg_data/base/1/PG_VERSION, strOp = backupFile, strQueue = pg_data P00 DEBUG: Protocol::Local::Process->queueJob(): iHostConfigIdx = 1, rParam = ([TEST_PATH]/db-master/db/base/PG_VERSION, pg_data/PG_VERSION, 3, [undef], 0, [BACKUP-FULL-1], 0, 3, [MODIFICATION-TIME-1], 1, [undef]), strKey = pg_data/PG_VERSION, strOp = backupFile, strQueue = pg_data P00 DEBUG: Protocol::Local::Process->hostConnect: start local process: iHostConfigIdx = 1, iHostIdx = 0, iHostProcessIdx = 0, iProcessId = 1, strHostType = db -P00 DEBUG: Protocol::Local::Master->new(): iProcessIdx = 1, strCommand = [BACKREST-BIN] --buffer-size=16384 --command=backup --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --host-id=1 --lock-path=[TEST_PATH]/db-master/lock --log-path=[TEST_PATH]/db-master/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --repo-type=cifs --stanza=db --type=db local -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 16384, iCompressLevel = 3, iCompressLevelNetwork = 3, iProtocolTimeout = 60, strCommand = [BACKREST-BIN] --buffer-size=16384 --command=backup --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --host-id=1 --lock-path=[TEST_PATH]/db-master/lock --log-path=[TEST_PATH]/db-master/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --repo-type=cifs --stanza=db --type=db local, strId = local-1 process, strName = local +P00 DEBUG: Protocol::Local::Master->new(): iProcessIdx = 1, strCommand = [BACKREST-BIN] --buffer-size=16384 --command=backup --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --host-id=1 --lock-path=[TEST_PATH]/db-master/lock --log-path=[TEST_PATH]/db-master/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --repo-type=cifs --stanza=db --type=db local +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 16384, iCompressLevel = 3, iCompressLevelNetwork = 3, iProtocolTimeout = 60, strCommand = [BACKREST-BIN] --buffer-size=16384 --command=backup --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --host-id=1 --lock-path=[TEST_PATH]/db-master/lock --log-path=[TEST_PATH]/db-master/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --repo-type=cifs --stanza=db --type=db local, strId = local-1 process, strName = local P00 DEBUG: Protocol::Local::Process->hostConnect=>: bResult = true P00 DEBUG: Protocol::Local::Process->init: init local process: iDirection = 1, iHostIdx = 0, iProcessId = 1, iQueueIdx = 0, iQueueLastIdx = 0 P00 DEBUG: Protocol::Local::Process->init=>: bResult = true @@ -448,7 +448,7 @@ P00 DEBUG: Common::Exit::exitSafe=>: iExitCode = 0 full backup - abort backup - local (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --type=full --stanza=db backup --test --test-delay=5 --test-point=backup-start=y ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --test --test-delay=5 --test-point=backup-start=y --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --test --test-delay=5 --test-point=backup-start=y --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 DEBUG: Storage::Posix::Driver->new(): bFileSync = , bPathSync = @@ -521,7 +521,7 @@ P00 DEBUG: Common::Exit::exitSafe=>: iExitCode = 63 full backup - global stop (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 DEBUG: Storage::Posix::Driver->new(): bFileSync = , bPathSync = @@ -565,7 +565,7 @@ P00 DEBUG: Common::Exit::exitSafe=>: iExitCode = 0 full backup - stanza stop (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 DEBUG: Storage::Posix::Driver->new(): bFileSync = , bPathSync = @@ -618,7 +618,7 @@ P00 DEBUG: Common::Exit::exitSafe=>: iExitCode = 0 full backup - resume (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --force --checksum-page --type=full --stanza=db backup --test --test-delay=0.2 --test-point=backup-resume=y ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --checksum-page --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --test --test-delay=0.2 --test-point=backup-resume=y --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --checksum-page --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --test --test-delay=0.2 --test-point=backup-resume=y --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 DEBUG: Storage::Posix::Driver->new(): bFileSync = , bPathSync = @@ -718,8 +718,8 @@ P00 DEBUG: Protocol::Local::Process->queueJob(): iHostConfigIdx = 1, rParam P00 DEBUG: Protocol::Local::Process->queueJob(): iHostConfigIdx = 1, rParam = ([TEST_PATH]/db-master/db/base/base/1/PG_VERSION, pg_data/base/1/PG_VERSION, 3, 184473f470864e067ee3a22e64b47b0a1c356f29, 0, [BACKUP-FULL-2], 0, 3, [MODIFICATION-TIME-1], 1, [undef]), strKey = pg_data/base/1/PG_VERSION, strOp = backupFile, strQueue = pg_data P00 DEBUG: Protocol::Local::Process->queueJob(): iHostConfigIdx = 1, rParam = ([TEST_PATH]/db-master/db/base/PG_VERSION, pg_data/PG_VERSION, 3, [undef], 0, [BACKUP-FULL-2], 0, 3, [MODIFICATION-TIME-1], 1, [undef]), strKey = pg_data/PG_VERSION, strOp = backupFile, strQueue = pg_data P00 DEBUG: Protocol::Local::Process->hostConnect: start local process: iHostConfigIdx = 1, iHostIdx = 0, iHostProcessIdx = 0, iProcessId = 1, strHostType = db -P00 DEBUG: Protocol::Local::Master->new(): iProcessIdx = 1, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --host-id=1 --lock-path=[TEST_PATH]/db-master/lock --log-path=[TEST_PATH]/db-master/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --type=db local -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 3, iProtocolTimeout = 60, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --host-id=1 --lock-path=[TEST_PATH]/db-master/lock --log-path=[TEST_PATH]/db-master/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --type=db local, strId = local-1 process, strName = local +P00 DEBUG: Protocol::Local::Master->new(): iProcessIdx = 1, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --host-id=1 --lock-path=[TEST_PATH]/db-master/lock --log-path=[TEST_PATH]/db-master/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --type=db local +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 3, iProtocolTimeout = 60, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --host-id=1 --lock-path=[TEST_PATH]/db-master/lock --log-path=[TEST_PATH]/db-master/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --type=db local, strId = local-1 process, strName = local P00 DEBUG: Protocol::Local::Process->hostConnect=>: bResult = true P00 DEBUG: Protocol::Local::Process->init: init local process: iDirection = 1, iHostIdx = 0, iProcessId = 1, iQueueIdx = 0, iQueueLastIdx = 0 P00 DEBUG: Protocol::Local::Process->init=>: bResult = true @@ -945,7 +945,7 @@ db-version="9.4" full backup - invalid repo (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --repo-path=/bogus_path --log-level-console=detail --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/bogus_path --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/bogus_path --stanza=db --start-fast --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 ERROR: [073]: repo-path '/bogus_path' does not exist @@ -1397,7 +1397,7 @@ restore_command = '[BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf incr backup - invalid database version (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 ERROR: [051]: database version = 9.4, system-id 6353949018581704918 does not match backup version = 8.0, system-id = 6353949018581704918 @@ -1407,7 +1407,7 @@ P00 INFO: backup command end: aborted with exception [051] incr backup - invalid system id (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 ERROR: [051]: database version = 9.4, system-id 6353949018581704918 does not match backup version = 9.4, system-id = 6999999999999999999 @@ -1417,7 +1417,7 @@ P00 INFO: backup command end: aborted with exception [051] incr backup - invalid control version (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 ERROR: [051]: database control-version = 942, catalog-version 201409291 does not match backup control-version = 842, catalog-version = 201409291 @@ -1427,7 +1427,7 @@ P00 INFO: backup command end: aborted with exception [051] incr backup - invalid catalog version (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 ERROR: [051]: database control-version = 942, catalog-version 201409291 does not match backup control-version = 942, catalog-version = 197208141 @@ -1437,7 +1437,7 @@ P00 INFO: backup command end: aborted with exception [051] incr backup - invalid path in pg_tblspc (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] @@ -1448,7 +1448,7 @@ P00 INFO: backup command end: aborted with exception [069] incr backup - invalid relative tablespace is ../ (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] @@ -1459,7 +1459,7 @@ P00 INFO: backup command end: aborted with exception [071] incr backup - invalid relative tablespace is .. (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] @@ -1470,7 +1470,7 @@ P00 INFO: backup command end: aborted with exception [071] incr backup - invalid relative tablespace is ../../$PGDATA (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] @@ -1481,7 +1481,7 @@ P00 INFO: backup command end: aborted with exception [071] incr backup - invalid relative tablespace is ../../$PGDATA (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] @@ -1492,7 +1492,7 @@ P00 INFO: backup command end: aborted with exception [071] incr backup - tablespace link references a link (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] @@ -1503,7 +1503,7 @@ P00 INFO: backup command end: aborted with exception [070] incr backup - invalid relative tablespace in $PGDATA (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] @@ -1514,7 +1514,7 @@ P00 INFO: backup command end: aborted with exception [071] incr backup - $PGDATA is a substring of valid tblspc excluding / (file missing err expected) (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] @@ -1525,7 +1525,7 @@ P00 INFO: backup command end: aborted with exception [055] incr backup - invalid tablespace in $PGDATA (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] @@ -1536,7 +1536,7 @@ P00 INFO: backup command end: aborted with exception [071] incr backup - add tablespace 1 (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --test --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --test +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --test P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 DEBUG: Storage::Posix::Driver->new(): bFileSync = , bPathSync = @@ -1624,8 +1624,8 @@ P00 DEBUG: Backup::Backup->processManifest: reference pg_data/base/16384/PG P00 DEBUG: Backup::Backup->processManifest: reference pg_data/base/1/PG_VERSION to [BACKUP-FULL-2] P00 DEBUG: Backup::Backup->processManifest: reference pg_data/PG_VERSION to [BACKUP-FULL-2] P00 DEBUG: Protocol::Local::Process->hostConnect: start local process: iHostConfigIdx = 1, iHostIdx = 0, iHostProcessIdx = 0, iProcessId = 1, strHostType = db -P00 DEBUG: Protocol::Local::Master->new(): iProcessIdx = 1, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --host-id=1 --lock-path=[TEST_PATH]/db-master/lock --log-path=[TEST_PATH]/db-master/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --type=db local -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 3, iProtocolTimeout = 60, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --host-id=1 --lock-path=[TEST_PATH]/db-master/lock --log-path=[TEST_PATH]/db-master/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --type=db local, strId = local-1 process, strName = local +P00 DEBUG: Protocol::Local::Master->new(): iProcessIdx = 1, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --host-id=1 --lock-path=[TEST_PATH]/db-master/lock --log-path=[TEST_PATH]/db-master/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --type=db local +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 3, iProtocolTimeout = 60, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --host-id=1 --lock-path=[TEST_PATH]/db-master/lock --log-path=[TEST_PATH]/db-master/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --type=db local, strId = local-1 process, strName = local P00 DEBUG: Protocol::Local::Process->hostConnect=>: bResult = true P00 DEBUG: Protocol::Local::Process->init: init local process: iDirection = 1, iHostIdx = 0, iProcessId = 1, iQueueIdx = 0, iQueueLastIdx = 1 P00 DEBUG: Protocol::Local::Process->init=>: bResult = true @@ -1836,7 +1836,7 @@ db-version="9.4" incr backup - resume and add tablespace 2 (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --process-max=1 --stanza=db backup --test --test-delay=0.2 --test-point=backup-resume=y ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --test --test-delay=0.2 --test-point=backup-resume=y +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --test --test-delay=0.2 --test-point=backup-resume=y P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 DEBUG: Storage::Posix::Driver->new(): bFileSync = , bPathSync = @@ -1940,8 +1940,8 @@ P00 DEBUG: Backup::Backup->processManifest: reference pg_data/base/16384/PG P00 DEBUG: Backup::Backup->processManifest: reference pg_data/base/1/PG_VERSION to [BACKUP-FULL-2] P00 DEBUG: Backup::Backup->processManifest: reference pg_data/PG_VERSION to [BACKUP-FULL-2] P00 DEBUG: Protocol::Local::Process->hostConnect: start local process: iHostConfigIdx = 1, iHostIdx = 0, iHostProcessIdx = 0, iProcessId = 1, strHostType = db -P00 DEBUG: Protocol::Local::Master->new(): iProcessIdx = 1, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --host-id=1 --lock-path=[TEST_PATH]/db-master/lock --log-path=[TEST_PATH]/db-master/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --type=db local -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 3, iProtocolTimeout = 60, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --host-id=1 --lock-path=[TEST_PATH]/db-master/lock --log-path=[TEST_PATH]/db-master/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --type=db local, strId = local-1 process, strName = local +P00 DEBUG: Protocol::Local::Master->new(): iProcessIdx = 1, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --host-id=1 --lock-path=[TEST_PATH]/db-master/lock --log-path=[TEST_PATH]/db-master/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --type=db local +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 3, iProtocolTimeout = 60, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --host-id=1 --lock-path=[TEST_PATH]/db-master/lock --log-path=[TEST_PATH]/db-master/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --type=db local, strId = local-1 process, strName = local P00 DEBUG: Protocol::Local::Process->hostConnect=>: bResult = true P00 DEBUG: Protocol::Local::Process->init: init local process: iDirection = 1, iHostIdx = 0, iProcessId = 1, iQueueIdx = 0, iQueueLastIdx = 2 P00 DEBUG: Protocol::Local::Process->init=>: bResult = true @@ -2166,7 +2166,7 @@ db-version="9.4" diff backup - cannot resume - new diff (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --process-max=1 --type=diff --stanza=db backup --test --test-delay=0.2 --test-point=backup-noresume=y ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --test --test-delay=0.2 --test-point=backup-noresume=y --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --test --test-delay=0.2 --test-point=backup-noresume=y --type=diff P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 WARN: backup [BACKUP-INCR-2] missing manifest removed from backup.info @@ -2329,7 +2329,7 @@ db-version="9.4" diff backup - cannot resume - disabled / no repo link (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --no-resume --log-level-console=detail --process-max=1 --type=diff --stanza=db backup --test --test-delay=0.2 --test-point=backup-noresume=y ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --no-resume --stanza=db --start-fast --test --test-delay=0.2 --test-point=backup-noresume=y --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --no-resume --stanza=db --start-fast --test --test-delay=0.2 --test-point=backup-noresume=y --type=diff P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 WARN: backup [BACKUP-DIFF-1] missing manifest removed from backup.info @@ -2573,7 +2573,7 @@ restore_command = '[BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf incr backup - add files and remove tablespace 2 (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --process-max=1 --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base-2 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base-2 --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-DIFF-2], version = [VERSION-1] @@ -2733,7 +2733,7 @@ db-version="9.4" incr backup - update files - fail on missing backup.info (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base-2 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base-2 --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 ERROR: [055]: unable to open [TEST_PATH]/db-master/repo/backup/db/backup.info or [TEST_PATH]/db-master/repo/backup/db/backup.info.copy @@ -2744,7 +2744,7 @@ P00 INFO: backup command end: aborted with exception [055] stanza-create db - fail on backup directory missing backup.info (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base-2 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base-2 --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 ERROR: [055]: backup information missing HINT: use stanza-create --force to force the stanza data to be created. P00 INFO: stanza-create command end: aborted with exception [055] @@ -2767,7 +2767,7 @@ db-version="9.4" stanza-create db - create required data for stanza (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base-2 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base-2 --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/db-master/repo/backup/db/backup.info @@ -2810,7 +2810,7 @@ db-version="9.4" incr backup - update files (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base-2 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base-2 --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-INCR-3], version = [VERSION-1] @@ -2969,7 +2969,7 @@ db-version="9.4" diff backup - updates since last full (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --process-max=1 --type=diff --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base-2 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base-2 --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=diff P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] @@ -3136,7 +3136,7 @@ db-version="9.4" incr backup - remove files - but won't affect manifest (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup --test --test-delay=1 --test-point=manifest-build=y ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base-2 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --test --test-delay=1 --test-point=manifest-build=y +P00 INFO: backup command begin [BACKREST-VERSION]: --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base-2 --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --test --test-delay=1 --test-point=manifest-build=y P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-DIFF-3], version = [VERSION-1] @@ -3297,7 +3297,7 @@ db-version="9.4" diff backup - remove files during backup (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --process-max=1 --type=diff --stanza=db backup --test --test-delay=1 --test-point=manifest-build=y ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base-2 --hardlink --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --test --test-delay=1 --test-point=manifest-build=y --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base-2 --db-timeout=45 --hardlink --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --test --test-delay=1 --test-point=manifest-build=y --type=diff P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] @@ -3465,7 +3465,7 @@ db-version="9.4" full backup - update file (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base-2 --hardlink --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base-2 --db-timeout=45 --hardlink --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P01 INFO: backup file [TEST_PATH]/db-master/db/base-2/base/32768/33001 (64KB, 44%) checksum 6bf316f11d28c28914ea9be92c00de9bea6d9a6b @@ -3995,7 +3995,7 @@ P00 INFO: expire command end: completed successfully diff backup - add file (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=detail --checksum-page --type=diff --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --checksum-page --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base-2 --hardlink --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --checksum-page --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base-2 --db-timeout=45 --hardlink --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=diff P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-3], version = [VERSION-1] @@ -4464,7 +4464,7 @@ diff backup - config file warning on local (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=info 2>&1 --type=diff --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ WARN: [TEST_PATH]/db-master/pgbackrest.conf file contains invalid option 'bogus' -P00 INFO: backup command begin [BACKREST-VERSION]: --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base-2/base --hardlink --lock-path=[TEST_PATH]/db-master/lock --log-level-console=info --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base-2/base --db-timeout=45 --hardlink --lock-path=[TEST_PATH]/db-master/lock --log-level-console=info --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=diff P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-3], version = [VERSION-1] @@ -4620,7 +4620,7 @@ db-version="9.4" diff backup - option backup-standby reset - backup performed from master (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=info --backup-standby --type=diff --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --backup-standby --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base-2/base --hardlink --lock-path=[TEST_PATH]/db-master/lock --log-level-console=info --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --backup-standby --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base-2/base --db-timeout=45 --hardlink --lock-path=[TEST_PATH]/db-master/lock --log-level-console=info --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=diff P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 WARN: option backup-standby is enabled but standby is not properly configured - backups will be performed from the master diff --git a/test/expect/mock-all-002.log b/test/expect/mock-all-002.log index 3d041f108..a7e2458a7 100644 --- a/test/expect/mock-all-002.log +++ b/test/expect/mock-all-002.log @@ -14,7 +14,7 @@ info all stanzas - no stanzas exist (db-master host) stanza-create db - create required data for stanza (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/backup/repo/backup/db/backup.info @@ -52,7 +52,7 @@ db-version="9.4" full backup - error on identical link destinations (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=detail --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 ERROR: [070]: link [TEST_PATH]/db-master/db/base/postgresql.conf (../pg_config) references a subdirectory of or the same directory as link [TEST_PATH]/db-master/db/base/pg_config_bad (../../db/pg_config) @@ -61,7 +61,7 @@ P00 INFO: backup command end: aborted with exception [070] full backup - error on link to a link (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=detail --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 ERROR: [070]: link '[TEST_PATH]/db-master/db/base/postgresql.conf.bad' -> '../pg_config/postgresql.conf.link' cannot reference another link @@ -70,7 +70,7 @@ P00 INFO: backup command end: aborted with exception [070] full backup - create pg_stat link, pg_clog dir (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --manifest-save-threshold=3 --protocol-timeout=2 --db-timeout=1 --cmd-ssh=/usr/bin/ssh --db1-port=[PORT-1] --db1-socket-path =/test_socket_path --buffer-size=16384 --checksum-page --process-max=1 --repo-type=cifs --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=16384 --checksum-page --cmd-ssh=/usr/bin/ssh --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=1 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-port=[PORT-1] --db1-socket-path==/test_socket_path --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --manifest-save-threshold=3 --no-online --process-max=1 --protocol-timeout=2 --repo-path=[TEST_PATH]/backup/repo --repo-type=cifs --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=16384 --checksum-page --cmd-ssh=/usr/bin/ssh --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-port=[PORT-1] --db1-socket-path==/test_socket_path --db-timeout=1 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --manifest-save-threshold=3 --no-online --process-max=1 --protocol-timeout=2 --repo-path=[TEST_PATH]/backup/repo --repo-type=cifs --stanza=db --start-fast --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 DEBUG: Storage::Posix::Driver->new(): bFileSync = , bPathSync = @@ -93,8 +93,8 @@ P00 DEBUG: Db::dbObjectGet(): bMasterOnly = P00 DEBUG: Db->new(): iRemoteIdx = 1 P00 DEBUG: Protocol::Helper::protocolGet(): bCache = , iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = , strRemoteType = db P00 DEBUG: Protocol::Helper::protocolGet: create (cached) remote protocol -P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 16384, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 2, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=16384 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=1 --db1-path=[TEST_PATH]/db-master/db/base --db1-port=[PORT-1] --db1-socket-path==/test_socket_path --protocol-timeout=2 --repo-path=[TEST_PATH]/backup/repo --repo-type=cifs --stanza=db --type=db remote, strCommandSSH = /usr/bin/ssh, strHost = db-master, strUser = [USER-1] -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 16384, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 2, strCommand = /usr/bin/ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no [USER-1]@db-master '[BACKREST-BIN] --buffer-size=16384 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=1 --db1-path=[TEST_PATH]/db-master/db/base --db1-port=[PORT-1] --db1-socket-path==/test_socket_path --protocol-timeout=2 --repo-path=[TEST_PATH]/backup/repo --repo-type=cifs --stanza=db --type=db remote', strId = remote process on 'db-master', strName = remote +P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 16384, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 2, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=16384 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db1-port=[PORT-1] --db1-socket-path==/test_socket_path --db-timeout=1 --protocol-timeout=2 --repo-path=[TEST_PATH]/backup/repo --repo-type=cifs --stanza=db --type=db remote, strCommandSSH = /usr/bin/ssh, strHost = db-master, strUser = [USER-1] +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 16384, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 2, strCommand = /usr/bin/ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no [USER-1]@db-master '[BACKREST-BIN] --buffer-size=16384 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db1-port=[PORT-1] --db1-socket-path==/test_socket_path --db-timeout=1 --protocol-timeout=2 --repo-path=[TEST_PATH]/backup/repo --repo-type=cifs --stanza=db --type=db remote', strId = remote process on 'db-master', strName = remote P00 DEBUG: Db::dbObjectGet=>: iDbMasterIdx = 1, iDbStandbyIdx = [undef], oDbMaster = [object], oDbStandby = [undef] P00 DEBUG: Protocol::Helper::protocolGet(): bCache = , iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = , strRemoteType = db P00 DEBUG: Protocol::Helper::protocolGet: found cached protocol @@ -152,8 +152,8 @@ P00 DEBUG: Protocol::Local::Process->queueJob(): iHostConfigIdx = 1, rParam P00 DEBUG: Protocol::Local::Process->queueJob(): iHostConfigIdx = 1, rParam = ([TEST_PATH]/db-master/db/base/base/1/PG_VERSION, pg_data/base/1/PG_VERSION, 3, [undef], 0, [BACKUP-FULL-1], 0, 3, [MODIFICATION-TIME-1], 1, [undef]), strKey = pg_data/base/1/PG_VERSION, strOp = backupFile, strQueue = pg_data P00 DEBUG: Protocol::Local::Process->queueJob(): iHostConfigIdx = 1, rParam = ([TEST_PATH]/db-master/db/base/PG_VERSION, pg_data/PG_VERSION, 3, [undef], 0, [BACKUP-FULL-1], 0, 3, [MODIFICATION-TIME-1], 1, [undef]), strKey = pg_data/PG_VERSION, strOp = backupFile, strQueue = pg_data P00 DEBUG: Protocol::Local::Process->hostConnect: start local process: iHostConfigIdx = 1, iHostIdx = 0, iHostProcessIdx = 0, iProcessId = 1, strHostType = db -P00 DEBUG: Protocol::Local::Master->new(): iProcessIdx = 1, strCommand = [BACKREST-BIN] --buffer-size=16384 --cmd-ssh=/usr/bin/ssh --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=1 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-socket-path==/test_socket_path --db1-user=[USER-1] --host-id=1 --lock-path=[TEST_PATH]/backup/lock --log-path=[TEST_PATH]/backup/log --process=1 --protocol-timeout=2 --repo-path=[TEST_PATH]/backup/repo --repo-type=cifs --stanza=db --type=db local -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 16384, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 2, strCommand = [BACKREST-BIN] --buffer-size=16384 --cmd-ssh=/usr/bin/ssh --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=1 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-socket-path==/test_socket_path --db1-user=[USER-1] --host-id=1 --lock-path=[TEST_PATH]/backup/lock --log-path=[TEST_PATH]/backup/log --process=1 --protocol-timeout=2 --repo-path=[TEST_PATH]/backup/repo --repo-type=cifs --stanza=db --type=db local, strId = local-1 process, strName = local +P00 DEBUG: Protocol::Local::Master->new(): iProcessIdx = 1, strCommand = [BACKREST-BIN] --buffer-size=16384 --cmd-ssh=/usr/bin/ssh --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-socket-path==/test_socket_path --db-timeout=1 --db1-user=[USER-1] --host-id=1 --lock-path=[TEST_PATH]/backup/lock --log-path=[TEST_PATH]/backup/log --process=1 --protocol-timeout=2 --repo-path=[TEST_PATH]/backup/repo --repo-type=cifs --stanza=db --type=db local +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 16384, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 2, strCommand = [BACKREST-BIN] --buffer-size=16384 --cmd-ssh=/usr/bin/ssh --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-socket-path==/test_socket_path --db-timeout=1 --db1-user=[USER-1] --host-id=1 --lock-path=[TEST_PATH]/backup/lock --log-path=[TEST_PATH]/backup/log --process=1 --protocol-timeout=2 --repo-path=[TEST_PATH]/backup/repo --repo-type=cifs --stanza=db --type=db local, strId = local-1 process, strName = local P00 DEBUG: Protocol::Local::Process->hostConnect=>: bResult = true P00 DEBUG: Protocol::Local::Process->init: init local process: iDirection = 1, iHostIdx = 0, iProcessId = 1, iQueueIdx = 0, iQueueLastIdx = 0 P00 DEBUG: Protocol::Local::Process->init=>: bResult = true @@ -449,7 +449,7 @@ db-version="9.4" full backup - protocol timeout (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --protocol-timeout=1 --db-timeout=.1 --type=full --stanza=db backup --test --test-delay=1 --test-point=backup-start=y ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=.1 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=1 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --test --test-delay=1 --test-point=backup-start=y --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=.1 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=1 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --test --test-delay=1 --test-point=backup-start=y --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 DEBUG: Storage::Posix::Driver->new(): bFileSync = , bPathSync = @@ -478,8 +478,8 @@ P00 DEBUG: Db::dbObjectGet(): bMasterOnly = P00 DEBUG: Db->new(): iRemoteIdx = 1 P00 DEBUG: Protocol::Helper::protocolGet(): bCache = , iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = , strRemoteType = db P00 DEBUG: Protocol::Helper::protocolGet: create (cached) remote protocol -P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 1, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=.1 --db1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=1 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote, strCommandSSH = ssh, strHost = db-master, strUser = [USER-1] -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 1, strCommand = ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no [USER-1]@db-master '[BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=.1 --db1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=1 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote', strId = remote process on 'db-master', strName = remote +P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 1, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=.1 --protocol-timeout=1 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote, strCommandSSH = ssh, strHost = db-master, strUser = [USER-1] +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 1, strCommand = ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no [USER-1]@db-master '[BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=.1 --protocol-timeout=1 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote', strId = remote process on 'db-master', strName = remote P00 DEBUG: Db::dbObjectGet=>: iDbMasterIdx = 1, iDbStandbyIdx = [undef], oDbMaster = [object], oDbStandby = [undef] P00 DEBUG: Protocol::Helper::protocolGet(): bCache = , iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = , strRemoteType = db P00 DEBUG: Protocol::Helper::protocolGet: found cached protocol @@ -543,7 +543,7 @@ P00 DEBUG: Common::Exit::exitSafe=>: iExitCode = 0 full backup - abort backup - local (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --type=full --stanza=db backup --test --test-delay=5 --test-point=backup-start=y ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --test --test-delay=5 --test-point=backup-start=y --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --test --test-delay=5 --test-point=backup-start=y --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 DEBUG: Storage::Posix::Driver->new(): bFileSync = , bPathSync = @@ -576,8 +576,8 @@ P00 DEBUG: Db::dbObjectGet(): bMasterOnly = P00 DEBUG: Db->new(): iRemoteIdx = 1 P00 DEBUG: Protocol::Helper::protocolGet(): bCache = , iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = , strRemoteType = db P00 DEBUG: Protocol::Helper::protocolGet: create (cached) remote protocol -P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote, strCommandSSH = ssh, strHost = db-master, strUser = [USER-1] -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no [USER-1]@db-master '[BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote', strId = remote process on 'db-master', strName = remote +P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote, strCommandSSH = ssh, strHost = db-master, strUser = [USER-1] +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no [USER-1]@db-master '[BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote', strId = remote process on 'db-master', strName = remote P00 DEBUG: Db::dbObjectGet=>: iDbMasterIdx = 1, iDbStandbyIdx = [undef], oDbMaster = [object], oDbStandby = [undef] P00 DEBUG: Protocol::Helper::protocolGet(): bCache = , iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = , strRemoteType = db P00 DEBUG: Protocol::Helper::protocolGet: found cached protocol @@ -628,7 +628,7 @@ P00 DEBUG: Common::Exit::exitSafe=>: iExitCode = 63 full backup - global stop (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 DEBUG: Storage::Posix::Driver->new(): bFileSync = , bPathSync = @@ -661,8 +661,8 @@ P00 DEBUG: Db::dbObjectGet(): bMasterOnly = P00 DEBUG: Db->new(): iRemoteIdx = 1 P00 DEBUG: Protocol::Helper::protocolGet(): bCache = , iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = , strRemoteType = db P00 DEBUG: Protocol::Helper::protocolGet: create (cached) remote protocol -P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote, strCommandSSH = ssh, strHost = db-master, strUser = [USER-1] -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no [USER-1]@db-master '[BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote', strId = remote process on 'db-master', strName = remote +P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote, strCommandSSH = ssh, strHost = db-master, strUser = [USER-1] +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no [USER-1]@db-master '[BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote', strId = remote process on 'db-master', strName = remote P00 ERROR: [062]: raised from remote process on 'db-master': stop file exists for all stanzas P00 DEBUG: Protocol::Command::Master->close=>: iExitStatus = 0 P00 DEBUG: Common::Exit::exitSafe(): iExitCode = [undef], oException = [object], strSignal = [undef] @@ -700,7 +700,7 @@ P00 DEBUG: Common::Exit::exitSafe=>: iExitCode = 0 full backup - stanza stop (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 DEBUG: Storage::Posix::Driver->new(): bFileSync = , bPathSync = @@ -733,8 +733,8 @@ P00 DEBUG: Db::dbObjectGet(): bMasterOnly = P00 DEBUG: Db->new(): iRemoteIdx = 1 P00 DEBUG: Protocol::Helper::protocolGet(): bCache = , iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = , strRemoteType = db P00 DEBUG: Protocol::Helper::protocolGet: create (cached) remote protocol -P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote, strCommandSSH = ssh, strHost = db-master, strUser = [USER-1] -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no [USER-1]@db-master '[BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote', strId = remote process on 'db-master', strName = remote +P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote, strCommandSSH = ssh, strHost = db-master, strUser = [USER-1] +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no [USER-1]@db-master '[BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote', strId = remote process on 'db-master', strName = remote P00 ERROR: [062]: raised from remote process on 'db-master': stop file exists for stanza db P00 DEBUG: Protocol::Command::Master->close=>: iExitStatus = 0 P00 DEBUG: Common::Exit::exitSafe(): iExitCode = [undef], oException = [object], strSignal = [undef] @@ -794,7 +794,7 @@ P00 DEBUG: Common::Exit::exitSafe=>: iExitCode = 0 full backup - abort backup - remote (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --type=full --stanza=db backup --test --test-delay=5 --test-point=backup-start=y ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --test --test-delay=5 --test-point=backup-start=y --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --test --test-delay=5 --test-point=backup-start=y --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 DEBUG: Storage::Posix::Driver->new(): bFileSync = , bPathSync = @@ -827,8 +827,8 @@ P00 DEBUG: Db::dbObjectGet(): bMasterOnly = P00 DEBUG: Db->new(): iRemoteIdx = 1 P00 DEBUG: Protocol::Helper::protocolGet(): bCache = , iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = , strRemoteType = db P00 DEBUG: Protocol::Helper::protocolGet: create (cached) remote protocol -P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote, strCommandSSH = ssh, strHost = db-master, strUser = [USER-1] -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no [USER-1]@db-master '[BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote', strId = remote process on 'db-master', strName = remote +P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote, strCommandSSH = ssh, strHost = db-master, strUser = [USER-1] +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no [USER-1]@db-master '[BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote', strId = remote process on 'db-master', strName = remote P00 DEBUG: Db::dbObjectGet=>: iDbMasterIdx = 1, iDbStandbyIdx = [undef], oDbMaster = [object], oDbStandby = [undef] P00 DEBUG: Protocol::Helper::protocolGet(): bCache = , iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = , strRemoteType = db P00 DEBUG: Protocol::Helper::protocolGet: found cached protocol @@ -878,7 +878,7 @@ P00 DEBUG: Common::Exit::exitSafe=>: iExitCode = 63 full backup - global stop (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 DEBUG: Storage::Posix::Driver->new(): bFileSync = , bPathSync = @@ -908,7 +908,7 @@ P00 DEBUG: Common::Exit::exitSafe=>: iExitCode = 0 full backup - resume (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --force --checksum-page --type=full --stanza=db backup --test --test-delay=0.2 --test-point=backup-resume=y ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --checksum-page --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --test --test-delay=0.2 --test-point=backup-resume=y --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --checksum-page --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --test --test-delay=0.2 --test-point=backup-resume=y --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 DEBUG: Storage::Posix::Driver->new(): bFileSync = , bPathSync = @@ -939,8 +939,8 @@ P00 DEBUG: Db::dbObjectGet(): bMasterOnly = P00 DEBUG: Db->new(): iRemoteIdx = 1 P00 DEBUG: Protocol::Helper::protocolGet(): bCache = , iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = , strRemoteType = db P00 DEBUG: Protocol::Helper::protocolGet: create (cached) remote protocol -P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote, strCommandSSH = ssh, strHost = db-master, strUser = [USER-1] -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no [USER-1]@db-master '[BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote', strId = remote process on 'db-master', strName = remote +P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote, strCommandSSH = ssh, strHost = db-master, strUser = [USER-1] +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no [USER-1]@db-master '[BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote', strId = remote process on 'db-master', strName = remote P00 DEBUG: Db::dbObjectGet=>: iDbMasterIdx = 1, iDbStandbyIdx = [undef], oDbMaster = [object], oDbStandby = [undef] P00 DEBUG: Protocol::Helper::protocolGet(): bCache = , iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = , strRemoteType = db P00 DEBUG: Protocol::Helper::protocolGet: found cached protocol @@ -1008,8 +1008,8 @@ P00 DEBUG: Protocol::Local::Process->queueJob(): iHostConfigIdx = 1, rParam P00 DEBUG: Protocol::Local::Process->queueJob(): iHostConfigIdx = 1, rParam = ([TEST_PATH]/db-master/db/base/base/1/PG_VERSION, pg_data/base/1/PG_VERSION, 3, 184473f470864e067ee3a22e64b47b0a1c356f29, 0, [BACKUP-FULL-2], 0, 3, [MODIFICATION-TIME-1], 1, [undef]), strKey = pg_data/base/1/PG_VERSION, strOp = backupFile, strQueue = pg_data P00 DEBUG: Protocol::Local::Process->queueJob(): iHostConfigIdx = 1, rParam = ([TEST_PATH]/db-master/db/base/PG_VERSION, pg_data/PG_VERSION, 3, [undef], 0, [BACKUP-FULL-2], 0, 3, [MODIFICATION-TIME-1], 1, [undef]), strKey = pg_data/PG_VERSION, strOp = backupFile, strQueue = pg_data P00 DEBUG: Protocol::Local::Process->hostConnect: start local process: iHostConfigIdx = 1, iHostIdx = 0, iHostProcessIdx = 0, iProcessId = 1, strHostType = db -P00 DEBUG: Protocol::Local::Master->new(): iProcessIdx = 1, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --host-id=1 --lock-path=[TEST_PATH]/backup/lock --log-path=[TEST_PATH]/backup/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db local -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --host-id=1 --lock-path=[TEST_PATH]/backup/lock --log-path=[TEST_PATH]/backup/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db local, strId = local-1 process, strName = local +P00 DEBUG: Protocol::Local::Master->new(): iProcessIdx = 1, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --host-id=1 --lock-path=[TEST_PATH]/backup/lock --log-path=[TEST_PATH]/backup/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db local +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --host-id=1 --lock-path=[TEST_PATH]/backup/lock --log-path=[TEST_PATH]/backup/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db local, strId = local-1 process, strName = local P00 DEBUG: Protocol::Local::Process->hostConnect=>: bResult = true P00 DEBUG: Protocol::Local::Process->init: init local process: iDirection = 1, iHostIdx = 0, iProcessId = 1, iQueueIdx = 0, iQueueLastIdx = 0 P00 DEBUG: Protocol::Local::Process->init=>: bResult = true @@ -1256,7 +1256,7 @@ db-version="9.4" full backup - invalid repo (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --repo-path=/bogus_path --log-level-console=detail --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=/bogus_path --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=/bogus_path --stanza=db --start-fast --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 ERROR: [073]: repo-path '/bogus_path' does not exist @@ -1555,7 +1555,7 @@ restore_command = '[BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf incr backup - invalid database version (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 ERROR: [051]: database version = 9.4, system-id 6353949018581704918 does not match backup version = 8.0, system-id = 6353949018581704918 @@ -1565,7 +1565,7 @@ P00 INFO: backup command end: aborted with exception [051] incr backup - invalid system id (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 ERROR: [051]: database version = 9.4, system-id 6353949018581704918 does not match backup version = 9.4, system-id = 6999999999999999999 @@ -1575,7 +1575,7 @@ P00 INFO: backup command end: aborted with exception [051] incr backup - invalid control version (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 ERROR: [051]: database control-version = 942, catalog-version 201409291 does not match backup control-version = 842, catalog-version = 201409291 @@ -1585,7 +1585,7 @@ P00 INFO: backup command end: aborted with exception [051] incr backup - invalid catalog version (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 ERROR: [051]: database control-version = 942, catalog-version 201409291 does not match backup control-version = 942, catalog-version = 197208141 @@ -1595,7 +1595,7 @@ P00 INFO: backup command end: aborted with exception [051] incr backup - invalid path in pg_tblspc (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] @@ -1606,7 +1606,7 @@ P00 INFO: backup command end: aborted with exception [069] incr backup - invalid relative tablespace in $PGDATA (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] @@ -1617,7 +1617,7 @@ P00 INFO: backup command end: aborted with exception [071] incr backup - invalid tablespace in $PGDATA (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] @@ -1628,7 +1628,7 @@ P00 INFO: backup command end: aborted with exception [071] incr backup - add tablespace 1 (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --test --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --test +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --test P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 DEBUG: Storage::Posix::Driver->new(): bFileSync = , bPathSync = @@ -1657,8 +1657,8 @@ P00 DEBUG: Db::dbObjectGet(): bMasterOnly = P00 DEBUG: Db->new(): iRemoteIdx = 1 P00 DEBUG: Protocol::Helper::protocolGet(): bCache = , iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = , strRemoteType = db P00 DEBUG: Protocol::Helper::protocolGet: create (cached) remote protocol -P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote, strCommandSSH = ssh, strHost = db-master, strUser = [USER-1] -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no [USER-1]@db-master '[BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote', strId = remote process on 'db-master', strName = remote +P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote, strCommandSSH = ssh, strHost = db-master, strUser = [USER-1] +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no [USER-1]@db-master '[BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote', strId = remote process on 'db-master', strName = remote P00 DEBUG: Db::dbObjectGet=>: iDbMasterIdx = 1, iDbStandbyIdx = [undef], oDbMaster = [object], oDbStandby = [undef] P00 DEBUG: Protocol::Helper::protocolGet(): bCache = , iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = , strRemoteType = db P00 DEBUG: Protocol::Helper::protocolGet: found cached protocol @@ -1723,8 +1723,8 @@ P00 DEBUG: Backup::Backup->processManifest: reference pg_data/base/16384/PG P00 DEBUG: Backup::Backup->processManifest: reference pg_data/base/1/PG_VERSION to [BACKUP-FULL-2] P00 DEBUG: Backup::Backup->processManifest: reference pg_data/PG_VERSION to [BACKUP-FULL-2] P00 DEBUG: Protocol::Local::Process->hostConnect: start local process: iHostConfigIdx = 1, iHostIdx = 0, iHostProcessIdx = 0, iProcessId = 1, strHostType = db -P00 DEBUG: Protocol::Local::Master->new(): iProcessIdx = 1, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --host-id=1 --lock-path=[TEST_PATH]/backup/lock --log-path=[TEST_PATH]/backup/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db local -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --host-id=1 --lock-path=[TEST_PATH]/backup/lock --log-path=[TEST_PATH]/backup/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db local, strId = local-1 process, strName = local +P00 DEBUG: Protocol::Local::Master->new(): iProcessIdx = 1, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --host-id=1 --lock-path=[TEST_PATH]/backup/lock --log-path=[TEST_PATH]/backup/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db local +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --host-id=1 --lock-path=[TEST_PATH]/backup/lock --log-path=[TEST_PATH]/backup/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db local, strId = local-1 process, strName = local P00 DEBUG: Protocol::Local::Process->hostConnect=>: bResult = true P00 DEBUG: Protocol::Local::Process->init: init local process: iDirection = 1, iHostIdx = 0, iProcessId = 1, iQueueIdx = 0, iQueueLastIdx = 1 P00 DEBUG: Protocol::Local::Process->init=>: bResult = true @@ -1956,7 +1956,7 @@ db-version="9.4" incr backup - resume and add tablespace 2 (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --process-max=1 --stanza=db backup --test --test-delay=0.2 --test-point=backup-resume=y ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --test --test-delay=0.2 --test-point=backup-resume=y +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --test --test-delay=0.2 --test-point=backup-resume=y P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 DEBUG: Storage::Posix::Driver->new(): bFileSync = , bPathSync = @@ -1993,8 +1993,8 @@ P00 DEBUG: Db::dbObjectGet(): bMasterOnly = P00 DEBUG: Db->new(): iRemoteIdx = 1 P00 DEBUG: Protocol::Helper::protocolGet(): bCache = , iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = , strRemoteType = db P00 DEBUG: Protocol::Helper::protocolGet: create (cached) remote protocol -P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote, strCommandSSH = ssh, strHost = db-master, strUser = [USER-1] -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no [USER-1]@db-master '[BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote', strId = remote process on 'db-master', strName = remote +P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote, strCommandSSH = ssh, strHost = db-master, strUser = [USER-1] +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no [USER-1]@db-master '[BACKREST-BIN] --buffer-size=4194304 --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db remote', strId = remote process on 'db-master', strName = remote P00 DEBUG: Db::dbObjectGet=>: iDbMasterIdx = 1, iDbStandbyIdx = [undef], oDbMaster = [object], oDbStandby = [undef] P00 DEBUG: Protocol::Helper::protocolGet(): bCache = , iProcessIdx = [undef], iRemoteIdx = 1, strBackRestBin = [undef], strCommand = , strRemoteType = db P00 DEBUG: Protocol::Helper::protocolGet: found cached protocol @@ -2067,8 +2067,8 @@ P00 DEBUG: Backup::Backup->processManifest: reference pg_data/base/16384/PG P00 DEBUG: Backup::Backup->processManifest: reference pg_data/base/1/PG_VERSION to [BACKUP-FULL-2] P00 DEBUG: Backup::Backup->processManifest: reference pg_data/PG_VERSION to [BACKUP-FULL-2] P00 DEBUG: Protocol::Local::Process->hostConnect: start local process: iHostConfigIdx = 1, iHostIdx = 0, iHostProcessIdx = 0, iProcessId = 1, strHostType = db -P00 DEBUG: Protocol::Local::Master->new(): iProcessIdx = 1, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --host-id=1 --lock-path=[TEST_PATH]/backup/lock --log-path=[TEST_PATH]/backup/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db local -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --host-id=1 --lock-path=[TEST_PATH]/backup/lock --log-path=[TEST_PATH]/backup/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db local, strId = local-1 process, strName = local +P00 DEBUG: Protocol::Local::Master->new(): iProcessIdx = 1, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --host-id=1 --lock-path=[TEST_PATH]/backup/lock --log-path=[TEST_PATH]/backup/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db local +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = [BACKREST-BIN] --command=backup --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --host-id=1 --lock-path=[TEST_PATH]/backup/lock --log-path=[TEST_PATH]/backup/log --process=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --type=db local, strId = local-1 process, strName = local P00 DEBUG: Protocol::Local::Process->hostConnect=>: bResult = true P00 DEBUG: Protocol::Local::Process->init: init local process: iDirection = 1, iHostIdx = 0, iProcessId = 1, iQueueIdx = 0, iQueueLastIdx = 2 P00 DEBUG: Protocol::Local::Process->init=>: bResult = true @@ -2314,7 +2314,7 @@ db-version="9.4" diff backup - cannot resume - new diff (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=detail --process-max=1 --type=diff --stanza=db backup --test --test-delay=0.2 --test-point=backup-noresume=y ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --test --test-delay=0.2 --test-point=backup-noresume=y --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --test --test-delay=0.2 --test-point=backup-noresume=y --type=diff P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 WARN: backup [BACKUP-INCR-2] missing manifest removed from backup.info @@ -2496,7 +2496,7 @@ db-version="9.4" diff backup - cannot resume - disabled / no repo link (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --no-resume --log-level-console=detail --process-max=1 --type=diff --stanza=db backup --test --test-delay=0.2 --test-point=backup-noresume=y ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --no-resume --stanza=db --start-fast --test --test-delay=0.2 --test-point=backup-noresume=y --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --no-resume --stanza=db --start-fast --test --test-delay=0.2 --test-point=backup-noresume=y --type=diff P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 WARN: backup [BACKUP-DIFF-1] missing manifest removed from backup.info @@ -2759,7 +2759,7 @@ restore_command = '[BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf incr backup - add files and remove tablespace 2 (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=detail --process-max=1 --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2 --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-DIFF-2], version = [VERSION-1] @@ -2938,7 +2938,7 @@ db-version="9.4" stanza-create db - create required data for stanza (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2 --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2 --db-timeout=45 --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/backup/repo/backup/db/backup.info @@ -2981,7 +2981,7 @@ db-version="9.4" incr backup - update files (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2 --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-INCR-3], version = [VERSION-1] @@ -3159,7 +3159,7 @@ db-version="9.4" diff backup - updates since last full (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=detail --process-max=1 --type=diff --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2 --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=diff P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] @@ -3345,7 +3345,7 @@ db-version="9.4" incr backup - remove files - but won't affect manifest (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=detail --stanza=db backup --test --test-delay=1 --test-point=manifest-build=y ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --test --test-delay=1 --test-point=manifest-build=y +P00 INFO: backup command begin [BACKREST-VERSION]: --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2 --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --test --test-delay=1 --test-point=manifest-build=y P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-DIFF-3], version = [VERSION-1] @@ -3525,7 +3525,7 @@ db-version="9.4" diff backup - remove files during backup (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=detail --process-max=1 --type=diff --stanza=db backup --test --test-delay=1 --test-point=manifest-build=y ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2 --db1-user=[USER-1] --hardlink --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --test --test-delay=1 --test-point=manifest-build=y --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2 --db-timeout=45 --db1-user=[USER-1] --hardlink --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --process-max=1 --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --test --test-delay=1 --test-point=manifest-build=y --type=diff P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] @@ -3712,7 +3712,7 @@ db-version="9.4" full backup - update file (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=detail --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2 --db1-user=[USER-1] --hardlink --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2 --db-timeout=45 --db1-user=[USER-1] --hardlink --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=full P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P01 INFO: backup file db-master:[TEST_PATH]/db-master/db/base-2/base/32768/33001 (64KB, 44%) checksum 6bf316f11d28c28914ea9be92c00de9bea6d9a6b @@ -4261,7 +4261,7 @@ P00 INFO: expire command end: completed successfully diff backup - add file (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=detail --checksum-page --type=diff --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --checksum-page --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2 --db1-user=[USER-1] --hardlink --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --checksum-page --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2 --db-timeout=45 --db1-user=[USER-1] --hardlink --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=diff P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-3], version = [VERSION-1] @@ -4728,7 +4728,7 @@ info bogus stanza - bogus stanza (db-master host) diff backup - config file not validated on remote (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=info --type=diff --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2/base --db1-user=[USER-1] --hardlink --lock-path=[TEST_PATH]/backup/lock --log-level-console=info --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2/base --db-timeout=45 --db1-user=[USER-1] --hardlink --lock-path=[TEST_PATH]/backup/lock --log-level-console=info --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=diff P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-3], version = [VERSION-1] @@ -4903,7 +4903,7 @@ db-version="9.4" diff backup - option backup-standby reset - backup performed from master (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=info --backup-standby --type=diff --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --backup-standby --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2/base --db1-user=[USER-1] --hardlink --lock-path=[TEST_PATH]/backup/lock --log-level-console=info --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --backup-standby --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2/base --db-timeout=45 --db1-user=[USER-1] --hardlink --lock-path=[TEST_PATH]/backup/lock --log-level-console=info --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db --start-fast --type=diff P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 WARN: option backup-standby is enabled but standby is not properly configured - backups will be performed from the master diff --git a/test/expect/mock-all-003.log b/test/expect/mock-all-003.log index f85420dee..59ed4c6f5 100644 --- a/test/expect/mock-all-003.log +++ b/test/expect/mock-all-003.log @@ -14,7 +14,7 @@ info all stanzas - no stanzas exist (db-master host) stanza-create db - create required data for stanza (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: /backup/db/backup.info @@ -1410,7 +1410,7 @@ db-version="9.4" stanza-create db - create required data for stanza (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2 --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2 --db-timeout=45 --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: /backup/db/backup.info @@ -3058,7 +3058,7 @@ info bogus stanza - bogus stanza (db-master host) diff backup - config file not validated on remote (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=info --type=diff --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=info --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --process-max=2 --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db --start-fast --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=info --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --process-max=2 --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db --start-fast --type=diff P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-3], version = [VERSION-1] @@ -3241,7 +3241,7 @@ db-version="9.4" diff backup - option backup-standby reset - backup performed from master (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=info --backup-standby --type=diff --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --backup-standby --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=info --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --process-max=2 --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db --start-fast --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --backup-standby --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base-2/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=info --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --process-max=2 --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db --start-fast --type=diff P00 WARN: option retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'retention-full' to the maximum. P00 WARN: option backup-standby is enabled but standby is not properly configured - backups will be performed from the master diff --git a/test/expect/mock-archive-001.log b/test/expect/mock-archive-001.log index 59c81c69a..c08135b42 100644 --- a/test/expect/mock-archive-001.log +++ b/test/expect/mock-archive-001.log @@ -3,7 +3,7 @@ run 001 - rmt 0, s3 0 > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 ERROR: [055]: unable to open [TEST_PATH]/db-master/repo/archive/db/archive.info or [TEST_PATH]/db-master/repo/archive/db/archive.info.copy P00 ERROR: [055]: archive.info does not exist but is required to push/get WAL segments HINT: is archive_command configured in postgresql.conf? @@ -13,7 +13,7 @@ P00 INFO: archive-push command end: aborted with exception [055] > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-get 000000010000000100000001 [TEST_PATH]/db-master/db/base/pg_xlog/RECOVERYXLOG ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-get command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-get command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: get WAL segment 000000010000000100000001 P00 ERROR: [055]: unable to open [TEST_PATH]/db-master/repo/archive/db/archive.info or [TEST_PATH]/db-master/repo/archive/db/archive.info.copy P00 ERROR: [055]: archive.info does not exist but is required to push/get WAL segments @@ -25,7 +25,7 @@ P00 INFO: archive-get command end: aborted with exception [055] stanza-create db - stanza create (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/db-master/repo/backup/db/backup.info @@ -62,7 +62,7 @@ db-version="9.4" > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push --log-level-console=debug [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 DEBUG: Archive::Push::Push->process(): strWalPathFile = [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 P00 DEBUG: Archive::Push::File::archivePushFile(): bCompress = false, iCompressLevel = 3, strWalFile = 000000010000000100000001, strWalPath = [TEST_PATH]/db-master/db/base/pg_xlog P00 DEBUG: Storage::Posix::Driver->new(): bFileSync = , bPathSync = @@ -100,7 +100,7 @@ P00 DEBUG: Common::Exit::exitSafe=>: iExitCode = 0 > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-get --log-level-console=debug 000000010000000100000001 [TEST_PATH]/db-master/db/base/pg_xlog/RECOVERYXLOG ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-get command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-get command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db 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::Posix::Driver->new(): bFileSync = , bPathSync = @@ -137,20 +137,20 @@ P00 DEBUG: Common::Exit::exitSafe=>: iExitCode = 0 > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push --compress --archive-async --process-max=2 [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --archive-async --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --process-max=2 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --spool-path=[TEST_PATH]/db-master/spool --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --archive-async --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --process-max=2 --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --spool-path=[TEST_PATH]/db-master/spool --stanza=db P00 INFO: pushed WAL segment 000000010000000100000002 asynchronously P00 INFO: archive-push command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 ERROR: [044]: WAL segment version 9.4 does not match archive version 8.0 HINT: are you archiving to the correct stanza? P00 INFO: archive-push command end: aborted with exception [044] > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-get 000000010000000100000001 [TEST_PATH]/db-master/db/base/pg_xlog/RECOVERYXLOG ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-get command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-get command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: get WAL segment 000000010000000100000001 P00 ERROR: [044]: WAL segment version 9.4 does not match archive version 8.0 HINT: are you archiving to the correct stanza? @@ -158,14 +158,14 @@ P00 INFO: archive-get command end: aborted with exception [044] > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 ERROR: [044]: WAL segment system-id 6353949018581704918 does not match archive system-id 5000900090001855000 HINT: are you archiving to the correct stanza? P00 INFO: archive-push command end: aborted with exception [044] > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-get 000000010000000100000001 [TEST_PATH]/db-master/db/base/pg_xlog/RECOVERYXLOG ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-get command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-get command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: get WAL segment 000000010000000100000001 P00 ERROR: [044]: WAL segment system-id 6353949018581704918 does not match archive system-id 5000900090001855000 HINT: are you archiving to the correct stanza? @@ -179,13 +179,13 @@ P00 INFO: stop command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 ERROR: [062]: stop file exists for stanza db P00 INFO: archive-push command end: aborted with exception [062] > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-get 000000010000000100000001 [TEST_PATH]/db-master/db/base/pg_xlog/RECOVERYXLOG ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-get command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-get command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: get WAL segment 000000010000000100000001 P00 ERROR: [062]: stop file exists for stanza db P00 INFO: archive-get command end: aborted with exception [062] @@ -198,7 +198,7 @@ P00 INFO: start command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 WARN: WAL segment 000000010000000100000002 already exists in the archive with the same checksum HINT: this is valid in some recovery scenarios but may also indicate a problem. P00 INFO: pushed WAL segment 000000010000000100000002 @@ -206,25 +206,25 @@ P00 INFO: archive-push command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 ERROR: [045]: WAL segment 000000010000000100000002 already exists in the archive P00 INFO: archive-push command end: aborted with exception [045] > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-get 000000010000000100000002 [TEST_PATH]/db-master/db/base/pg_xlog/RECOVERYXLOG ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-get command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-get command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: get WAL segment 000000010000000100000002 P00 INFO: archive-get command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: pushed WAL segment 000000010000000100000002.partial P00 INFO: archive-push command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 WARN: WAL segment 000000010000000100000002.partial already exists in the archive with the same checksum HINT: this is valid in some recovery scenarios but may also indicate a problem. P00 INFO: pushed WAL segment 000000010000000100000002.partial @@ -232,6 +232,6 @@ P00 INFO: archive-push command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 ERROR: [045]: WAL segment 000000010000000100000002.partial already exists in the archive P00 INFO: archive-push command end: aborted with exception [045] diff --git a/test/expect/mock-archive-002.log b/test/expect/mock-archive-002.log index 0119c6e5a..85fb67b86 100644 --- a/test/expect/mock-archive-002.log +++ b/test/expect/mock-archive-002.log @@ -3,7 +3,7 @@ run 002 - rmt 1, s3 0 > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db P00 ERROR: [055]: raised from remote process on 'backup': archive.info does not exist but is required to push/get WAL segments HINT: is archive_command configured in postgresql.conf? HINT: has a stanza-create been performed? @@ -12,7 +12,7 @@ P00 INFO: archive-push command end: aborted with exception [055] > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-get 000000010000000100000001 [TEST_PATH]/db-master/db/base/pg_xlog/RECOVERYXLOG ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-get command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db +P00 INFO: archive-get command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db P00 INFO: get WAL segment 000000010000000100000001 P00 ERROR: [055]: raised from remote process on 'backup': archive.info does not exist but is required to push/get WAL segments HINT: is archive_command configured in postgresql.conf? @@ -23,7 +23,7 @@ P00 INFO: archive-get command end: aborted with exception [055] stanza-create db - stanza create (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-2] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-2] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/backup/repo/backup/db/backup.info @@ -60,13 +60,13 @@ db-version="9.4" > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push --cmd-ssh=/usr/bin/ssh --log-level-console=debug [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --cmd-ssh=/usr/bin/ssh --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --cmd-ssh=/usr/bin/ssh --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db P00 DEBUG: Archive::Push::Push->process(): strWalPathFile = [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 P00 DEBUG: Archive::Push::File::archivePushFile(): bCompress = false, iCompressLevel = 3, strWalFile = 000000010000000100000001, strWalPath = [TEST_PATH]/db-master/db/base/pg_xlog P00 DEBUG: Protocol::Helper::protocolGet(): bCache = , iProcessIdx = [undef], iRemoteIdx = <1>, strBackRestBin = [undef], strCommand = , strRemoteType = backup P00 DEBUG: Protocol::Helper::protocolGet: create (cached) remote protocol -P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=archive-push --compress-level=3 --compress-level-network=1 --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, strCommandSSH = /usr/bin/ssh, strHost = backup, strUser = [USER-1] -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = /usr/bin/ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no backrest@backup '[BACKREST-BIN] --buffer-size=4194304 --command=archive-push --compress-level=3 --compress-level-network=1 --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 = remote process on 'backup', strName = remote +P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=archive-push --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --stanza=db --type=backup remote, strCommandSSH = /usr/bin/ssh, strHost = backup, strUser = [USER-1] +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = /usr/bin/ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no backrest@backup '[BACKREST-BIN] --buffer-size=4194304 --command=archive-push --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --stanza=db --type=backup remote', strId = remote process on 'backup', strName = remote P00 DEBUG: Protocol::Storage::Remote->new(): oProtocol = [object] P00 DEBUG: Archive::Common::walInfo(): strWalFile = [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 P00 DEBUG: Archive::Common::walInfo=>: strDbVersion = 9.4, ullDbSysId = 6353949018581704918 @@ -95,13 +95,13 @@ P00 DEBUG: Common::Exit::exitSafe=>: iExitCode = 0 > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-get --log-level-console=debug 000000010000000100000001 [TEST_PATH]/db-master/db/base/pg_xlog/RECOVERYXLOG ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-get command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db +P00 INFO: archive-get command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db 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: Protocol::Helper::protocolGet(): bCache = , iProcessIdx = [undef], iRemoteIdx = <1>, strBackRestBin = [undef], strCommand = , strRemoteType = backup P00 DEBUG: Protocol::Helper::protocolGet: create (cached) remote protocol -P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=archive-get --compress-level=3 --compress-level-network=1 --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, strCommandSSH = ssh, strHost = backup, strUser = [USER-1] -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, 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=3 --compress-level-network=1 --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 = remote process on 'backup', strName = remote +P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=archive-get --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --stanza=db --type=backup remote, strCommandSSH = ssh, strHost = backup, strUser = [USER-1] +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, 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=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --stanza=db --type=backup remote', strId = remote process on 'backup', 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 @@ -129,20 +129,20 @@ P00 DEBUG: Common::Exit::exitSafe=>: iExitCode = 0 > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push --compress --archive-async --process-max=2 [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --archive-async --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --process-max=2 --protocol-timeout=60 --spool-path=[TEST_PATH]/db-master/spool --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --archive-async --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --process-max=2 --protocol-timeout=60 --spool-path=[TEST_PATH]/db-master/spool --stanza=db P00 INFO: pushed WAL segment 000000010000000100000002 asynchronously P00 INFO: archive-push command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db P00 ERROR: [044]: raised from remote process on 'backup': WAL segment version 9.4 does not match archive version 8.0 HINT: are you archiving to the correct stanza? P00 INFO: archive-push command end: aborted with exception [044] > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-get 000000010000000100000001 [TEST_PATH]/db-master/db/base/pg_xlog/RECOVERYXLOG ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-get command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db +P00 INFO: archive-get command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db P00 INFO: get WAL segment 000000010000000100000001 P00 ERROR: [044]: raised from remote process on 'backup': WAL segment version 9.4 does not match archive version 8.0 HINT: are you archiving to the correct stanza? @@ -150,14 +150,14 @@ P00 INFO: archive-get command end: aborted with exception [044] > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db P00 ERROR: [044]: raised from remote process on 'backup': WAL segment system-id 6353949018581704918 does not match archive system-id 5000900090001855000 HINT: are you archiving to the correct stanza? P00 INFO: archive-push command end: aborted with exception [044] > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-get 000000010000000100000001 [TEST_PATH]/db-master/db/base/pg_xlog/RECOVERYXLOG ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-get command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db +P00 INFO: archive-get command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db P00 INFO: get WAL segment 000000010000000100000001 P00 ERROR: [044]: raised from remote process on 'backup': WAL segment system-id 6353949018581704918 does not match archive system-id 5000900090001855000 HINT: are you archiving to the correct stanza? @@ -171,13 +171,13 @@ P00 INFO: stop command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db P00 ERROR: [062]: stop file exists for stanza db P00 INFO: archive-push command end: aborted with exception [062] > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-get 000000010000000100000001 [TEST_PATH]/db-master/db/base/pg_xlog/RECOVERYXLOG ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-get command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db +P00 INFO: archive-get command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db P00 INFO: get WAL segment 000000010000000100000001 P00 ERROR: [062]: stop file exists for stanza db P00 INFO: archive-get command end: aborted with exception [062] @@ -190,7 +190,7 @@ P00 INFO: start command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db P00 WARN: WAL segment 000000010000000100000002 already exists in the archive with the same checksum HINT: this is valid in some recovery scenarios but may also indicate a problem. P00 INFO: pushed WAL segment 000000010000000100000002 @@ -198,25 +198,25 @@ P00 INFO: archive-push command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db P00 ERROR: [045]: WAL segment 000000010000000100000002 already exists in the archive P00 INFO: archive-push command end: aborted with exception [045] > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-get --cmd-ssh=/usr/bin/ssh 000000010000000100000002 [TEST_PATH]/db-master/db/base/pg_xlog/RECOVERYXLOG ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-get command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --cmd-ssh=/usr/bin/ssh --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db +P00 INFO: archive-get command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --cmd-ssh=/usr/bin/ssh --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db P00 INFO: get WAL segment 000000010000000100000002 P00 INFO: archive-get command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db P00 INFO: pushed WAL segment 000000010000000100000002.partial P00 INFO: archive-push command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db P00 WARN: WAL segment 000000010000000100000002.partial already exists in the archive with the same checksum HINT: this is valid in some recovery scenarios but may also indicate a problem. P00 INFO: pushed WAL segment 000000010000000100000002.partial @@ -224,6 +224,6 @@ P00 INFO: archive-push command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-1] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db P00 ERROR: [045]: WAL segment 000000010000000100000002.partial already exists in the archive P00 INFO: archive-push command end: aborted with exception [045] diff --git a/test/expect/mock-archive-003.log b/test/expect/mock-archive-003.log index d1616bca6..07b42ed74 100644 --- a/test/expect/mock-archive-003.log +++ b/test/expect/mock-archive-003.log @@ -18,7 +18,7 @@ P00 ERROR: [055]: raised from remote process on 'backup': archive.info does not stanza-create db - stanza create (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: /backup/db/backup.info diff --git a/test/expect/mock-stanza-001.log b/test/expect/mock-stanza-001.log index 962cdc200..68dab6870 100644 --- a/test/expect/mock-stanza-001.log +++ b/test/expect/mock-stanza-001.log @@ -4,14 +4,14 @@ run 001 - remote 0, s3 0 stanza-create db - fail on missing control file (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 ERROR: [041]: unable to open [TEST_PATH]/db-master/db/base/global/pg_control P00 INFO: stanza-create command end: aborted with exception [041] stanza-upgrade db - fail on stanza not initialized since archive.info is missing (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-upgrade ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 ERROR: [055]: archive.info does not exist but is required to push/get WAL segments HINT: is archive_command configured in postgresql.conf? HINT: has a stanza-create been performed? @@ -21,7 +21,7 @@ P00 INFO: stanza-upgrade command end: aborted with exception [055] stanza-create db - successfully create the stanza (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/db-master/repo/backup/db/backup.info @@ -59,7 +59,7 @@ db-version="9.3" stanza-create db - successful rerun of stanza-create (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/db-master/repo/backup/db/backup.info @@ -97,7 +97,7 @@ db-version="9.3" stanza-upgrade db - already up to date (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-upgrade ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: the stanza data is already up to date P00 INFO: stanza-upgrade command end: completed successfully @@ -135,7 +135,7 @@ db-version="9.3" > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 DEBUG: Archive::Push::Push->process(): strWalPathFile = [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 P00 DEBUG: Archive::Push::File::archivePushFile(): bCompress = true, iCompressLevel = 3, strWalFile = 000000010000000100000001, strWalPath = [TEST_PATH]/db-master/db/base/pg_xlog P00 DEBUG: Storage::Posix::Driver->new(): bFileSync = , bPathSync = @@ -174,7 +174,7 @@ P00 DEBUG: Common::Exit::exitSafe=>: iExitCode = 0 stanza-create db - fail on archive info file missing from non-empty dir (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 ERROR: [055]: archive information missing HINT: use stanza-create --force to force the stanza data to be created. P00 INFO: stanza-create command end: aborted with exception [055] @@ -199,7 +199,7 @@ db-version="9.3" stanza-create db - gunzip fail on forced stanza-create (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 WARN: unable to create stanza 'db' P00 ERROR: [041]: unable to open '[TEST_PATH]/db-master/repo/archive/db/9.3-1/0000000100000001/000000010000000100000001-f5035e2c3b83a9c32660f959b23451e78f7438f7.gz': Permission denied P00 INFO: stanza-create command end: aborted with exception [041] @@ -224,7 +224,7 @@ db-version="9.3" stanza-create db - force create archive.info from gz file (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/db-master/repo/backup/db/backup.info @@ -262,7 +262,7 @@ db-version="9.3" stanza-create db - repeat create (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/db-master/repo/backup/db/backup.info @@ -300,7 +300,7 @@ db-version="9.3" stanza-create db - hash check fails requiring force (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 WARN: unable to create stanza 'db' P00 ERROR: [028]: archive info file invalid HINT: use stanza-upgrade if the database has been upgraded or use --force @@ -341,7 +341,7 @@ db-version="8.0" stanza-create db - use force to overwrite the invalid file (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/db-master/repo/backup/db/backup.info @@ -379,7 +379,7 @@ db-version="9.3" stanza-create db - fail on database mismatch without force option (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 WARN: unable to create stanza 'db' P00 ERROR: [028]: archive info file invalid HINT: use stanza-upgrade if the database has been upgraded or use --force @@ -420,7 +420,7 @@ db-version="9.3" stanza-create db - force create archive.info from uncompressed file (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/db-master/repo/backup/db/backup.info @@ -458,7 +458,7 @@ db-version="9.3" stanza-create db - force with missing WAL archive file (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/db-master/repo/backup/db/backup.info @@ -496,7 +496,7 @@ db-version="9.3" stanza-create db - force with missing WAL archive directory (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 WARN: found empty directory [TEST_PATH]/db-master/repo/archive/db/9.3-1 P00 INFO: stanza-create command end: completed successfully @@ -541,7 +541,7 @@ P00 ERROR: [044]: WAL segment version 9.4 does not match archive version 9.3 stanza-upgrade db - successful upgrade creates additional history (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-upgrade ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: stanza-upgrade command end: completed successfully + supplemental file: [TEST_PATH]/db-master/repo/backup/db/backup.info @@ -584,7 +584,7 @@ db-version="9.4" stanza-create db - use force to recreate the stanza producing mismatched info history but same current db-id (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 WARN: found empty directory [TEST_PATH]/db-master/repo/archive/db/9.3-1 P00 INFO: stanza-create command end: completed successfully @@ -624,7 +624,7 @@ db-version="9.4" stanza-create db - use force to recreate the stanza producing mismatched db-id (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 WARN: found empty directory [TEST_PATH]/db-master/repo/archive/db/9.3-1 P00 INFO: stanza-create command end: completed successfully @@ -663,7 +663,7 @@ db-version="9.4" full backup - create first full backup (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --retention-full=2 --no-online --log-level-console=detail --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --retention-full=2 --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --retention-full=2 --stanza=db --start-fast --type=full P01 INFO: backup file [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 (16MB, 99%) checksum 1e34fa1c833090d94b9bb14f2a8d3153dca6ea27 P01 INFO: backup file [TEST_PATH]/db-master/db/base/global/pg_control (8KB, 100%) checksum 89373d9f2973502940de06bc5212489df3f8a912 P01 INFO: backup file [TEST_PATH]/db-master/db/base/pg_xlog/archive_status/000000010000000100000001.ready (0B, 100%) @@ -699,7 +699,7 @@ start-fast=y stanza-create db - fail no force to recreate the stanza from backups (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 ERROR: [055]: backup information missing HINT: use stanza-create --force to force the stanza data to be created. P00 INFO: stanza-create command end: aborted with exception [055] @@ -722,7 +722,7 @@ db-version="9.4" stanza-create db - use force to recreate the stanza from backups (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/db-master/repo/backup/db/backup.info @@ -763,7 +763,7 @@ db-version="9.4" stanza-upgrade db - successfully upgrade with XX.Y-Z (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-upgrade ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: stanza-upgrade command end: completed successfully + supplemental file: [TEST_PATH]/db-master/repo/backup/db/backup.info @@ -810,7 +810,7 @@ db-version="9.5" diff backup - diff changed to full backup (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --retention-full=2 --no-online --log-level-console=detail --type=diff --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --retention-full=2 --stanza=db --start-fast --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/db-master/repo --retention-full=2 --stanza=db --start-fast --type=diff P00 WARN: no prior backup exists, diff backup has been changed to full P01 INFO: backup file [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 (16MB, 99%) checksum 15b1a1a35c26b17570aca7920980f0ad11c6d858 P01 INFO: backup file [TEST_PATH]/db-master/db/base/global/pg_control (8KB, 100%) checksum e28bf39d0a56bf9fabd4049b329fcae8878bfec6 diff --git a/test/expect/mock-stanza-002.log b/test/expect/mock-stanza-002.log index 664a52148..680079d34 100644 --- a/test/expect/mock-stanza-002.log +++ b/test/expect/mock-stanza-002.log @@ -4,14 +4,14 @@ run 002 - remote 1, s3 0 stanza-create db - fail on missing control file (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 ERROR: [041]: raised from remote process on 'db-master': unable to open [TEST_PATH]/db-master/db/base/global/pg_control P00 INFO: stanza-create command end: aborted with exception [041] stanza-upgrade db - fail on stanza not initialized since archive.info is missing (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-upgrade ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 ERROR: [055]: archive.info does not exist but is required to push/get WAL segments HINT: is archive_command configured in postgresql.conf? HINT: has a stanza-create been performed? @@ -21,7 +21,7 @@ P00 INFO: stanza-upgrade command end: aborted with exception [055] stanza-create db - successfully create the stanza (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/backup/repo/backup/db/backup.info @@ -59,7 +59,7 @@ db-version="9.3" stanza-create db - successful rerun of stanza-create (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/backup/repo/backup/db/backup.info @@ -97,7 +97,7 @@ db-version="9.3" stanza-upgrade db - already up to date (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-upgrade ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 INFO: the stanza data is already up to date P00 INFO: stanza-upgrade command end: completed successfully @@ -135,13 +135,13 @@ db-version="9.3" > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-2] --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --backup-cmd=[BACKREST-BIN] --backup-config=[TEST_PATH]/backup/pgbackrest.conf --backup-host=backup --backup-user=[USER-2] --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --stanza=db P00 DEBUG: Archive::Push::Push->process(): strWalPathFile = [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 P00 DEBUG: Archive::Push::File::archivePushFile(): bCompress = true, iCompressLevel = 3, strWalFile = 000000010000000100000001, strWalPath = [TEST_PATH]/db-master/db/base/pg_xlog P00 DEBUG: Protocol::Helper::protocolGet(): bCache = , iProcessIdx = [undef], iRemoteIdx = <1>, strBackRestBin = [undef], strCommand = , strRemoteType = backup P00 DEBUG: Protocol::Helper::protocolGet: create (cached) remote protocol -P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=archive-push --compress-level=3 --compress-level-network=1 --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, strCommandSSH = ssh, strHost = backup, strUser = [USER-2] -P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no backrest@backup '[BACKREST-BIN] --buffer-size=4194304 --command=archive-push --compress-level=3 --compress-level-network=1 --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 = remote process on 'backup', strName = remote +P00 DEBUG: Protocol::Remote::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, iSshPort = [undef], strCommand = [BACKREST-BIN] --buffer-size=4194304 --command=archive-push --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --stanza=db --type=backup remote, strCommandSSH = ssh, strHost = backup, strUser = [USER-2] +P00 DEBUG: Protocol::Command::Master->new(): iBufferMax = 4194304, iCompressLevel = 3, iCompressLevelNetwork = 1, iProtocolTimeout = 60, strCommand = ssh -o LogLevel=error -o Compression=no -o PasswordAuthentication=no backrest@backup '[BACKREST-BIN] --buffer-size=4194304 --command=archive-push --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --protocol-timeout=60 --stanza=db --type=backup remote', strId = remote process on 'backup', strName = remote P00 DEBUG: Protocol::Storage::Remote->new(): oProtocol = [object] P00 DEBUG: Archive::Common::walInfo(): strWalFile = [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 P00 DEBUG: Archive::Common::walInfo=>: strDbVersion = 9.3, ullDbSysId = 6395542721432104958 @@ -171,7 +171,7 @@ P00 DEBUG: Common::Exit::exitSafe=>: iExitCode = 0 stanza-create db - fail on archive info file missing from non-empty dir (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 ERROR: [055]: archive information missing HINT: use stanza-create --force to force the stanza data to be created. P00 INFO: stanza-create command end: aborted with exception [055] @@ -196,7 +196,7 @@ db-version="9.3" stanza-create db - gunzip fail on forced stanza-create (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 WARN: unable to create stanza 'db' P00 ERROR: [041]: unable to open '[TEST_PATH]/backup/repo/archive/db/9.3-1/0000000100000001/000000010000000100000001-f5035e2c3b83a9c32660f959b23451e78f7438f7.gz': Permission denied P00 INFO: stanza-create command end: aborted with exception [041] @@ -221,7 +221,7 @@ db-version="9.3" stanza-create db - force create archive.info from gz file (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/backup/repo/backup/db/backup.info @@ -259,7 +259,7 @@ db-version="9.3" stanza-create db - repeat create (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/backup/repo/backup/db/backup.info @@ -297,7 +297,7 @@ db-version="9.3" stanza-create db - hash check fails requiring force (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 WARN: unable to create stanza 'db' P00 ERROR: [028]: archive info file invalid HINT: use stanza-upgrade if the database has been upgraded or use --force @@ -338,7 +338,7 @@ db-version="8.0" stanza-create db - use force to overwrite the invalid file (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/backup/repo/backup/db/backup.info @@ -376,7 +376,7 @@ db-version="9.3" stanza-create db - fail on database mismatch without force option (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 WARN: unable to create stanza 'db' P00 ERROR: [028]: archive info file invalid HINT: use stanza-upgrade if the database has been upgraded or use --force @@ -417,7 +417,7 @@ db-version="9.3" stanza-create db - force create archive.info from uncompressed file (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/backup/repo/backup/db/backup.info @@ -455,7 +455,7 @@ db-version="9.3" stanza-create db - force with missing WAL archive file (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/backup/repo/backup/db/backup.info @@ -493,7 +493,7 @@ db-version="9.3" stanza-create db - force with missing WAL archive directory (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 WARN: found empty directory [TEST_PATH]/backup/repo/archive/db/9.3-1 P00 INFO: stanza-create command end: completed successfully @@ -538,7 +538,7 @@ P00 ERROR: [044]: raised from remote process on 'backup': WAL segment version 9 stanza-upgrade db - successful upgrade creates additional history (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-upgrade ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 INFO: stanza-upgrade command end: completed successfully + supplemental file: [TEST_PATH]/backup/repo/backup/db/backup.info @@ -581,7 +581,7 @@ db-version="9.4" stanza-create db - use force to recreate the stanza producing mismatched info history but same current db-id (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 WARN: found empty directory [TEST_PATH]/backup/repo/archive/db/9.3-1 P00 INFO: stanza-create command end: completed successfully @@ -621,7 +621,7 @@ db-version="9.4" stanza-create db - use force to recreate the stanza producing mismatched db-id (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 WARN: found empty directory [TEST_PATH]/backup/repo/archive/db/9.3-1 P00 INFO: stanza-create command end: completed successfully @@ -660,7 +660,7 @@ db-version="9.4" full backup - create first full backup (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --retention-full=2 --no-online --log-level-console=detail --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --retention-full=2 --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --retention-full=2 --stanza=db --start-fast --type=full P01 INFO: backup file db-master:[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 (16MB, 99%) checksum 1e34fa1c833090d94b9bb14f2a8d3153dca6ea27 P01 INFO: backup file db-master:[TEST_PATH]/db-master/db/base/global/pg_control (8KB, 100%) checksum 89373d9f2973502940de06bc5212489df3f8a912 P01 INFO: backup file db-master:[TEST_PATH]/db-master/db/base/pg_xlog/archive_status/000000010000000100000001.ready (0B, 100%) @@ -721,7 +721,7 @@ start-fast=y stanza-create db - fail no force to recreate the stanza from backups (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 ERROR: [055]: backup information missing HINT: use stanza-create --force to force the stanza data to be created. P00 INFO: stanza-create command end: aborted with exception [055] @@ -744,7 +744,7 @@ db-version="9.4" stanza-create db - use force to recreate the stanza from backups (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --force --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: [TEST_PATH]/backup/repo/backup/db/backup.info @@ -785,7 +785,7 @@ db-version="9.4" stanza-upgrade db - successfully upgrade with XX.Y-Z (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-upgrade ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db +P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --stanza=db P00 INFO: stanza-upgrade command end: completed successfully + supplemental file: [TEST_PATH]/backup/repo/backup/db/backup.info @@ -832,7 +832,7 @@ db-version="9.5" diff backup - diff changed to full backup (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --retention-full=2 --no-online --log-level-console=detail --type=diff --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --retention-full=2 --stanza=db --start-fast --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db1-cmd=[BACKREST-BIN] --db1-config=[TEST_PATH]/db-master/pgbackrest.conf --db1-host=db-master --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --db1-user=[USER-1] --lock-path=[TEST_PATH]/backup/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/backup/log --no-online --protocol-timeout=60 --repo-path=[TEST_PATH]/backup/repo --retention-full=2 --stanza=db --start-fast --type=diff P00 WARN: no prior backup exists, diff backup has been changed to full P01 INFO: backup file db-master:[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 (16MB, 99%) checksum 15b1a1a35c26b17570aca7920980f0ad11c6d858 P01 INFO: backup file db-master:[TEST_PATH]/db-master/db/base/global/pg_control (8KB, 100%) checksum e28bf39d0a56bf9fabd4049b329fcae8878bfec6 diff --git a/test/expect/mock-stanza-003.log b/test/expect/mock-stanza-003.log index f9a26e3dd..992d60f82 100644 --- a/test/expect/mock-stanza-003.log +++ b/test/expect/mock-stanza-003.log @@ -4,14 +4,14 @@ run 003 - remote 0, s3 1 stanza-create db - fail on missing control file (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 ERROR: [041]: unable to open [TEST_PATH]/db-master/db/base/global/pg_control P00 INFO: stanza-create command end: aborted with exception [041] stanza-upgrade db - fail on stanza not initialized since archive.info is missing (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-upgrade ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 ERROR: [055]: archive.info does not exist but is required to push/get WAL segments HINT: is archive_command configured in postgresql.conf? HINT: has a stanza-create been performed? @@ -21,7 +21,7 @@ P00 INFO: stanza-upgrade command end: aborted with exception [055] stanza-create db - successfully create the stanza (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: /backup/db/backup.info @@ -59,7 +59,7 @@ db-version="9.3" stanza-create db - successful rerun of stanza-create (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: /backup/db/backup.info @@ -97,7 +97,7 @@ db-version="9.3" stanza-upgrade db - already up to date (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-upgrade ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 INFO: the stanza data is already up to date P00 INFO: stanza-upgrade command end: completed successfully @@ -135,7 +135,7 @@ db-version="9.3" > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=debug --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 DEBUG: Archive::Push::Push->process(): strWalPathFile = [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 P00 DEBUG: Archive::Push::File::archivePushFile(): bCompress = true, iCompressLevel = 3, strWalFile = 000000010000000100000001, strWalPath = [TEST_PATH]/db-master/db/base/pg_xlog P00 DEBUG: Storage::S3::Request->new(): bVerifySsl = false, iPort = [undef], lBufferMax = 4194304, strAccessKeyId = , strBucket = pgbackrest-dev, strCaFile = [undef], strCaPath = [undef], strEndPoint = s3.amazonaws.com, strHost = [undef], strRegion = us-east-1, strSecretAccessKey = @@ -174,7 +174,7 @@ P00 DEBUG: Common::Exit::exitSafe=>: iExitCode = 0 stanza-create db - fail on archive info file missing from non-empty dir (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 ERROR: [055]: archive information missing HINT: use stanza-create --force to force the stanza data to be created. P00 INFO: stanza-create command end: aborted with exception [055] @@ -199,7 +199,7 @@ db-version="9.3" stanza-create db - force create archive.info from gz file (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: /backup/db/backup.info @@ -237,7 +237,7 @@ db-version="9.3" stanza-create db - repeat create (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: /backup/db/backup.info @@ -275,7 +275,7 @@ db-version="9.3" stanza-create db - hash check fails requiring force (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 WARN: unable to create stanza 'db' P00 ERROR: [028]: archive info file invalid HINT: use stanza-upgrade if the database has been upgraded or use --force @@ -316,7 +316,7 @@ db-version="8.0" stanza-create db - use force to overwrite the invalid file (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: /backup/db/backup.info @@ -354,7 +354,7 @@ db-version="9.3" stanza-create db - fail on database mismatch without force option (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 WARN: unable to create stanza 'db' P00 ERROR: [028]: archive info file invalid HINT: use stanza-upgrade if the database has been upgraded or use --force @@ -395,7 +395,7 @@ db-version="9.3" stanza-create db - force create archive.info from uncompressed file (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: /backup/db/backup.info @@ -433,7 +433,7 @@ db-version="9.3" stanza-create db - force with missing WAL archive file (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: /backup/db/backup.info @@ -471,7 +471,7 @@ db-version="9.3" stanza-create db - force with missing WAL archive directory (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: /backup/db/backup.info @@ -515,7 +515,7 @@ P00 ERROR: [044]: WAL segment version 9.4 does not match archive version 9.3 stanza-upgrade db - successful upgrade creates additional history (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-upgrade ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 INFO: stanza-upgrade command end: completed successfully + supplemental file: /backup/db/backup.info @@ -558,7 +558,7 @@ db-version="9.4" stanza-create db - use force to recreate the stanza producing mismatched info history but same current db-id (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: /backup/db/backup.info @@ -597,7 +597,7 @@ db-version="9.4" stanza-create db - use force to recreate the stanza producing mismatched db-id (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: /backup/db/backup.info @@ -635,7 +635,7 @@ db-version="9.4" full backup - create first full backup (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --retention-full=2 --no-online --log-level-console=detail --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --retention-full=2 --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --retention-full=2 --stanza=db --start-fast --type=full P01 INFO: backup file [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 (16MB, 99%) checksum 1e34fa1c833090d94b9bb14f2a8d3153dca6ea27 P01 INFO: backup file [TEST_PATH]/db-master/db/base/global/pg_control (8KB, 100%) checksum 89373d9f2973502940de06bc5212489df3f8a912 P01 INFO: backup file [TEST_PATH]/db-master/db/base/pg_xlog/archive_status/000000010000000100000001.ready (0B, 100%) @@ -677,7 +677,7 @@ start-fast=y stanza-create db - fail no force to recreate the stanza from backups (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 ERROR: [055]: backup information missing HINT: use stanza-create --force to force the stanza data to be created. P00 INFO: stanza-create command end: aborted with exception [055] @@ -700,7 +700,7 @@ db-version="9.4" stanza-create db - use force to recreate the stanza from backups (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online --force stanza-create ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-create command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 INFO: stanza-create command end: completed successfully + supplemental file: /backup/db/backup.info @@ -741,7 +741,7 @@ db-version="9.4" stanza-upgrade db - successfully upgrade with XX.Y-Z (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --log-level-console=detail --no-online stanza-upgrade ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db +P00 INFO: stanza-upgrade command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --stanza=db P00 INFO: stanza-upgrade command end: completed successfully + supplemental file: /backup/db/backup.info @@ -788,7 +788,7 @@ db-version="9.5" diff backup - diff changed to full backup (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --retention-full=2 --no-online --log-level-console=detail --type=diff --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --db1-path=[TEST_PATH]/db-master/db/base --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --retention-full=2 --stanza=db --start-fast --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db1-path=[TEST_PATH]/db-master/db/base --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=trace --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log --no-online --protocol-timeout=60 --repo-path=/ --repo-s3-bucket=pgbackrest-dev --repo-s3-endpoint=s3.amazonaws.com --repo-s3-key= --repo-s3-key-secret= --repo-s3-region=us-east-1 --no-repo-s3-verify-ssl --repo-type=s3 --retention-full=2 --stanza=db --start-fast --type=diff P00 WARN: no prior backup exists, diff backup has been changed to full P01 INFO: backup file [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 (16MB, 99%) checksum 15b1a1a35c26b17570aca7920980f0ad11c6d858 P01 INFO: backup file [TEST_PATH]/db-master/db/base/global/pg_control (8KB, 100%) checksum e28bf39d0a56bf9fabd4049b329fcae8878bfec6 diff --git a/test/lib/pgBackRestTest/Common/DefineTest.pm b/test/lib/pgBackRestTest/Common/DefineTest.pm index 1600014e4..2d2fbda8d 100644 --- a/test/lib/pgBackRestTest/Common/DefineTest.pm +++ b/test/lib/pgBackRestTest/Common/DefineTest.pm @@ -241,16 +241,25 @@ my $oTestDef = &TESTDEF_TEST => [ { - &TESTDEF_NAME => 'rule', - &TESTDEF_TOTAL => 2, + &TESTDEF_NAME => 'define', + &TESTDEF_TOTAL => 1, &TESTDEF_C => true, &TESTDEF_COVERAGE => { - 'config/config' => TESTDEF_COVERAGE_NOCODE, - 'config/config.auto' => TESTDEF_COVERAGE_FULL, - 'config/configRule' => TESTDEF_COVERAGE_FULL, - 'config/configRule.auto' => TESTDEF_COVERAGE_FULL, + 'config/define' => TESTDEF_COVERAGE_FULL, + 'config/define.auto' => TESTDEF_COVERAGE_NOCODE, + }, + }, + { + &TESTDEF_NAME => 'config', + &TESTDEF_TOTAL => 1, + &TESTDEF_C => true, + + &TESTDEF_COVERAGE => + { + 'config/config' => TESTDEF_COVERAGE_FULL, + 'config/config.auto' => TESTDEF_COVERAGE_NOCODE, }, }, { @@ -262,7 +271,7 @@ my $oTestDef = &TESTDEF_TOTAL => 34, }, { - &TESTDEF_NAME => 'config', + &TESTDEF_NAME => 'config-perl', &TESTDEF_TOTAL => 25, } ] diff --git a/test/lib/pgBackRestTest/Common/JobTest.pm b/test/lib/pgBackRestTest/Common/JobTest.pm index c66aff8e4..d881b3cd8 100644 --- a/test/lib/pgBackRestTest/Common/JobTest.pm +++ b/test/lib/pgBackRestTest/Common/JobTest.pm @@ -179,7 +179,8 @@ sub run "cp ${strBuildPath}/blib/arch/auto/pgBackRest/LibC/LibC.so ${strPerlAutoPath} && " . "cp ${strBuildPath}/blib/lib/auto/pgBackRest/LibC/autosplit.ix ${strPerlAutoPath} && " . "mkdir -p -m 755 ${strPerlModulePath} && " . - "cp ${strBuildPath}/blib/lib/pgBackRest/LibC.pm ${strPerlModulePath}'"); + "cp ${strBuildPath}/blib/lib/pgBackRest/LibC.pm ${strPerlModulePath} && " . + "cp ${strBuildPath}/blib/lib/pgBackRest/LibCAuto.pm ${strPerlModulePath}'"); } } } @@ -314,7 +315,7 @@ sub run $self->{oStorageTest}->put("$self->{strGCovPath}/test.c", $strTestC); my $strGccCommand = - 'gcc -std=c99 -fprofile-arcs -ftest-coverage -fPIC -O0 ' . + 'gcc -Wfatal-errors -std=c99 -fprofile-arcs -ftest-coverage -fPIC -O0 ' . "-I/$self->{strBackRestBase}/src -I/$self->{strBackRestBase}/test/src test.c " . "/$self->{strBackRestBase}/test/src/common/harnessTest.c " . join(' ', @stryCFile) . ' -o test'; diff --git a/test/lib/pgBackRestTest/Env/ConfigEnvTest.pm b/test/lib/pgBackRestTest/Env/ConfigEnvTest.pm index 1b1380013..803aefc03 100644 --- a/test/lib/pgBackRestTest/Env/ConfigEnvTest.pm +++ b/test/lib/pgBackRestTest/Env/ConfigEnvTest.pm @@ -134,8 +134,6 @@ sub configTestLoadExpect my $strErrorParam2 = shift; my $strErrorParam3 = shift; - my $oOptionRuleExpected = cfgdefRuleIndex(); - @ARGV = $self->commandTestWrite($strCommand, $self->{&CONFIGENVTEST}); $self->configTestClear(); &log(INFO, " command line: " . join(" ", @ARGV)); diff --git a/test/lib/pgBackRestTest/Env/Host/HostBackupTest.pm b/test/lib/pgBackRestTest/Env/Host/HostBackupTest.pm index 659d8a1f5..203c63bed 100644 --- a/test/lib/pgBackRestTest/Env/Host/HostBackupTest.pm +++ b/test/lib/pgBackRestTest/Env/Host/HostBackupTest.pm @@ -911,7 +911,7 @@ sub optionIndexName # If the option doesn't have a prefix it can't be indexed $iIndex = defined($iIndex) ? $iIndex : 1; - my $strPrefix = cfgRuleOptionPrefix($iOptionId); + my $strPrefix = cfgDefOptionPrefix($iOptionId); if (!defined($strPrefix) && $iIndex > 1) { diff --git a/test/lib/pgBackRestTest/Env/Host/HostBaseTest.pm b/test/lib/pgBackRestTest/Env/Host/HostBaseTest.pm index cced0e01f..d07f5aee0 100644 --- a/test/lib/pgBackRestTest/Env/Host/HostBaseTest.pm +++ b/test/lib/pgBackRestTest/Env/Host/HostBaseTest.pm @@ -91,7 +91,8 @@ sub new "cp ${strBuildPath}/blib/arch/auto/pgBackRest/LibC/LibC.so ${strPerlAutoPath} && " . "cp ${strBuildPath}/blib/lib/auto/pgBackRest/LibC/autosplit.ix ${strPerlAutoPath} && " . "mkdir -p -m 755 ${strPerlModulePath} && " . - "cp ${strBuildPath}/blib/lib/pgBackRest/LibC.pm ${strPerlModulePath}", + "cp ${strBuildPath}/blib/lib/pgBackRest/LibC.pm ${strPerlModulePath} && " . + "cp ${strBuildPath}/blib/lib/pgBackRest/LibCAuto.pm ${strPerlModulePath}", undef, 'root'); # Return from function and log return values if any diff --git a/test/lib/pgBackRestTest/Env/Host/HostDbCommonTest.pm b/test/lib/pgBackRestTest/Env/Host/HostDbCommonTest.pm index 7f31276f0..7c9a7097c 100644 --- a/test/lib/pgBackRestTest/Env/Host/HostDbCommonTest.pm +++ b/test/lib/pgBackRestTest/Env/Host/HostDbCommonTest.pm @@ -331,12 +331,12 @@ sub restore $strComment = 'restore' . ($bDelta ? ' delta' : '') . ($bForce ? ', force' : '') . - ($strBackup ne cfgRuleOptionDefault(CFGCMD_RESTORE, CFGOPT_SET) ? ", backup '${strBackup}'" : '') . + ($strBackup ne cfgDefOptionDefault(CFGCMD_RESTORE, CFGOPT_SET) ? ", backup '${strBackup}'" : '') . ($strType ? ", type '${strType}'" : '') . ($strTarget ? ", target '${strTarget}'" : '') . ($strTargetTimeline ? ", timeline '${strTargetTimeline}'" : '') . (defined($bTargetExclusive) && $bTargetExclusive ? ', exclusive' : '') . - (defined($strTargetAction) && $strTargetAction ne cfgRuleOptionDefault(CFGCMD_RESTORE, CFGOPT_TARGET_ACTION) + (defined($strTargetAction) && $strTargetAction ne cfgDefOptionDefault(CFGCMD_RESTORE, CFGOPT_TARGET_ACTION) ? ', ' . cfgOptionName(CFGOPT_TARGET_ACTION) . "=${strTargetAction}" : '') . (defined($oRemapHashRef) ? ', remap' : '') . (defined($iExpectedExitStatus) ? ", expect exit ${iExpectedExitStatus}" : '') . @@ -416,7 +416,7 @@ sub restore ' --config=' . $self->backrestConfig() . (defined($bDelta) && $bDelta ? ' --delta' : '') . (defined($bForce) && $bForce ? ' --force' : '') . - ($strBackup ne cfgRuleOptionDefault(CFGCMD_RESTORE, CFGOPT_SET) ? " --set=${strBackup}" : '') . + ($strBackup ne cfgDefOptionDefault(CFGCMD_RESTORE, CFGOPT_SET) ? " --set=${strBackup}" : '') . (defined($strOptionalParam) ? " ${strOptionalParam} " : '') . (defined($strType) && $strType ne CFGOPTVAL_RESTORE_TYPE_DEFAULT ? " --type=${strType}" : '') . (defined($strTarget) ? " --target=\"${strTarget}\"" : '') . @@ -424,7 +424,7 @@ sub restore (defined($bTargetExclusive) && $bTargetExclusive ? ' --target-exclusive' : '') . (defined($strLinkMap) ? $strLinkMap : '') . ($self->synthetic() ? '' : ' --link-all') . - (defined($strTargetAction) && $strTargetAction ne cfgRuleOptionDefault(CFGCMD_RESTORE, CFGOPT_TARGET_ACTION) + (defined($strTargetAction) && $strTargetAction ne cfgDefOptionDefault(CFGCMD_RESTORE, CFGOPT_TARGET_ACTION) ? ' --' . cfgOptionName(CFGOPT_TARGET_ACTION) . "=${strTargetAction}" : '') . ' --stanza=' . $self->stanza() . ' restore', {strComment => $strComment, iExpectedExitStatus => $iExpectedExitStatus, oLogTest => $self->{oLogTest}, diff --git a/test/lib/pgBackRestTest/Module/Config/ConfigConfigTest.pm b/test/lib/pgBackRestTest/Module/Config/ConfigConfigPerlTest.pm similarity index 98% rename from test/lib/pgBackRestTest/Module/Config/ConfigConfigTest.pm rename to test/lib/pgBackRestTest/Module/Config/ConfigConfigPerlTest.pm index f8af47b3c..1efc2bae5 100644 --- a/test/lib/pgBackRestTest/Module/Config/ConfigConfigTest.pm +++ b/test/lib/pgBackRestTest/Module/Config/ConfigConfigPerlTest.pm @@ -1,7 +1,7 @@ #################################################################################################################################### # ConfigConfigTest.pm - Tests for mixed command line and config file options in Config.pm #################################################################################################################################### -package pgBackRestTest::Module::Config::ConfigConfigTest; +package pgBackRestTest::Module::Config::ConfigConfigPerlTest; use parent 'pgBackRestTest::Env::ConfigEnvTest'; #################################################################################################################################### @@ -54,7 +54,7 @@ sub run $self->optionTestSet(CFGOPT_DB_PATH, '/db'); $self->configTestLoadExpect(cfgCommandName(CFGCMD_BACKUP)); - $self->optionTestExpect(CFGOPT_CONFIG, cfgRuleOptionDefault(CFGCMD_BACKUP, CFGOPT_CONFIG)); + $self->optionTestExpect(CFGOPT_CONFIG, cfgDefOptionDefault(CFGCMD_BACKUP, CFGOPT_CONFIG)); } if ($self->begin('config file is a path')) diff --git a/test/lib/pgBackRestTest/Module/Config/ConfigOptionTest.pm b/test/lib/pgBackRestTest/Module/Config/ConfigOptionTest.pm index ea935c866..3d555af7b 100644 --- a/test/lib/pgBackRestTest/Module/Config/ConfigOptionTest.pm +++ b/test/lib/pgBackRestTest/Module/Config/ConfigOptionTest.pm @@ -10,6 +10,7 @@ use parent 'pgBackRestTest::Env::ConfigEnvTest'; use strict; use warnings FATAL => qw(all); use Carp qw(confess); +use English '-no_match_vars'; use Cwd qw(abs_path); @@ -137,7 +138,7 @@ sub run { $self->optionTestSet(CFGOPT_STANZA, $self->stanza()); $self->optionTestSet(CFGOPT_DB_PATH, '/db'); - $self->optionTestSet(CFGOPT_TYPE, cfgRuleOptionDefault(CFGCMD_RESTORE, CFGOPT_TYPE)); + $self->optionTestSet(CFGOPT_TYPE, cfgDefOptionDefault(CFGCMD_RESTORE, CFGOPT_TYPE)); $self->optionTestSet(CFGOPT_TARGET, BOGUS); @oyArray = (CFGOPTVAL_RESTORE_TYPE_NAME, CFGOPTVAL_RESTORE_TYPE_TIME, CFGOPTVAL_RESTORE_TYPE_XID); @@ -247,7 +248,7 @@ sub run } if ($self->begin( - cfgCommandName(CFGCMD_BACKUP) . ' default value ' . cfgRuleOptionDefault(CFGCMD_BACKUP, CFGOPT_RETENTION_ARCHIVE_TYPE) . + cfgCommandName(CFGCMD_BACKUP) . ' default value ' . cfgDefOptionDefault(CFGCMD_BACKUP, CFGOPT_RETENTION_ARCHIVE_TYPE) . ' for ' . cfgOptionName(CFGOPT_RETENTION_ARCHIVE_TYPE) . ' with valid ' . cfgOptionName(CFGOPT_RETENTION_FULL))) { $self->optionTestSet(CFGOPT_STANZA, $self->stanza()); @@ -385,10 +386,10 @@ sub run { $self->optionTestSet(CFGOPT_STANZA, $self->stanza()); $self->optionTestSet(CFGOPT_DB_PATH, '/db'); - $self->optionTestSet(CFGOPT_DB_TIMEOUT, cfgRuleOptionDefault(CFGCMD_BACKUP, CFGOPT_PROTOCOL_TIMEOUT) + 30); + $self->optionTestSet(CFGOPT_DB_TIMEOUT, cfgDefOptionDefault(CFGCMD_BACKUP, CFGOPT_PROTOCOL_TIMEOUT) + 30); $self->configTestLoadExpect(cfgCommandName(CFGCMD_BACKUP)); - $self->optionTestExpect(CFGOPT_PROTOCOL_TIMEOUT, cfgRuleOptionDefault(CFGCMD_BACKUP, CFGOPT_PROTOCOL_TIMEOUT) + 60); + $self->optionTestExpect(CFGOPT_PROTOCOL_TIMEOUT, cfgDefOptionDefault(CFGCMD_BACKUP, CFGOPT_PROTOCOL_TIMEOUT) + 60); } } diff --git a/test/lib/pgBackRestTest/Module/Config/ConfigUnitTest.pm b/test/lib/pgBackRestTest/Module/Config/ConfigUnitTest.pm index 46e1cd40f..f3675b53c 100644 --- a/test/lib/pgBackRestTest/Module/Config/ConfigUnitTest.pm +++ b/test/lib/pgBackRestTest/Module/Config/ConfigUnitTest.pm @@ -82,7 +82,7 @@ sub run #--------------------------------------------------------------------------------------------------------------------------- $oConfig = {}; $$oConfig{&CFGDEF_SECTION_GLOBAL}{cfgOptionName(CFGOPT_LOG_LEVEL_STDERR)} = - cfgRuleOptionDefault(CFGCMD_ARCHIVE_PUSH, CFGOPT_LOG_LEVEL_STDERR); + cfgDefOptionDefault(CFGCMD_ARCHIVE_PUSH, CFGOPT_LOG_LEVEL_STDERR); $$oConfig{$self->stanza()}{cfgOptionName(CFGOPT_DB_PATH)} = '/db'; $$oConfig{&CFGDEF_SECTION_GLOBAL . ':' . cfgCommandName(CFGCMD_ARCHIVE_PUSH)}{cfgOptionName(CFGOPT_PROCESS_MAX)} = 2; @@ -91,7 +91,7 @@ sub run #--------------------------------------------------------------------------------------------------------------------------- $oConfig = {}; $$oConfig{&CFGDEF_SECTION_GLOBAL}{cfgOptionName(CFGOPT_LOG_LEVEL_STDERR)} = - cfgRuleOptionDefault(CFGCMD_ARCHIVE_PUSH, CFGOPT_LOG_LEVEL_STDERR); + cfgDefOptionDefault(CFGCMD_ARCHIVE_PUSH, CFGOPT_LOG_LEVEL_STDERR); $$oConfig{&CFGDEF_SECTION_GLOBAL . ':' . cfgCommandName(CFGCMD_ARCHIVE_PUSH)}{cfgOptionName(CFGOPT_PROCESS_MAX)} = 2; $$oConfig{'unusual-section^name!:' . cfgCommandName(CFGCMD_CHECK)}{cfgOptionName(CFGOPT_DB_PATH)} = '/db'; diff --git a/test/lib/pgBackRestTest/Module/Mock/MockAllTest.pm b/test/lib/pgBackRestTest/Module/Mock/MockAllTest.pm index 4eca66b25..de54e5640 100644 --- a/test/lib/pgBackRestTest/Module/Mock/MockAllTest.pm +++ b/test/lib/pgBackRestTest/Module/Mock/MockAllTest.pm @@ -1082,7 +1082,7 @@ sub run {&MANIFEST_SUBKEY_CHECKSUM}); $oHostDbMaster->restore( - cfgRuleOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), \%oManifest, \%oRemapHash, $bDelta, $bForce, undef, undef, undef, + cfgDefOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), \%oManifest, \%oRemapHash, $bDelta, $bForce, undef, undef, undef, undef, undef, undef, 'selective restore 16384', undef, "${strLogReduced} --db-include=16384"); # Restore checksum values for next test @@ -1099,18 +1099,18 @@ sub run delete($oManifest{&MANIFEST_SECTION_TARGET_FILE}{'pg_data/base/16384/17000'}{&MANIFEST_SUBKEY_CHECKSUM}); $oHostDbMaster->restore( - cfgRuleOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), \%oManifest, \%oRemapHash, $bDelta, $bForce, undef, undef, undef, + cfgDefOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), \%oManifest, \%oRemapHash, $bDelta, $bForce, undef, undef, undef, undef, undef, undef, 'selective restore 32768', undef, "${strLogReduced} --db-include=32768"); $oManifest{&MANIFEST_SECTION_TARGET_FILE}{'pg_data/base/16384/17000'}{&MANIFEST_SUBKEY_CHECKSUM} = '7579ada0808d7f98087a0a586d0df9de009cdc33'; $oHostDbMaster->restore( - cfgRuleOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), \%oManifest, \%oRemapHash, $bDelta, $bForce, undef, undef, undef, + cfgDefOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), \%oManifest, \%oRemapHash, $bDelta, $bForce, undef, undef, undef, undef, undef, undef, 'error on invalid id', ERROR_DB_MISSING, '--log-level-console=warn --db-include=7777'); $oHostDbMaster->restore( - cfgRuleOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), \%oManifest, \%oRemapHash, $bDelta, $bForce, undef, undef, undef, + cfgDefOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), \%oManifest, \%oRemapHash, $bDelta, $bForce, undef, undef, undef, undef, undef, undef, 'error on system id', ERROR_DB_INVALID, '--log-level-console=warn --db-include=1'); # Compact Restore @@ -1126,14 +1126,14 @@ sub run delete($oRemapHash{&MANIFEST_TARGET_PGTBLSPC . '/2'}); $oHostDbMaster->restore( - cfgRuleOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), \%oManifest, \%oRemapHash, $bDelta, $bForce, undef, undef, undef, + cfgDefOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), \%oManifest, \%oRemapHash, $bDelta, $bForce, undef, undef, undef, undef, undef, undef, 'no tablespace remap - error when tablespace dir does not exist', ERROR_PATH_MISSING, "${strLogReduced} --tablespace-map-all=../../tablespace", false); storageTest()->pathCreate($oHostDbMaster->dbBasePath(2) . '/tablespace', {strMode => '0700'}); $oHostDbMaster->restore( - cfgRuleOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), \%oManifest, undef, $bDelta, $bForce, undef, undef, undef, undef, + cfgDefOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), \%oManifest, undef, $bDelta, $bForce, undef, undef, undef, undef, undef, undef, 'no tablespace remap', undef, "--tablespace-map-all=../../tablespace ${strLogReduced}", false); $oManifest{&MANIFEST_SECTION_BACKUP_TARGET}{'pg_tblspc/2'}{&MANIFEST_SUBKEY_PATH} = '../../tablespace/ts2'; diff --git a/test/lib/pgBackRestTest/Module/Real/RealAllTest.pm b/test/lib/pgBackRestTest/Module/Real/RealAllTest.pm index 627a0488b..6db760555 100644 --- a/test/lib/pgBackRestTest/Module/Real/RealAllTest.pm +++ b/test/lib/pgBackRestTest/Module/Real/RealAllTest.pm @@ -446,7 +446,7 @@ sub run } $oHostDbStandby->restore( - cfgRuleOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), undef, \%oRemapHash, $bDelta, $bForce, $strType, $strTarget, + cfgDefOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), undef, \%oRemapHash, $bDelta, $bForce, $strType, $strTarget, $bTargetExclusive, $strTargetAction, $strTargetTimeline, $oRecoveryHashRef, $strComment, $iExpectedExitStatus, ' --recovery-option=standby_mode=on' . ' --recovery-option="primary_conninfo=host=' . HOST_DB_MASTER . @@ -678,7 +678,7 @@ sub run $iExpectedExitStatus = ERROR_POSTMASTER_RUNNING; $oHostDbMaster->restore( - cfgRuleOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), undef, undef, $bDelta, $bForce, $strType, $strTarget, + cfgDefOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), undef, undef, $bDelta, $bForce, $strType, $strTarget, $bTargetExclusive, $strTargetAction, $strTargetTimeline, $oRecoveryHashRef, $strComment, $iExpectedExitStatus); } @@ -691,7 +691,7 @@ sub run $iExpectedExitStatus = ERROR_PATH_NOT_EMPTY; $oHostDbMaster->restore( - cfgRuleOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), undef, undef, $bDelta, $bForce, $strType, $strTarget, + cfgDefOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), undef, undef, $bDelta, $bForce, $strType, $strTarget, $bTargetExclusive, $strTargetAction, $strTargetTimeline, $oRecoveryHashRef, $strComment, $iExpectedExitStatus); } @@ -708,7 +708,7 @@ sub run $iExpectedExitStatus = undef; $oHostDbMaster->restore( - cfgRuleOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), undef, undef, $bDelta, $bForce, $strType, $strTarget, + cfgDefOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), undef, undef, $bDelta, $bForce, $strType, $strTarget, $bTargetExclusive, $strTargetAction, $strTargetTimeline, $oRecoveryHashRef, $strComment, $iExpectedExitStatus, $bTestLocal ? ' --db-include=test1' : undef); @@ -868,7 +868,7 @@ sub run storageDb()->move($self->testPath . '/recovery.conf', $oHostDbMaster->dbBasePath() . '/recovery.conf'); $oHostDbMaster->restore( - cfgRuleOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), undef, undef, $bDelta, $bForce, $strType, $strTarget, + cfgDefOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), undef, undef, $bDelta, $bForce, $strType, $strTarget, $bTargetExclusive, $strTargetAction, $strTargetTimeline, $oRecoveryHashRef, $strComment, $iExpectedExitStatus); $oHostDbMaster->clusterStart(); @@ -949,7 +949,7 @@ sub run $oHostDbMaster->clusterStop(); $oHostDbMaster->restore( - cfgRuleOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), undef, undef, $bDelta, $bForce, $strType, $strTarget, + cfgDefOptionDefault(CFGCMD_RESTORE, CFGOPT_SET), undef, undef, $bDelta, $bForce, $strType, $strTarget, $bTargetExclusive, $strTargetAction, $strTargetTimeline, $oRecoveryHashRef, $strComment, $iExpectedExitStatus); $oHostDbMaster->clusterStart(); diff --git a/test/src/module/config/configTest.c b/test/src/module/config/configTest.c new file mode 100644 index 000000000..982815669 --- /dev/null +++ b/test/src/module/config/configTest.c @@ -0,0 +1,70 @@ +/*********************************************************************************************************************************** +Test Configuration Commands and Options +***********************************************************************************************************************************/ + +/*********************************************************************************************************************************** +Test run +***********************************************************************************************************************************/ +void testRun() +{ + // Static tests against known values -- these may break as options change so will need to be kept up to date. The tests have + // generally been selected to favor values that are not expected to change but adjustments are welcome as long as the type of + // test is not drastically changed. + // ----------------------------------------------------------------------------------------------------------------------------- + if (testBegin("check known values")) + { + // Generate standard error messages + char optionDefIdInvalidHighError[256]; + snprintf( + optionDefIdInvalidHighError, sizeof(optionDefIdInvalidHighError), "option def id %d invalid - must be >= 0 and < %d", + cfgDefOptionTotal(), cfgDefOptionTotal()); + + char optionIdInvalidHighError[256]; + snprintf( + optionIdInvalidHighError, sizeof(optionIdInvalidHighError), "option id %d invalid - must be >= 0 and < %d", + cfgOptionTotal(), cfgOptionTotal()); + + char optionIdInvalidLowError[256]; + snprintf( + optionIdInvalidLowError, sizeof(optionIdInvalidLowError), "option id -1 invalid - must be >= 0 and < %d", + cfgOptionTotal()); + + char commandIdInvalidHighError[256]; + snprintf( + commandIdInvalidHighError, sizeof(commandIdInvalidHighError), "command id %d invalid - must be >= 0 and < %d", + cfgCommandTotal(), cfgCommandTotal()); + + char commandIdInvalidLowError[256]; + snprintf( + commandIdInvalidLowError, sizeof(commandIdInvalidLowError), "command id -1 invalid - must be >= 0 and < %d", + cfgCommandTotal()); + + // ------------------------------------------------------------------------------------------------------------------------- + TEST_ERROR(cfgCommandId(BOGUS_STR), AssertError, "invalid command 'BOGUS'"); + TEST_RESULT_INT(cfgCommandId("archive-push"), cfgCmdArchivePush, "command id from name"); + + TEST_ERROR(cfgCommandDefIdFromId(cfgCommandTotal()), AssertError, commandIdInvalidHighError); + TEST_RESULT_INT(cfgCommandDefIdFromId(cfgCmdBackup), cfgDefCmdBackup, "command id to def id"); + + TEST_ERROR(cfgCommandName(-1), AssertError, commandIdInvalidLowError); + TEST_RESULT_STR(cfgCommandName(cfgCmdBackup), "backup", "command name from id"); + + TEST_RESULT_INT(cfgOptionDefIdFromId(cfgOptDbHost + 6), cfgDefOptDbHost, "option id to def id"); + + TEST_RESULT_INT(cfgOptionId("target"), cfgOptTarget, "option id from name"); + TEST_RESULT_INT(cfgOptionId(BOGUS_STR), -1, "option id from invalid option name"); + + TEST_ERROR(cfgOptionIdFromDefId(cfgDefOptionTotal(), 6), AssertError, optionDefIdInvalidHighError); + TEST_RESULT_INT(cfgOptionIdFromDefId(cfgDefOptDbHost, 6), cfgOptDbHost + 6, "option def id to id"); + + TEST_ERROR(cfgOptionIndex(cfgOptionTotal()), AssertError, optionIdInvalidHighError); + TEST_RESULT_INT(cfgOptionIndex(cfgOptDbCmd + 6), 6, "option index"); + TEST_RESULT_INT(cfgOptionIndex(cfgOptCompressLevel), 0, "option index"); + + TEST_RESULT_INT(cfgOptionIndexTotal(cfgOptDbPath), 8, "option index total"); + TEST_RESULT_INT(cfgOptionIndexTotal(cfgOptLogLevelConsole), 1, "option index total"); + + TEST_ERROR(cfgOptionName(-1), AssertError, optionIdInvalidLowError); + TEST_RESULT_STR(cfgOptionName(cfgOptBackupStandby), "backup-standby", "option id from name"); + } +} diff --git a/test/src/module/config/defineTest.c b/test/src/module/config/defineTest.c new file mode 100644 index 000000000..11ed5f277 --- /dev/null +++ b/test/src/module/config/defineTest.c @@ -0,0 +1,125 @@ +/*********************************************************************************************************************************** +Test Configuration Command and Option Definition +***********************************************************************************************************************************/ + +/*********************************************************************************************************************************** +Test run +***********************************************************************************************************************************/ +void testRun() +{ + // Static tests against known values -- these may break as options change so will need to be kept up to date. The tests have + // generally been selected to favor values that are not expected to change but adjustments are welcome as long as the type of + // test is not drastically changed. + // ----------------------------------------------------------------------------------------------------------------------------- + if (testBegin("check known values")) + { + // Generate standard error messages + char optionIdInvalidHighError[256]; + snprintf( + optionIdInvalidHighError, sizeof(optionIdInvalidHighError), "option def id %d invalid - must be >= 0 and < %d", + cfgDefOptionTotal(), cfgDefOptionTotal()); + + char optionIdInvalidLowError[256]; + snprintf( + optionIdInvalidLowError, sizeof(optionIdInvalidLowError), "option def id -1 invalid - must be >= 0 and < %d", + cfgDefOptionTotal()); + + char commandIdInvalidHighError[256]; + snprintf( + commandIdInvalidHighError, sizeof(commandIdInvalidHighError), "command def id %d invalid - must be >= 0 and < %d", + cfgDefCommandTotal(), cfgDefCommandTotal()); + + char commandIdInvalidLowError[256]; + snprintf( + commandIdInvalidLowError, sizeof(commandIdInvalidLowError), "command def id -1 invalid - must be >= 0 and < %d", + cfgDefCommandTotal()); + + // ------------------------------------------------------------------------------------------------------------------------- + TEST_RESULT_STR(cfgDefOptionName(cfgDefOptConfig), "config", "option name"); + TEST_ERROR(cfgDefOptionName(-1), AssertError, optionIdInvalidLowError); + + TEST_RESULT_BOOL(cfgDefOptionAllowList(cfgDefCmdBackup, cfgDefOptLogLevelConsole), true, "allow list valid"); + TEST_RESULT_BOOL(cfgDefOptionAllowList(cfgDefCmdBackup, cfgDefOptDbHost), false, "allow list not valid"); + TEST_RESULT_BOOL(cfgDefOptionAllowList(cfgDefCmdBackup, cfgDefOptType), true, "command allow list valid"); + + TEST_RESULT_INT(cfgDefOptionAllowListValueTotal(cfgDefCmdBackup, cfgDefOptType), 3, "allow list total"); + + TEST_RESULT_STR(cfgDefOptionAllowListValue(cfgDefCmdBackup, cfgDefOptType, 0), "full", "allow list value 0"); + TEST_RESULT_STR(cfgDefOptionAllowListValue(cfgDefCmdBackup, cfgDefOptType, 1), "diff", "allow list value 1"); + TEST_RESULT_STR(cfgDefOptionAllowListValue(cfgDefCmdBackup, cfgDefOptType, 2), "incr", "allow list value 2"); + TEST_ERROR( + cfgDefOptionAllowListValue(cfgDefCmdBackup, cfgDefOptType, 3), AssertError, + "value id 3 invalid - must be >= 0 and < 3"); + + TEST_RESULT_BOOL( + cfgDefOptionAllowListValueValid(cfgDefCmdBackup, cfgDefOptType, "diff"), true, "allow list value valid"); + TEST_RESULT_BOOL( + cfgDefOptionAllowListValueValid(cfgDefCmdBackup, cfgDefOptType, BOGUS_STR), false, "allow list value not valid"); + + TEST_RESULT_BOOL(cfgDefOptionAllowRange(cfgDefCmdBackup, cfgDefOptCompressLevel), true, "range allowed"); + TEST_RESULT_BOOL(cfgDefOptionAllowRange(cfgDefCmdBackup, cfgDefOptBackupHost), false, "range not allowed"); + + TEST_RESULT_DOUBLE(cfgDefOptionAllowRangeMin(cfgDefCmdBackup, cfgDefOptDbTimeout), 0.1, "range min"); + TEST_RESULT_DOUBLE(cfgDefOptionAllowRangeMax(cfgDefCmdBackup, cfgDefOptCompressLevel), 9, "range max"); + + TEST_ERROR(cfgDefOptionDefault(-1, cfgDefOptCompressLevel), AssertError, commandIdInvalidLowError); + TEST_ERROR(cfgDefOptionDefault(cfgDefCmdBackup, cfgDefOptionTotal()), AssertError, optionIdInvalidHighError); + TEST_RESULT_STR(cfgDefOptionDefault(cfgDefCmdBackup, cfgDefOptCompressLevel), "6", "option default exists"); + TEST_RESULT_STR(cfgDefOptionDefault(cfgDefCmdRestore, cfgDefOptType), "default", "command default exists"); + TEST_RESULT_STR(cfgDefOptionDefault(cfgDefCmdLocal, cfgDefOptType), NULL, "command default does not exist"); + TEST_RESULT_STR(cfgDefOptionDefault(cfgDefCmdBackup, cfgDefOptBackupHost), NULL, "default does not exist"); + + TEST_RESULT_BOOL(cfgDefOptionDepend(cfgDefCmdRestore, cfgDefOptRepoS3Key), true, "has depend option"); + TEST_RESULT_BOOL(cfgDefOptionDepend(cfgDefCmdRestore, cfgDefOptType), false, "does not have depend option"); + + TEST_RESULT_INT(cfgDefOptionDependOption(cfgDefCmdBackup, cfgDefOptDbUser), cfgDefOptDbHost, "depend option id"); + TEST_RESULT_INT(cfgDefOptionDependOption(cfgDefCmdBackup, cfgDefOptBackupCmd), cfgDefOptBackupHost, "depend option id"); + + TEST_RESULT_INT(cfgDefOptionDependValueTotal(cfgDefCmdRestore, cfgDefOptTarget), 3, "depend option value total"); + TEST_RESULT_STR(cfgDefOptionDependValue(cfgDefCmdRestore, cfgDefOptTarget, 0), "name", "depend option value 0"); + TEST_RESULT_STR(cfgDefOptionDependValue(cfgDefCmdRestore, cfgDefOptTarget, 1), "time", "depend option value 1"); + TEST_RESULT_STR(cfgDefOptionDependValue(cfgDefCmdRestore, cfgDefOptTarget, 2), "xid", "depend option value 2"); + TEST_ERROR( + cfgDefOptionDependValue(cfgDefCmdRestore, cfgDefOptTarget, 3), AssertError, + "value id 3 invalid - must be >= 0 and < 3"); + + TEST_RESULT_BOOL( + cfgDefOptionDependValueValid(cfgDefCmdRestore, cfgDefOptTarget, "time"), true, "depend option value valid"); + TEST_RESULT_BOOL( + cfgDefOptionDependValueValid(cfgDefCmdRestore, cfgDefOptTarget, BOGUS_STR), false, "depend option value not valid"); + + TEST_ERROR(cfgDefOptionIndexTotal(cfgDefOptionTotal()), AssertError, optionIdInvalidHighError); + TEST_RESULT_INT(cfgDefOptionIndexTotal(cfgDefOptDbPath), 8, "index total > 1"); + TEST_RESULT_INT(cfgDefOptionIndexTotal(cfgDefOptRepoPath), 1, "index total == 1"); + + TEST_RESULT_STR(cfgDefOptionNameAlt(cfgDefOptProcessMax), "thread-max", "alt name"); + TEST_RESULT_STR(cfgDefOptionNameAlt(cfgDefOptType), NULL, "no alt name"); + + TEST_ERROR(cfgDefOptionNegate(cfgDefOptionTotal()), AssertError, optionIdInvalidHighError); + TEST_RESULT_BOOL(cfgDefOptionNegate(cfgDefOptOnline), true, "option can be negated"); + TEST_RESULT_BOOL(cfgDefOptionNegate(cfgDefOptType), false, "option cannot be negated"); + + TEST_RESULT_STR(cfgDefOptionPrefix(cfgDefOptDbHost), "db", "option prefix"); + TEST_RESULT_STR(cfgDefOptionPrefix(cfgDefOptType), NULL, "option has no prefix"); + + TEST_RESULT_BOOL(cfgDefOptionRequired(cfgDefCmdBackup, cfgDefOptConfig), true, "option required"); + TEST_RESULT_BOOL(cfgDefOptionRequired(cfgDefCmdRestore, cfgDefOptBackupHost), false, "option not required"); + TEST_RESULT_BOOL(cfgDefOptionRequired(cfgDefCmdInfo, cfgDefOptStanza), false, "command option not required"); + + TEST_RESULT_INT(cfgDefOptionSection(cfgDefOptRepoS3Key), cfgDefSectionGlobal, "global section"); + TEST_RESULT_INT(cfgDefOptionSection(cfgDefOptDbPath), cfgDefSectionStanza, "stanza section"); + TEST_RESULT_INT(cfgDefOptionSection(cfgDefOptType), cfgDefSectionCommandLine, "command line only"); + + TEST_ERROR(cfgDefOptionSecure(-1), AssertError, optionIdInvalidLowError); + TEST_RESULT_BOOL(cfgDefOptionSecure(cfgDefOptRepoS3Key), true, "option secure"); + TEST_RESULT_BOOL(cfgDefOptionSecure(cfgDefOptBackupHost), false, "option not secure"); + + TEST_ERROR(cfgDefOptionType(-1), AssertError, optionIdInvalidLowError); + TEST_RESULT_INT(cfgDefOptionType(cfgDefOptType), cfgDefOptTypeString, "string type"); + TEST_RESULT_INT(cfgDefOptionType(cfgDefOptCompress), cfgDefOptTypeBoolean, "boolean type"); + + TEST_ERROR(cfgDefOptionValid(cfgDefCmdInfo, cfgDefOptionTotal()), AssertError, optionIdInvalidHighError); + TEST_RESULT_BOOL(cfgDefOptionValid(cfgDefCmdBackup, cfgDefOptType), true, "option valid"); + TEST_RESULT_BOOL(cfgDefOptionValid(cfgDefCmdInfo, cfgDefOptType), false, "option not valid"); + } +} diff --git a/test/src/module/config/ruleTest.c b/test/src/module/config/ruleTest.c deleted file mode 100644 index b827fdac2..000000000 --- a/test/src/module/config/ruleTest.c +++ /dev/null @@ -1,167 +0,0 @@ -/*********************************************************************************************************************************** -Test Configuration Command and Option Rules -***********************************************************************************************************************************/ - -/*********************************************************************************************************************************** -Test run -***********************************************************************************************************************************/ -void testRun() -{ - // ----------------------------------------------------------------------------------------------------------------------------- - if (testBegin("iterate all option/command combinations")) - { - for (int optionId = 0; optionId < cfgOptionTotal(); optionId++) - { - // Ensure that option name maps back to id - const char *optionName = cfgOptionName(optionId); - TEST_RESULT_INT(cfgOptionId(optionName), optionId, "option name to id"); - - // Not much done with these except to ensure they don't blow up - cfgRuleOptionNameAlt(optionId); - cfgRuleOptionNegate(optionId); - cfgRuleOptionPrefix(optionId); - cfgRuleOptionSection(optionId); - cfgRuleOptionSecure(optionId); - cfgRuleOptionType(optionId); - - for (int commandId = 0; commandId < cfgCommandTotal(); commandId++) - { - // Ensure that command name maps back to id - const char *commandName = cfgCommandName(commandId); - TEST_RESULT_INT(cfgCommandId(commandName), commandId, "command name to id"); - - if (cfgRuleOptionValid(commandId, optionId)) - { - if (cfgRuleOptionAllowList(commandId, optionId)) - { - for (int valueId = 0; valueId < cfgRuleOptionAllowListValueTotal(commandId, optionId); valueId++) - { - const char *value = cfgRuleOptionAllowListValue(commandId, optionId, valueId); - - TEST_RESULT_STR_NE(value, NULL, "allow list value exists"); - TEST_RESULT_BOOL( - cfgRuleOptionAllowListValueValid(commandId, optionId, value), true, "allow list value valid"); - } - - TEST_RESULT_STR( - cfgRuleOptionAllowListValueValid(commandId, optionId, BOGUS_STR), NULL, "bogus allow list value"); - } - - if (cfgRuleOptionAllowRange(commandId, optionId)) - { - cfgRuleOptionAllowRangeMax(commandId, optionId); - cfgRuleOptionAllowRangeMin(commandId, optionId); - } - - cfgRuleOptionDefault(commandId, optionId); - - if (cfgRuleOptionDepend(commandId, optionId)) - { - TEST_RESULT_STR_NE( - cfgOptionName(cfgRuleOptionDependOption(commandId, optionId)), NULL, "depend option exists"); - - for (int valueId = 0; valueId < cfgRuleOptionDependValueTotal(commandId, optionId); valueId++) - { - const char *value = cfgRuleOptionDependValue(commandId, optionId, valueId); - - TEST_RESULT_STR_NE(value, NULL, "depend option value exists"); - TEST_RESULT_BOOL( - cfgRuleOptionDependValueValid(commandId, optionId, value), true, "depend option valid exists"); - } - - TEST_RESULT_STR( - cfgRuleOptionDependValueValid(commandId, optionId, BOGUS_STR), NULL, "bogus depend option value"); - } - - cfgRuleOptionRequired(commandId, optionId); - } - } - } - } - - // Static tests against known values -- these may break as options change so will need to be kept up to date. The tests have - // generally been selected to favor values that are not expected to change but adjustments are welcome as long as the type of - // test is not drastically changed. - // ----------------------------------------------------------------------------------------------------------------------------- - if (testBegin("check known values")) - { - TEST_RESULT_INT(cfgCommandId("archive-push"), CFGCMD_ARCHIVE_PUSH, "command id from name"); - TEST_RESULT_INT(cfgCommandId(BOGUS_STR), -1, "command id from invalid command name"); - - TEST_RESULT_INT(cfgOptionId("target"), CFGOPT_TARGET, "option id from name"); - TEST_RESULT_INT(cfgOptionId(BOGUS_STR), -1, "option id from invalid option name"); - - TEST_RESULT_BOOL(cfgRuleOptionAllowList(CFGCMD_BACKUP, CFGOPT_TYPE), true, "allow list valid"); - TEST_RESULT_BOOL(cfgRuleOptionAllowList(CFGCMD_BACKUP, CFGOPT_DB_HOST), false, "allow list not valid"); - - TEST_RESULT_INT(cfgRuleOptionAllowListValueTotal(CFGCMD_BACKUP, CFGOPT_TYPE), 3, "allow list total"); - - TEST_RESULT_STR(cfgRuleOptionAllowListValue(CFGCMD_BACKUP, CFGOPT_TYPE, 0), "full", "allow list value 0"); - TEST_RESULT_STR(cfgRuleOptionAllowListValue(CFGCMD_BACKUP, CFGOPT_TYPE, 1), "diff", "allow list value 1"); - TEST_RESULT_STR(cfgRuleOptionAllowListValue(CFGCMD_BACKUP, CFGOPT_TYPE, 2), "incr", "allow list value 2"); - - TEST_RESULT_BOOL(cfgRuleOptionAllowListValueValid(CFGCMD_BACKUP, CFGOPT_TYPE, "diff"), true, "allow list value valid"); - TEST_RESULT_BOOL( - cfgRuleOptionAllowListValueValid(CFGCMD_BACKUP, CFGOPT_TYPE, BOGUS_STR), false, "allow list value not valid"); - - TEST_RESULT_BOOL(cfgRuleOptionAllowRange(CFGCMD_BACKUP, CFGOPT_COMPRESS_LEVEL), true, "range allowed"); - TEST_RESULT_BOOL(cfgRuleOptionAllowRange(CFGCMD_BACKUP, CFGOPT_BACKUP_HOST), false, "range not allowed"); - - TEST_RESULT_DOUBLE(cfgRuleOptionAllowRangeMin(CFGCMD_BACKUP, CFGOPT_DB_TIMEOUT), 0.1, "range min"); - TEST_RESULT_DOUBLE(cfgRuleOptionAllowRangeMax(CFGCMD_BACKUP, CFGOPT_COMPRESS_LEVEL), 9, "range max"); - - TEST_RESULT_STR(cfgRuleOptionDefault(CFGCMD_BACKUP, CFGOPT_COMPRESS_LEVEL), "6", "default exists"); - TEST_RESULT_STR(cfgRuleOptionDefault(CFGCMD_BACKUP, CFGOPT_BACKUP_HOST), NULL, "default does not exist"); - - TEST_RESULT_BOOL(cfgRuleOptionDepend(CFGCMD_RESTORE, CFGOPT_REPO_S3_KEY), true, "has depend option"); - TEST_RESULT_BOOL(cfgRuleOptionDepend(CFGCMD_RESTORE, CFGOPT_TYPE), false, "does not have depend option"); - - TEST_RESULT_INT(cfgRuleOptionDependOption(CFGCMD_BACKUP, CFGOPT_DB_USER), CFGOPT_DB_HOST, "depend option id"); - - TEST_RESULT_INT(cfgRuleOptionDependValueTotal(CFGCMD_RESTORE, CFGOPT_TARGET), 3, "depend option value total"); - TEST_RESULT_STR(cfgRuleOptionDependValue(CFGCMD_RESTORE, CFGOPT_TARGET, 0), "name", "depend option value 0"); - TEST_RESULT_STR(cfgRuleOptionDependValue(CFGCMD_RESTORE, CFGOPT_TARGET, 1), "time", "depend option value 1"); - TEST_RESULT_STR(cfgRuleOptionDependValue(CFGCMD_RESTORE, CFGOPT_TARGET, 2), "xid", "depend option value 2"); - - TEST_RESULT_BOOL(cfgRuleOptionDependValueValid(CFGCMD_RESTORE, CFGOPT_TARGET, "time"), true, "depend option value valid"); - TEST_RESULT_BOOL( - cfgRuleOptionDependValueValid(CFGCMD_RESTORE, CFGOPT_TARGET, BOGUS_STR), false, "depend option value not valid"); - - TEST_RESULT_INT(cfgOptionIndexTotal(CFGOPT_DB_PATH), 8, "index total > 1"); - TEST_RESULT_INT(cfgOptionIndexTotal(CFGOPT_REPO_PATH), 1, "index total == 1"); - - TEST_RESULT_STR(cfgRuleOptionNameAlt(CFGOPT_DB1_HOST), "db-host", "alt name for indexed option"); - TEST_RESULT_STR(cfgRuleOptionNameAlt(CFGOPT_PROCESS_MAX), "thread-max", "alt name for non-indexed option"); - TEST_RESULT_STR(cfgRuleOptionNameAlt(CFGOPT_TYPE), NULL, "no alt name"); - - TEST_RESULT_BOOL(cfgRuleOptionNegate(CFGOPT_ONLINE), true, "option can be negated"); - TEST_RESULT_BOOL(cfgRuleOptionNegate(CFGOPT_TYPE), false, "option cannot be negated"); - - TEST_RESULT_STR(cfgRuleOptionPrefix(CFGOPT_DB_HOST), "db", "option prefix, index 1"); - TEST_RESULT_STR(cfgRuleOptionPrefix(CFGOPT_DB8_HOST), "db", "option prefix, index 8"); - TEST_RESULT_STR(cfgRuleOptionPrefix(CFGOPT_TYPE), NULL, "option has no prefix"); - - TEST_RESULT_BOOL(cfgRuleOptionRequired(CFGCMD_BACKUP, CFGOPT_CONFIG), true, "option required"); - TEST_RESULT_BOOL(cfgRuleOptionRequired(CFGCMD_RESTORE, CFGOPT_BACKUP_HOST), false, "option not required"); - - TEST_RESULT_STR(cfgRuleOptionSection(CFGOPT_REPO_S3_KEY), "global", "global section"); - TEST_RESULT_STR(cfgRuleOptionSection(CFGOPT_TYPE), NULL, "any section"); - - TEST_RESULT_BOOL(cfgRuleOptionSecure(CFGOPT_REPO_S3_KEY), true, "option secure"); - TEST_RESULT_BOOL(cfgRuleOptionSecure(CFGOPT_BACKUP_HOST), false, "option not secure"); - - TEST_RESULT_INT(cfgRuleOptionType(CFGOPT_TYPE), CFGOPTDEF_TYPE_STRING, "string type"); - TEST_RESULT_INT(cfgRuleOptionType(CFGOPT_COMPRESS), CFGOPTDEF_TYPE_BOOLEAN, "boolean type"); - - TEST_RESULT_BOOL(cfgRuleOptionValid(CFGCMD_BACKUP, CFGOPT_TYPE), true, "option valid"); - TEST_RESULT_BOOL(cfgRuleOptionValid(CFGCMD_INFO, CFGOPT_TYPE), false, "option not valid"); - - TEST_RESULT_STR(cfgCommandName(CFGCMD_ARCHIVE_GET), "archive-get", "command name from id"); - TEST_RESULT_STR(cfgCommandName(-1), NULL, "invalid command id (lower bound)"); - TEST_RESULT_STR(cfgCommandName(999999), NULL, "invalid command id (upper bound)"); - - TEST_RESULT_STR(cfgOptionName(CFGOPT_COMPRESS_LEVEL), "compress-level", "option name from invalid id"); - TEST_RESULT_STR(cfgOptionName(-1), NULL, "invalid option id (lower bound)"); - TEST_RESULT_STR(cfgOptionName(999999), NULL, "invalid option id (upper bound)"); - } -} diff --git a/test/test.pl b/test/test.pl index 0cc7207a2..19cecd409 100755 --- a/test/test.pl +++ b/test/test.pl @@ -37,6 +37,11 @@ use pgBackRest::Storage::Posix::Driver; use pgBackRest::Storage::Local; use pgBackRest::Version; +use pgBackRestBuild::Build; +use pgBackRestBuild::Build::Common; +use pgBackRestBuild::Config::Build; +use pgBackRestBuild::Config::BuildDefine; + use BackRestDoc::Custom::DocCustomRelease; use pgBackRestTest::Common::ContainerTest; @@ -73,6 +78,7 @@ test.pl [options] --build-only compile the C library / packages and run tests only --coverage-only only run coverage tests (as a subset of selected tests) --c-only only run C tests + --gen-only only run auto-generation --smart perform libc/package builds only when source timestamps have changed --no-package do not build packages --no-ci-config don't overwrite the current continuous integration config @@ -124,6 +130,7 @@ my $bNoLint = false; my $bBuildOnly = false; my $bCoverageOnly = false; my $bCOnly = false; +my $bGenOnly = false; my $bSmart = false; my $bNoPackage = false; my $bNoCiConfig = false; @@ -157,6 +164,7 @@ GetOptions ('q|quiet' => \$bQuiet, 'no-ci-config' => \$bNoCiConfig, 'coverage-only' => \$bCoverageOnly, 'c-only' => \$bCOnly, + 'gen-only' => \$bGenOnly, 'smart' => \$bSmart, 'dev' => \$bDev, 'expect' => \$bExpect, @@ -273,6 +281,41 @@ eval my $oStorageBackRest = new pgBackRest::Storage::Local( $strBackRestBase, new pgBackRest::Storage::Posix::Driver({bFileSync => false, bPathSync => false})); + ################################################################################################################################ + # Auto-generate C files + ################################################################################################################################ + my $rhBuild = + { + 'config' => + { + &BLD_DATA => buildConfig(), + &BLD_PATH => 'config', + }, + + 'configDefine' => + { + &BLD_DATA => buildConfigDefine(), + &BLD_PATH => 'config', + }, + }; + + buildAll("${strBackRestBase}/src", $rhBuild); + + ################################################################################################################################ + # Auto-generate XS files + # + # Use statements are put here so this will be easy to get ride of someday. + ################################################################################################################################ + use lib dirname(dirname($0)) . '/libc/build/lib'; + use pgBackRestLibC::Build; ## no critic (Modules::ProhibitConditionalUseStatements) + + buildXsAll("${strBackRestBase}/libc"); + + if ($bGenOnly) + { + exit 0; + } + ################################################################################################################################ # Build Docker containers ################################################################################################################################ @@ -352,7 +395,7 @@ eval my $strVagrantPath = "${strBackRestBase}/test/.vagrant"; my $strLibCPath = "${strVagrantPath}/libc"; my $strLibCSmart = "${strLibCPath}/build.timestamp"; - my @stryLibCSrcPath = ('build', 'doc', 'libc', 'src', 'lib/pgBackRest/Config'); + my @stryLibCSrcPath = ('libc', 'src'); # VM Info my $oVm = vmGet(); @@ -408,10 +451,6 @@ eval {bSuppressStdErr => true}); } - # Replace config path with base lib path for copy operation - pop(@stryLibCSrcPath); - push(@stryLibCSrcPath, 'lib'); - foreach my $strLibCSrcPath (@stryLibCSrcPath) { $oStorageBackRest->pathCreate( @@ -425,19 +464,6 @@ eval ($bContainerExists ? "'" : ''), {bSuppressStdErr => true, bShowOutputAsync => $bLogDetail}); - if ($strBuildVM eq $strVmHost) - { - foreach my $strFile ( - 'src/config/config.auto.c', 'src/config/config.auto.h', 'src/config/config.auto.md', - 'src/config/configRule.auto.c', 'src/config/configRule.auto.md', 'libc/lib/pgBackRest/LibC.pm') - { - $oStorageBackRest->copy( - "${strLibCPath}/${strBuildVM}/${strFile}", - $oStorageBackRest->openWrite( - "${strBackRestBase}/${strFile}", {bPathCreate => true, lTimestamp => $lTimestampLast})); - } - } - # CO7 LibC.xs needs to be patched to ignore maybe-uninitialized warnings due to issue in a Perl header: # embed.h:609:37: warning: 'iv' may be used uninitialized in this function [-Wmaybe-uninitialized] # #define sv_setiv(a,b) Perl_sv_setiv(aTHX_ a,b) @@ -488,9 +514,9 @@ eval BACKREST_VERSION =~ /dev$/ ? substr(BACKREST_VERSION, 0, length(BACKREST_VERSION) - 3) . '.999' : BACKREST_VERSION; - if (libCVersion() ne $strLibCVersion) + if (libcVersion() ne $strLibCVersion) { - confess &log(ERROR, $strLibCVersion . ' was expected for LibC version but found ' . libCVersion()); + confess &log(ERROR, $strLibCVersion . ' was expected for LibC version but found ' . libcVersion()); } } }