ArgsManager: Warn when ignoring network-specific config setting

When network-specific options such as -addnode, -connect, etc are
specified in the default section of the config file, but that setting is
ignored due to testnet or regtest being in use, and it is not overridden
by either a command line option or a setting in the [regtest] or [test]
section of the config file, a warning is added to the log, eg:

  Warning: Config setting for -connect only applied on regtest network when in [regtest] section.
This commit is contained in:
Anthony Towns 2018-04-04 18:07:00 +10:00
parent d1fc4d95af
commit 68797e20f4
3 changed files with 41 additions and 0 deletions

View File

@ -803,6 +803,11 @@ void InitParameterInteraction()
if (gArgs.SoftSetBoolArg("-whitelistrelay", true)) if (gArgs.SoftSetBoolArg("-whitelistrelay", true))
LogPrintf("%s: parameter interaction: -whitelistforcerelay=1 -> setting -whitelistrelay=1\n", __func__); LogPrintf("%s: parameter interaction: -whitelistforcerelay=1 -> setting -whitelistrelay=1\n", __func__);
} }
// Warn if network-specific options (-addnode, -connect, etc) are
// specified in default section of config file, but not overridden
// on the command line or in this network's section of the config file.
gArgs.WarnForSectionOnlyArgs();
} }
static std::string ResolveErrMsg(const char * const optname, const std::string& strBind) static std::string ResolveErrMsg(const char * const optname, const std::string& strBind)

View File

@ -600,6 +600,34 @@ ArgsManager::ArgsManager() :
// nothing to do // nothing to do
} }
void ArgsManager::WarnForSectionOnlyArgs()
{
// if there's no section selected, don't worry
if (m_network.empty()) return;
// if it's okay to use the default section for this network, don't worry
if (m_network == CBaseChainParams::MAIN) return;
for (const auto& arg : m_network_only_args) {
std::pair<bool, std::string> found_result;
// if this option is overridden it's fine
found_result = ArgsManagerHelper::GetArgHelper(m_override_args, arg);
if (found_result.first) continue;
// if there's a network-specific value for this option, it's fine
found_result = ArgsManagerHelper::GetArgHelper(m_config_args, ArgsManagerHelper::NetworkArg(*this, arg));
if (found_result.first) continue;
// if there isn't a default value for this option, it's fine
found_result = ArgsManagerHelper::GetArgHelper(m_config_args, arg);
if (!found_result.first) continue;
// otherwise, issue a warning
LogPrintf("Warning: Config setting for %s only applied on %s network when in [%s] section.\n", arg, m_network, m_network);
}
}
void ArgsManager::SelectConfigNetwork(const std::string& network) void ArgsManager::SelectConfigNetwork(const std::string& network)
{ {
m_network = network; m_network = network;

View File

@ -245,6 +245,14 @@ public:
void ParseParameters(int argc, const char*const argv[]); void ParseParameters(int argc, const char*const argv[]);
void ReadConfigFile(const std::string& confPath); void ReadConfigFile(const std::string& confPath);
/**
* Log warnings for options in m_section_only_args when
* they are specified in the default section but not overridden
* on the command line or in a network-specific section in the
* config file.
*/
void WarnForSectionOnlyArgs();
/** /**
* Return a vector of strings of the given argument * Return a vector of strings of the given argument
* *