@@ -103,6 +103,7 @@ void WarmStart::initialize(const std::string &app_name,
103103 std::unique_ptr<Table>(new Table (warmStart.m_cfgDb .get (), CFG_WARM_RESTART_TABLE_NAME));
104104
105105 warmStart.m_initialized = true ;
106+ warmStart.m_warmbootState = WSUNKNOWN;
106107}
107108
108109/*
@@ -306,6 +307,13 @@ void WarmStart::getWarmStartState(const std::string &app_name, WarmStartState &s
306307 return ;
307308 }
308309
310+ if (app_name == warmStart.m_appName &&
311+ warmStart.m_warmbootState != WSUNKNOWN) {
312+ /* Cache is up-to-date. Read state from cache. */
313+ state = warmStart.m_warmbootState ;
314+ return ;
315+ }
316+
309317 warmStart.m_stateWarmRestartTable ->hget (app_name, " state" , statestr);
310318
311319 /* If warm-start is enabled, state cannot be assumed as Reconciled
@@ -321,7 +329,12 @@ void WarmStart::getWarmStartState(const std::string &app_name, WarmStartState &s
321329 break ;
322330 }
323331 }
324-
332+ if (app_name == warmStart.m_appName )
333+ {
334+ /* Update cache. */
335+ warmStart.m_warmbootState = state;
336+ }
337+
325338 SWSS_LOG_INFO (" %s warm start state get %s(%d)" ,
326339 app_name.c_str (), statestr.c_str (), state);
327340
@@ -337,6 +350,12 @@ void WarmStart::setWarmStartState(const std::string &app_name, WarmStartState st
337350 " state" ,
338351 warmStartStateNameMap ()->at (state).c_str ());
339352
353+ if (app_name == warmStart.m_appName )
354+ {
355+ /* Update cache. */
356+ warmStart.m_warmbootState = state;
357+ }
358+
340359 SWSS_LOG_NOTICE (" %s warm start state changed to %s" ,
341360 app_name.c_str (),
342361 warmStartStateNameMap ()->at (state).c_str ());
0 commit comments