in common/configdb.cpp [18:58]
void ConfigDBConnector_Native::db_connect(string db_name, bool wait_for_init, bool retry_on)
{
m_db_name = db_name;
m_key_separator = m_table_name_separator = get_db_separator(db_name);
SonicV2Connector_Native::connect(m_db_name, retry_on);
if (wait_for_init)
{
auto& client = get_redis_client(m_db_name);
auto pubsub = make_shared<PubSub>(&client);
auto initialized = client.get(INIT_INDICATOR);
if (!initialized || initialized->empty())
{
string pattern = "__keyspace@" + to_string(get_dbid(m_db_name)) + "__:" + INIT_INDICATOR;
pubsub->psubscribe(pattern);
for (;;)
{
auto item = pubsub->listen_message();
if (item["type"] == "pmessage")
{
string channel = item["channel"];
size_t pos = channel.find(':');
string key;
if (pos != string::npos)
{
key = channel.substr(pos + 1);
}
if (key == INIT_INDICATOR)
{
initialized = client.get(INIT_INDICATOR);
if (initialized && !initialized->empty())
{
break;
}
}
}
}
pubsub->punsubscribe(pattern);
}
}
}