in common/warm_restart.cpp [86:140]
bool WarmStart::checkWarmStart(const std::string &app_name,
const std::string &docker_name,
const bool incr_restore_cnt)
{
std::string value;
auto& warmStart = getInstance();
// Check system level warm-restart config first
warmStart.m_stateWarmRestartEnableTable->hget("system", "enable", value);
if (value == "true")
{
warmStart.m_enabled = true;
warmStart.m_systemWarmRebootEnabled = true;
}
// Check docker level warm-restart configuration
warmStart.m_stateWarmRestartEnableTable->hget(docker_name, "enable", value);
if (value == "true")
{
warmStart.m_enabled = true;
}
// For cold start, the whole state db will be flushed including warm start table.
// Create the entry for this app here.
if (!warmStart.m_enabled)
{
warmStart.m_stateWarmRestartTable->hset(app_name, "restore_count", "0");
return false;
}
uint32_t restore_count = 0;
warmStart.m_stateWarmRestartTable->hget(app_name, "restore_count", value);
if (value == "")
{
SWSS_LOG_WARN("%s doing warm start, but restore_count not found in stateDB %s table, fall back to cold start",
app_name.c_str(), STATE_WARM_RESTART_TABLE_NAME);
warmStart.m_enabled = false;
warmStart.m_systemWarmRebootEnabled = false;
warmStart.m_stateWarmRestartTable->hset(app_name, "restore_count", "0");
return false;
}
if (incr_restore_cnt)
{
restore_count = (uint32_t)stoul(value);
restore_count++;
warmStart.m_stateWarmRestartTable->hset(app_name, "restore_count",
std::to_string(restore_count));
}
SWSS_LOG_NOTICE("%s doing warm start, restore count %d", app_name.c_str(),
restore_count);
return true;
}