X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fconfigurationreader.cpp;fp=src%2Fconfigurationreader.cpp;h=1870a873b08f7b4547d7ad953cfd0e3eba91c68a;hb=1c4a605ad92c57118ecb6722bace5501c8918af0;hp=18945b6ecd653d4c52ca11d9ca098fa0be51cdac;hpb=e94862b3c75c10a1de57ebdb8cf9e9e2567560eb;p=ric-plt%2Fsdl.git diff --git a/src/configurationreader.cpp b/src/configurationreader.cpp index 18945b6..1870a87 100644 --- a/src/configurationreader.cpp +++ b/src/configurationreader.cpp @@ -195,6 +195,19 @@ namespace for (const auto &namespaceConfigurationMapItem : namespaceConfigurationMap ) parseNsConfiguration(namespaceConfigurations, namespaceConfigurationMapItem.first, namespaceConfigurationMapItem.second.first, namespaceConfigurationMapItem.second.second); } + + void appendDBPortToAddrList(std::string& addresses, const std::string& port) + { + size_t base(0); + auto pos = addresses.find(',', base); + while (std::string::npos != pos) + { + addresses.insert(pos, ":" + port); + base = pos + 2 + port.size(); + pos = addresses.find(',', base); + } + addresses.append(":" + port); + } } ConfigurationReader::ConfigurationReader(std::shared_ptr logger): @@ -306,24 +319,44 @@ void ConfigurationReader::readDatabaseConfiguration(DatabaseConfiguration& datab if (sourceForDatabaseConfiguration == dbHostEnvVariableName) { // NOTE: Redis cluster is not currently configurable via environment variables. - if (sentinelPortEnvVariableValue.empty()) + std::string dbHostAddrs; + if (!dbHostEnvVariableValue.empty() && sentinelPortEnvVariableValue.empty() && dbClusterAddrListEnvVariableValue.empty()) { validateAndSetDbType("redis-standalone", databaseConfiguration, sourceForDatabaseConfiguration); - if (dbPortEnvVariableValue.empty()) - parseDatabaseServersConfigurationFromString(databaseConfiguration, dbHostEnvVariableValue, sourceForDatabaseConfiguration); - else - parseDatabaseServersConfigurationFromString(databaseConfiguration, dbHostEnvVariableValue + ":" + dbPortEnvVariableValue, sourceForDatabaseConfiguration); + dbHostAddrs = dbHostEnvVariableValue; + } + else if (!dbHostEnvVariableValue.empty() && !sentinelPortEnvVariableValue.empty() && dbClusterAddrListEnvVariableValue.empty()) + { + validateAndSetDbType("redis-sentinel", databaseConfiguration, sourceForDatabaseConfiguration); + dbHostAddrs = dbHostEnvVariableValue; + } + else if (sentinelPortEnvVariableValue.empty() && !dbClusterAddrListEnvVariableValue.empty()) + { + validateAndSetDbType("sdl-standalone-cluster", databaseConfiguration, sourceForDatabaseConfiguration); + dbHostAddrs = dbClusterAddrListEnvVariableValue; + } + else if (!sentinelPortEnvVariableValue.empty() && !dbClusterAddrListEnvVariableValue.empty()) + { + validateAndSetDbType("sdl-sentinel-cluster", databaseConfiguration, sourceForDatabaseConfiguration); + dbHostAddrs = dbClusterAddrListEnvVariableValue; } else { - if (dbClusterAddrListEnvVariableValue.empty()) - validateAndSetDbType("redis-sentinel", databaseConfiguration, sourceForDatabaseConfiguration); - else { - validateAndSetDbType("sdl-cluster", databaseConfiguration, sourceForDatabaseConfiguration); - parseDatabaseServersConfigurationFromString(databaseConfiguration, - dbClusterAddrListEnvVariableValue, - dbClusterAddrListEnvVariableName); - } + std::ostringstream os; + os << "Configuration error in " << sourceForDatabaseConfiguration << ": " + << "Missing environment variable configuration!"; + throw Exception(os.str()); + } + + if (!dbPortEnvVariableValue.empty()) + appendDBPortToAddrList(dbHostAddrs, dbPortEnvVariableValue); + parseDatabaseServersConfigurationFromString(databaseConfiguration, + dbHostAddrs, + sourceForDatabaseConfiguration); + auto dbType = databaseConfiguration.getDbType(); + if (DatabaseConfiguration::DbType::REDIS_SENTINEL == dbType || + DatabaseConfiguration::DbType::SDL_SENTINEL_CLUSTER == dbType) + { databaseConfiguration.checkAndApplySentinelAddress(dbHostEnvVariableValue + ":" + sentinelPortEnvVariableValue); databaseConfiguration.checkAndApplySentinelMasterName(sentinelMasterNameEnvVariableValue); }