@@ -29,12 +29,34 @@ VlanMgr::VlanMgr(DBConnector *cfgDb, DBConnector *appDb, DBConnector *stateDb, c
29
29
m_stateVlanTable(stateDb, STATE_VLAN_TABLE_NAME),
30
30
m_stateVlanMemberTable(stateDb, STATE_VLAN_MEMBER_TABLE_NAME),
31
31
m_appVlanTableProducer(appDb, APP_VLAN_TABLE_NAME),
32
- m_appVlanMemberTableProducer(appDb, APP_VLAN_MEMBER_TABLE_NAME)
32
+ m_appVlanMemberTableProducer(appDb, APP_VLAN_MEMBER_TABLE_NAME),
33
+ replayDone(false )
33
34
{
34
35
SWSS_LOG_ENTER ();
35
36
36
37
if (WarmStart::isWarmStart ())
37
38
{
39
+ vector<string> vlanKeys, vlanMemberKeys;
40
+
41
+ /* cache all vlan and vlan member config */
42
+ m_cfgVlanTable.getKeys (vlanKeys);
43
+ m_cfgVlanMemberTable.getKeys (vlanMemberKeys);
44
+ for (auto k : vlanKeys)
45
+ {
46
+ m_vlanReplay.insert (k);
47
+ }
48
+ for (auto k : vlanMemberKeys)
49
+ {
50
+ m_vlanMemberReplay.insert (k);
51
+ }
52
+ if (m_vlanReplay.empty ())
53
+ {
54
+ replayDone = true ;
55
+ WarmStart::setWarmStartState (" vlanmgrd" , WarmStart::REPLAYED);
56
+ SWSS_LOG_NOTICE (" vlanmgr warmstart state set to REPLAYED" );
57
+ WarmStart::setWarmStartState (" vlanmgrd" , WarmStart::RECONCILED);
58
+ SWSS_LOG_NOTICE (" vlanmgr warmstart state set to RECONCILED" );
59
+ }
38
60
const std::string cmds = std::string (" " )
39
61
+ IP_CMD + " link show " + DOT1Q_BRIDGE_NAME + " 2>/dev/null" ;
40
62
@@ -298,6 +320,7 @@ void VlanMgr::doVlanTask(Consumer &consumer)
298
320
if (isVlanStateOk (key) && m_vlans.find (key) == m_vlans.end ())
299
321
{
300
322
m_vlans.insert (key);
323
+ m_vlanReplay.erase (kfvKey (t));
301
324
it = consumer.m_toSync .erase (it);
302
325
SWSS_LOG_DEBUG (" %s already created" , kfvKey (t).c_str ());
303
326
continue ;
@@ -308,6 +331,7 @@ void VlanMgr::doVlanTask(Consumer &consumer)
308
331
{
309
332
addHostVlan (vlan_id);
310
333
}
334
+ m_vlanReplay.erase (kfvKey (t));
311
335
312
336
/* set up host env .... */
313
337
for (auto i : kfvFieldsValues (t))
@@ -394,6 +418,16 @@ void VlanMgr::doVlanTask(Consumer &consumer)
394
418
it = consumer.m_toSync .erase (it);
395
419
}
396
420
}
421
+ if (!replayDone && m_vlanReplay.empty () &&
422
+ m_vlanMemberReplay.empty () &&
423
+ WarmStart::isWarmStart ())
424
+ {
425
+ replayDone = true ;
426
+ WarmStart::setWarmStartState (" vlanmgrd" , WarmStart::REPLAYED);
427
+ SWSS_LOG_NOTICE (" vlanmgr warmstart state set to REPLAYED" );
428
+ WarmStart::setWarmStartState (" vlanmgrd" , WarmStart::RECONCILED);
429
+ SWSS_LOG_NOTICE (" vlanmgr warmstart state set to RECONCILED" );
430
+ }
397
431
}
398
432
399
433
bool VlanMgr::isMemberStateOk (const string &alias)
@@ -536,6 +570,7 @@ void VlanMgr::doVlanMemberTask(Consumer &consumer)
536
570
if (isVlanMemberStateOk (kfvKey (t)))
537
571
{
538
572
SWSS_LOG_DEBUG (" %s already set" , kfvKey (t).c_str ());
573
+ m_vlanMemberReplay.erase (kfvKey (t));
539
574
it = consumer.m_toSync .erase (it);
540
575
continue ;
541
576
}
@@ -577,6 +612,8 @@ void VlanMgr::doVlanMemberTask(Consumer &consumer)
577
612
FieldValueTuple s (" state" , " ok" );
578
613
fvVector.push_back (s);
579
614
m_stateVlanMemberTable.set (kfvKey (t), fvVector);
615
+
616
+ m_vlanMemberReplay.erase (kfvKey (t));
580
617
}
581
618
}
582
619
else if (op == DEL_COMMAND)
@@ -603,6 +640,16 @@ void VlanMgr::doVlanMemberTask(Consumer &consumer)
603
640
/* Other than the case of member port/lag is not ready, no retry will be performed */
604
641
it = consumer.m_toSync .erase (it);
605
642
}
643
+ if (!replayDone && m_vlanMemberReplay.empty () &&
644
+ WarmStart::isWarmStart ())
645
+ {
646
+ replayDone = true ;
647
+ WarmStart::setWarmStartState (" vlanmgrd" , WarmStart::REPLAYED);
648
+ SWSS_LOG_NOTICE (" vlanmgr warmstart state set to REPLAYED" );
649
+ WarmStart::setWarmStartState (" vlanmgrd" , WarmStart::RECONCILED);
650
+ SWSS_LOG_NOTICE (" vlanmgr warmstart state set to RECONCILED" );
651
+
652
+ }
606
653
}
607
654
608
655
void VlanMgr::doTask (Consumer &consumer)
0 commit comments