@@ -20,6 +20,9 @@ OrchDaemon::~OrchDaemon()
20
20
21
21
if (m_asicDb)
22
22
delete (m_asicDb);
23
+
24
+ for (Orch *o : m_orchList)
25
+ delete (o);
23
26
}
24
27
25
28
bool OrchDaemon::init ()
@@ -34,11 +37,12 @@ bool OrchDaemon::init()
34
37
APP_LAG_TABLE_NAME
35
38
};
36
39
37
- m_portsO = new PortsOrch (m_applDb, ports_tables);
38
- m_intfsO = new IntfsOrch (m_applDb, APP_INTF_TABLE_NAME, m_portsO );
39
- m_neighO = new NeighOrch (m_applDb, APP_NEIGH_TABLE_NAME, m_portsO );
40
- m_routeO = new RouteOrch (m_applDb, APP_ROUTE_TABLE_NAME, m_portsO, m_neighO );
40
+ PortsOrch *ports_orch = new PortsOrch (m_applDb, ports_tables);
41
+ IntfsOrch *intfs_orch = new IntfsOrch (m_applDb, APP_INTF_TABLE_NAME, ports_orch );
42
+ NeighOrch *neigh_orch = new NeighOrch (m_applDb, APP_NEIGH_TABLE_NAME, ports_orch );
43
+ RouteOrch *route_orch = new RouteOrch (m_applDb, APP_ROUTE_TABLE_NAME, ports_orch, neigh_orch );
41
44
45
+ m_orchList = { ports_orch, intfs_orch, neigh_orch, route_orch };
42
46
m_select = new Select ();
43
47
44
48
return true ;
@@ -48,16 +52,15 @@ void OrchDaemon::start()
48
52
{
49
53
SWSS_LOG_ENTER ();
50
54
51
- int ret;
52
- m_select->addSelectables (m_portsO->getConsumers ());
53
- m_select->addSelectables (m_intfsO->getConsumers ());
54
- m_select->addSelectables (m_neighO->getConsumers ());
55
- m_select->addSelectables (m_routeO->getConsumers ());
55
+ for (Orch *o : m_orchList)
56
+ {
57
+ m_select->addSelectables (o->getSelectables ());
58
+ }
56
59
57
60
while (true )
58
61
{
59
62
Selectable *s;
60
- int fd;
63
+ int fd, ret ;
61
64
62
65
ret = m_select->select (&s, &fd, 1 );
63
66
if (ret == Select::ERROR)
@@ -67,7 +70,14 @@ void OrchDaemon::start()
67
70
}
68
71
69
72
if (ret == Select::TIMEOUT)
70
- continue ;
73
+ {
74
+ /* After every TIMEOUT, periodically check all m_toSync map to
75
+ * execute all the remaining tasks that need to be retried. */
76
+ for (Orch *o : m_orchList)
77
+ {
78
+ o->doTask ();
79
+ }
80
+ }
71
81
72
82
Orch *o = getOrchByConsumer ((ConsumerTable *)s);
73
83
o->execute (((ConsumerTable *)s)->getTableName ());
@@ -78,13 +88,11 @@ Orch *OrchDaemon::getOrchByConsumer(ConsumerTable *c)
78
88
{
79
89
SWSS_LOG_ENTER ();
80
90
81
- if (m_portsO->hasConsumer (c))
82
- return m_portsO;
83
- if (m_intfsO->hasConsumer (c))
84
- return m_intfsO;
85
- if (m_neighO->hasConsumer (c))
86
- return m_neighO;
87
- if (m_routeO->hasConsumer (c))
88
- return m_routeO;
91
+ for (Orch *o : m_orchList)
92
+ {
93
+ if (o->hasSelectable (c))
94
+ return o;
95
+ }
96
+
89
97
return nullptr ;
90
98
}
0 commit comments