Skip to content

Commit 40a5c1c

Browse files
[RouteOrch] fix performance regression in ResponsePublisher
Signed-off-by: Stepan Blyschak <stepanb@nvidia.com>
1 parent dd9cf3d commit 40a5c1c

3 files changed

Lines changed: 15 additions & 11 deletions

File tree

orchagent/response_publisher.cpp

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -65,18 +65,11 @@ void RecordResponse(const std::string &response_channel, const std::string &key,
6565
} // namespace
6666

6767
ResponsePublisher::ResponsePublisher(const std::string &dbName, bool buffered, bool db_write_thread)
68-
: m_db(std::make_unique<swss::DBConnector>(dbName, 0)), m_buffered(buffered)
68+
: m_db(std::make_unique<swss::DBConnector>(dbName, 0)),
69+
m_ntf_pipe(std::make_unique<swss::RedisPipeline>(m_db.get())),
70+
m_db_pipe(std::make_unique<swss::RedisPipeline>(m_db.get())),
71+
m_buffered(buffered)
6972
{
70-
if (m_buffered)
71-
{
72-
m_ntf_pipe = std::make_unique<swss::RedisPipeline>(m_db.get());
73-
m_db_pipe = std::make_unique<swss::RedisPipeline>(m_db.get());
74-
}
75-
else
76-
{
77-
m_ntf_pipe = std::make_unique<swss::RedisPipeline>(m_db.get(), 1);
78-
m_db_pipe = std::make_unique<swss::RedisPipeline>(m_db.get(), 1);
79-
}
8073
if (db_write_thread)
8174
{
8275
m_update_thread = std::unique_ptr<std::thread>(new std::thread(&ResponsePublisher::dbUpdateThread, this));
@@ -164,6 +157,11 @@ void ResponsePublisher::writeToDBInternal(const std::string &table, const std::s
164157
auto attrs = values;
165158
if (op == SET_COMMAND)
166159
{
160+
if (m_directDbWrite)
161+
{
162+
applStateTable.set(key, attrs);
163+
return;
164+
}
167165
if (replace)
168166
{
169167
applStateTable.del(key);

orchagent/response_publisher.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,11 @@ class ResponsePublisher : public ResponsePublisherInterface
6060
*/
6161
void setBuffered(bool buffered);
6262

63+
64+
// When true, write attributes directly to DB without merge logic.
65+
// When false (default), check for existing keys and filter NULL-valued attributes.
66+
bool m_directDbWrite = false;
67+
6368
private:
6469
struct entry
6570
{

orchagent/routeorch.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ RouteOrch::RouteOrch(DBConnector *db, vector<table_name_with_pri_t> &tableNames,
5555
SWSS_LOG_ENTER();
5656

5757
m_publisher.setBuffered(true);
58+
m_publisher.m_directDbWrite = true;
5859

5960
sai_attribute_t attr;
6061
attr.id = SAI_SWITCH_ATTR_NUMBER_OF_ECMP_GROUPS;

0 commit comments

Comments
 (0)