diff --git a/orchagent/response_publisher.cpp b/orchagent/response_publisher.cpp index f630ddf5899..ef3477ece17 100644 --- a/orchagent/response_publisher.cpp +++ b/orchagent/response_publisher.cpp @@ -65,18 +65,11 @@ void RecordResponse(const std::string &response_channel, const std::string &key, } // namespace ResponsePublisher::ResponsePublisher(const std::string &dbName, bool buffered, bool db_write_thread) - : m_db(std::make_unique(dbName, 0)), m_buffered(buffered) + : m_db(std::make_unique(dbName, 0)), + m_ntf_pipe(std::make_unique(m_db.get())), + m_db_pipe(std::make_unique(m_db.get())), + m_buffered(buffered) { - if (m_buffered) - { - m_ntf_pipe = std::make_unique(m_db.get()); - m_db_pipe = std::make_unique(m_db.get()); - } - else - { - m_ntf_pipe = std::make_unique(m_db.get(), 1); - m_db_pipe = std::make_unique(m_db.get(), 1); - } if (db_write_thread) { m_update_thread = std::unique_ptr(new std::thread(&ResponsePublisher::dbUpdateThread, this)); @@ -164,6 +157,11 @@ void ResponsePublisher::writeToDBInternal(const std::string &table, const std::s auto attrs = values; if (op == SET_COMMAND) { + if (m_directDbWrite) + { + applStateTable.set(key, attrs); + return; + } if (replace) { applStateTable.del(key); diff --git a/orchagent/response_publisher.h b/orchagent/response_publisher.h index e859852e3ff..4cb5c738710 100644 --- a/orchagent/response_publisher.h +++ b/orchagent/response_publisher.h @@ -60,6 +60,11 @@ class ResponsePublisher : public ResponsePublisherInterface */ void setBuffered(bool buffered); + + // When true, write attributes directly to DB without merge logic. + // When false (default), check for existing keys and filter NULL-valued attributes. + bool m_directDbWrite = false; + private: struct entry { diff --git a/orchagent/routeorch.cpp b/orchagent/routeorch.cpp index 0e34decaf85..f0e5fdcb632 100644 --- a/orchagent/routeorch.cpp +++ b/orchagent/routeorch.cpp @@ -55,6 +55,7 @@ RouteOrch::RouteOrch(DBConnector *db, vector &tableNames, SWSS_LOG_ENTER(); m_publisher.setBuffered(true); + m_publisher.m_directDbWrite = true; sai_attribute_t attr; attr.id = SAI_SWITCH_ATTR_NUMBER_OF_ECMP_GROUPS;