in common/dbconnector.cpp [22:76]
void SonicDBConfig::parseDatabaseConfig(const string &file,
std::map<std::string, RedisInstInfo> &inst_entry,
std::unordered_map<std::string, SonicDBInfo> &db_entry,
std::unordered_map<int, std::string> &separator_entry)
{
ifstream i(file);
if (i.good())
{
try
{
json j;
i >> j;
for (auto it = j["INSTANCES"].begin(); it!= j["INSTANCES"].end(); it++)
{
string instName = it.key();
string socket;
auto path = it.value().find("unix_socket_path");
if (path != it.value().end())
{
socket = *path;
}
string hostname = it.value().at("hostname");
int port = it.value().at("port");
inst_entry[instName] = {socket, hostname, port};
}
for (auto it = j["DATABASES"].begin(); it!= j["DATABASES"].end(); it++)
{
string dbName = it.key();
string instName = it.value().at("instance");
int dbId = it.value().at("id");
string separator = it.value().at("separator");
db_entry[dbName] = {instName, dbId, separator};
separator_entry.emplace(dbId, separator);
}
}
catch (domain_error& e)
{
SWSS_LOG_ERROR("key doesn't exist in json object, NULL value has no iterator >> %s\n", e.what());
throw runtime_error("key doesn't exist in json object, NULL value has no iterator >> " + string(e.what()));
}
catch (exception &e)
{
SWSS_LOG_ERROR("Sonic database config file syntax error >> %s\n", e.what());
throw runtime_error("Sonic database config file syntax error >> " + string(e.what()));
}
}
else
{
SWSS_LOG_ERROR("Sonic database config file doesn't exist at %s\n", file.c_str());
throw runtime_error("Sonic database config file doesn't exist at " + file);
}
}