bool WarmStart::checkWarmStart()

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;
}