@@ -91,6 +91,7 @@ void WarmStart::initialize(const std::string &app_name,
9191 std::unique_ptr<Table>(new Table (warmStart.m_cfgDb .get (), CFG_WARM_RESTART_TABLE_NAME));
9292
9393 warmStart.m_initialized = true ;
94+ warmStart.m_warmbootState = WSUNKNOWN;
9495}
9596
9697/*
@@ -294,6 +295,13 @@ void WarmStart::getWarmStartState(const std::string &app_name, WarmStartState &s
294295 return ;
295296 }
296297
298+ if (app_name == warmStart.m_appName &&
299+ warmStart.m_warmbootState != WSUNKNOWN) {
300+ /* Cache is up-to-date. Read state from cache. */
301+ state = warmStart.m_warmbootState ;
302+ return ;
303+ }
304+
297305 warmStart.m_stateWarmRestartTable ->hget (app_name, " state" , statestr);
298306
299307 /* If warm-start is enabled, state cannot be assumed as Reconciled
@@ -309,7 +317,12 @@ void WarmStart::getWarmStartState(const std::string &app_name, WarmStartState &s
309317 break ;
310318 }
311319 }
312-
320+ if (app_name == warmStart.m_appName )
321+ {
322+ /* Update cache. */
323+ warmStart.m_warmbootState = state;
324+ }
325+
313326 SWSS_LOG_INFO (" %s warm start state get %s(%d)" ,
314327 app_name.c_str (), statestr.c_str (), state);
315328
@@ -325,6 +338,12 @@ void WarmStart::setWarmStartState(const std::string &app_name, WarmStartState st
325338 " state" ,
326339 warmStartStateNameMap.at (state).c_str ());
327340
341+ if (app_name == warmStart.m_appName )
342+ {
343+ /* Update cache. */
344+ warmStart.m_warmbootState = state;
345+ }
346+
328347 SWSS_LOG_NOTICE (" %s warm start state changed to %s" ,
329348 app_name.c_str (),
330349 warmStartStateNameMap.at (state).c_str ());
0 commit comments