From 31f36a59bfd8a81b79129c9c41811cca7b152ced Mon Sep 17 00:00:00 2001 From: Shu0T1an ChenG Date: Wed, 4 Oct 2017 11:33:51 -0700 Subject: [PATCH] [portsyncd]: Add producer for state database updates - Add m_statePortTable to write to the state database once the ports are ready - Remove suffix Consumer in some variables since they are not 'consumers' Signed-off-by: Shu0T1an ChenG --- portsyncd/linksync.cpp | 23 ++++++++++++++--------- portsyncd/linksync.h | 4 ++-- portsyncd/portsyncd.cpp | 7 ++++--- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/portsyncd/linksync.cpp b/portsyncd/linksync.cpp index 9a0c232d3e8..6c509d8b0ff 100644 --- a/portsyncd/linksync.cpp +++ b/portsyncd/linksync.cpp @@ -30,18 +30,19 @@ extern set g_portSet; extern map> g_vlanMap; extern bool g_init; -LinkSync::LinkSync(DBConnector *db) : - m_portTableProducer(db, APP_PORT_TABLE_NAME), - m_vlanTableProducer(db, APP_VLAN_TABLE_NAME), - m_vlanMemberTableProducer(db, APP_VLAN_MEMBER_TABLE_NAME), - m_portTableConsumer(db, APP_PORT_TABLE_NAME), - m_vlanMemberTableConsumer(db, APP_VLAN_MEMBER_TABLE_NAME) +LinkSync::LinkSync(DBConnector *appl_db, DBConnector *state_db) : + m_portTableProducer(appl_db, APP_PORT_TABLE_NAME), + m_vlanTableProducer(appl_db, APP_VLAN_TABLE_NAME), + m_vlanMemberTableProducer(appl_db, APP_VLAN_MEMBER_TABLE_NAME), + m_portTable(appl_db, APP_PORT_TABLE_NAME), + m_vlanMemberTable(appl_db, APP_VLAN_MEMBER_TABLE_NAME), + m_statePortTable(state_db, STATE_PORT_TABLE_NAME, CONFIGDB_TABLE_NAME_SEPARATOR) { /* See the comments for g_portSet in portsyncd.cpp */ for (string port : g_portSet) { vector temp; - if (m_portTableConsumer.get(port, temp)) + if (m_portTable.get(port, temp)) { for (auto it : temp) { @@ -55,7 +56,7 @@ LinkSync::LinkSync(DBConnector *db) : } vector tuples; - m_vlanMemberTableConsumer.getTableContent(tuples); + m_vlanMemberTable.getTableContent(tuples); for (auto tuple : tuples) { @@ -183,7 +184,7 @@ void LinkSync::onMsg(int nlmsg_type, struct nl_object *obj) * non-front panel interfaces such as eth0, lo which are not in the * PORT_TABLE are ignored. */ vector temp; - if (m_portTableConsumer.get(key, temp)) + if (m_portTable.get(key, temp)) { /* TODO: When port is removed from the kernel */ if (nlmsg_type == RTM_DELLINK) @@ -195,6 +196,10 @@ void LinkSync::onMsg(int nlmsg_type, struct nl_object *obj) if (!g_init && g_portSet.find(key) != g_portSet.end()) { g_portSet.erase(key); + FieldValueTuple tuple("state", "ok"); + vector vector; + vector.push_back(tuple); + m_statePortTable.set(key, vector); } m_portTableProducer.set(key, fvVector); diff --git a/portsyncd/linksync.h b/portsyncd/linksync.h index b14832eb51e..43c5b715f0f 100644 --- a/portsyncd/linksync.h +++ b/portsyncd/linksync.h @@ -14,13 +14,13 @@ class LinkSync : public NetMsg public: enum { MAX_ADDR_SIZE = 64 }; - LinkSync(DBConnector *db); + LinkSync(DBConnector *appl_db, DBConnector *state_db); virtual void onMsg(int nlmsg_type, struct nl_object *obj); private: ProducerStateTable m_portTableProducer, m_vlanTableProducer, m_vlanMemberTableProducer; - Table m_portTableConsumer, m_vlanMemberTableConsumer; + Table m_portTable, m_vlanMemberTable, m_statePortTable; std::map m_ifindexNameMap; }; diff --git a/portsyncd/portsyncd.cpp b/portsyncd/portsyncd.cpp index c62550fd7f3..734bf31d73f 100644 --- a/portsyncd/portsyncd.cpp +++ b/portsyncd/portsyncd.cpp @@ -64,10 +64,11 @@ int main(int argc, char **argv) } } - DBConnector db(0, DBConnector::DEFAULT_UNIXSOCKET, 0); - ProducerStateTable p(&db, APP_PORT_TABLE_NAME); + DBConnector appl_db(APPL_DB, DBConnector::DEFAULT_UNIXSOCKET, 0); + DBConnector state_db(STATE_DB, DBConnector::DEFAULT_UNIXSOCKET, 0); + ProducerStateTable p(&appl_db, APP_PORT_TABLE_NAME); - LinkSync sync(&db); + LinkSync sync(&appl_db, &state_db); NetDispatcher::getInstance().registerMessageHandler(RTM_NEWLINK, &sync); NetDispatcher::getInstance().registerMessageHandler(RTM_DELLINK, &sync);