From 23db5fd09e0e91e65744609207adc1277965c025 Mon Sep 17 00:00:00 2001 From: Apoorv Sachan Date: Thu, 13 Nov 2025 15:05:40 +0000 Subject: [PATCH 1/2] add secondary poll factor to flex counter infra --- orchagent/bufferorch.cpp | 2 + orchagent/bufferorch.h | 1 + orchagent/copporch.cpp | 1 + orchagent/debugcounterorch.cpp | 2 + orchagent/debugcounterorch.h | 1 + .../flex_counter/flex_counter_manager.cpp | 27 +++++++++++++- orchagent/flex_counter/flex_counter_manager.h | 26 ++++++++++--- orchagent/flexcounterorch.cpp | 14 +++++++ orchagent/intfsorch.cpp | 1 + orchagent/intfsorch.h | 1 + orchagent/p4orch/tests/test_main.cpp | 8 ++++ orchagent/pfcwdorch.cpp | 3 +- orchagent/port_flr.lua | 5 ++- orchagent/portsorch.cpp | 5 +++ orchagent/portsorch.h | 1 + orchagent/saihelper.cpp | 37 +++++++++++++++++-- orchagent/saihelper.h | 4 ++ orchagent/vxlanorch.cpp | 3 +- 18 files changed, 127 insertions(+), 15 deletions(-) diff --git a/orchagent/bufferorch.cpp b/orchagent/bufferorch.cpp index f6b02edf3b..993fa4c87a 100644 --- a/orchagent/bufferorch.cpp +++ b/orchagent/bufferorch.cpp @@ -1,3 +1,4 @@ +#include "flex_counter_manager.h" #include "tokenize.h" #include "bufferorch.h" #include "directory.h" @@ -246,6 +247,7 @@ void BufferOrch::initFlexCounterGroupTable(void) setFlexCounterGroupParameter(BUFFER_POOL_WATERMARK_STAT_COUNTER_FLEX_COUNTER_GROUP, BUFFER_POOL_WATERMARK_FLEX_STAT_COUNTER_POLL_MSECS, + BUFFER_POOL_WATERMARK_DEFAULT_SECONDARY_POLL_FACTOR, "", // do not touch stats_mode BUFFER_POOL_PLUGIN_FIELD, bufferPoolWmSha); diff --git a/orchagent/bufferorch.h b/orchagent/bufferorch.h index 8182d77a1b..2867403a07 100644 --- a/orchagent/bufferorch.h +++ b/orchagent/bufferorch.h @@ -14,6 +14,7 @@ #define BUFFER_POOL_WATERMARK_STAT_COUNTER_FLEX_COUNTER_GROUP "BUFFER_POOL_WATERMARK_STAT_COUNTER" #define BUFFER_POOL_WATERMARK_FLEX_STAT_COUNTER_POLL_MSECS "60000" +#define BUFFER_POOL_WATERMARK_DEFAULT_SECONDARY_POLL_FACTOR "0" const string buffer_size_field_name = "size"; const string buffer_pool_type_field_name = "type"; diff --git a/orchagent/copporch.cpp b/orchagent/copporch.cpp index 05080c8ddc..ba8ce391ca 100644 --- a/orchagent/copporch.cpp +++ b/orchagent/copporch.cpp @@ -1388,6 +1388,7 @@ void CoppOrch::initTrapRatePlugin() setFlexCounterGroupParameter(HOSTIF_TRAP_COUNTER_FLEX_COUNTER_GROUP, "", // Do not touch poll interval + "", STATS_MODE_READ, FLOW_COUNTER_PLUGIN_FIELD, trapSha); diff --git a/orchagent/debugcounterorch.cpp b/orchagent/debugcounterorch.cpp index 85230ebf19..06b8c7e913 100644 --- a/orchagent/debugcounterorch.cpp +++ b/orchagent/debugcounterorch.cpp @@ -1,4 +1,5 @@ #include "debugcounterorch.h" +#include "flex_counter_manager.h" #include "portsorch.h" #include "rediscommand.h" #include "sai_serialize.h" @@ -54,6 +55,7 @@ DebugCounterOrch::DebugCounterOrch(DBConnector *db, const vector& table_ setFlexCounterGroupParameter(DEBUG_DROP_MONITOR_FLEX_COUNTER_GROUP, DEBUG_DROP_MONITOR_FLEX_COUNTER_POLLING_INTERVAL_MS, + DEBUG_DROP_MONITOR_SECONDARY_POLL_FACTOR, STATS_MODE_READ, PORT_PLUGIN_FIELD, dropMonitorSha); diff --git a/orchagent/debugcounterorch.h b/orchagent/debugcounterorch.h index 7df76efc2f..d72b06b53f 100644 --- a/orchagent/debugcounterorch.h +++ b/orchagent/debugcounterorch.h @@ -19,6 +19,7 @@ extern "C" { #define DEBUG_COUNTER_FLEX_COUNTER_GROUP "DEBUG_COUNTER" #define DEBUG_DROP_MONITOR_FLEX_COUNTER_GROUP "DEBUG_MONITOR_COUNTER" #define DEBUG_DROP_MONITOR_FLEX_COUNTER_POLLING_INTERVAL_MS "60000" +#define DEBUG_DROP_MONITOR_SECONDARY_POLL_FACTOR "0" using DebugCounterMap = std::unordered_map>; diff --git a/orchagent/flex_counter/flex_counter_manager.cpp b/orchagent/flex_counter/flex_counter_manager.cpp index d4350ace08..098777f1c6 100644 --- a/orchagent/flex_counter/flex_counter_manager.cpp +++ b/orchagent/flex_counter/flex_counter_manager.cpp @@ -1,5 +1,6 @@ #include "flex_counter_manager.h" +#include #include #include "schema.h" @@ -61,6 +62,7 @@ FlexCounterManager *FlexManagerDirectory::createFlexCounterManager(const string& const StatsMode stats_mode, const uint polling_interval, const bool enabled, + const uint secondary_poll_factor, FieldValueTuple fv_plugin) { if (m_managers.find(group_name) != m_managers.end()) @@ -77,6 +79,12 @@ FlexCounterManager *FlexManagerDirectory::createFlexCounterManager(const string& group_name.c_str()); return NULL; } + if (secondary_poll_factor != m_managers[group_name]->getSecondaryPollFactor()) + { + SWSS_LOG_ERROR("Secondary poll factor mismatch with alreasy created flex counter manager %s", + group_name.c_str()); + return NULL; + } if (enabled != m_managers[group_name]->getEnabled()) { SWSS_LOG_ERROR("Enabled field mismatch with already created flex counter manager %s", @@ -86,7 +94,7 @@ FlexCounterManager *FlexManagerDirectory::createFlexCounterManager(const string& return m_managers[group_name]; } FlexCounterManager *fc_manager = new FlexCounterManager(group_name, stats_mode, polling_interval, - enabled, fv_plugin); + enabled, secondary_poll_factor, fv_plugin); m_managers[group_name] = fc_manager; return fc_manager; } @@ -96,9 +104,10 @@ FlexCounterManager::FlexCounterManager( const StatsMode stats_mode, const uint polling_interval, const bool enabled, + const uint secondary_poll_factor, FieldValueTuple fv_plugin) : FlexCounterManager(false, group_name, stats_mode, - polling_interval, enabled, fv_plugin) + polling_interval, secondary_poll_factor, enabled, fv_plugin) { } @@ -108,10 +117,12 @@ FlexCounterManager::FlexCounterManager( const StatsMode stats_mode, const uint polling_interval, const bool enabled, + const uint secondary_poll_factor, FieldValueTuple fv_plugin) : group_name(group_name), stats_mode(stats_mode), polling_interval(polling_interval), + secondary_poll_factor(secondary_poll_factor), enabled(enabled), fv_plugin(fv_plugin), is_gearbox(is_gearbox) @@ -143,6 +154,7 @@ void FlexCounterManager::applyGroupConfiguration() setFlexCounterGroupParameter(group_name, std::to_string(polling_interval), + std::to_string(secondary_poll_factor), stats_mode_lookup.at(stats_mode), fvField(fv_plugin), fvValue(fv_plugin), @@ -161,6 +173,17 @@ void FlexCounterManager::updateGroupPollingInterval( group_name.c_str(), polling_interval); } +void FlexCounterManager::updateGroupSecondaryPollFactor( + const uint secondary_poll_factor) +{ + SWSS_LOG_ENTER(); + + setFlexCounterGroupSecondaryPollFactor(group_name, std::to_string(secondary_poll_factor), is_gearbox); + + SWSS_LOG_DEBUG("Set secondary poll factor for flex counter group '%s' to %d.", + group_name.c_str(), secondary_poll_factor); +} + // enableFlexCounterGroup will do nothing if the flex counter group is already // enabled. void FlexCounterManager::enableFlexCounterGroup() diff --git a/orchagent/flex_counter/flex_counter_manager.h b/orchagent/flex_counter/flex_counter_manager.h index f3810296f8..41ab7f065e 100644 --- a/orchagent/flex_counter/flex_counter_manager.h +++ b/orchagent/flex_counter/flex_counter_manager.h @@ -18,6 +18,8 @@ extern "C" { #include "sai.h" } +#define FLEX_COUNTER_DEFAULT_SECONDARY_POLL_FACTOR 0 + enum class StatsMode { READ, @@ -63,6 +65,7 @@ class FlexCounterManager const StatsMode stats_mode, const uint polling_interval, const bool enabled, + const uint secondary_poll_factor = 0, swss::FieldValueTuple fv_plugin = std::make_pair("","")); FlexCounterManager() @@ -74,6 +77,7 @@ class FlexCounterManager const StatsMode stats_mode, const uint polling_interval, const bool enabled, + const uint secondary_poll_factor = 0, swss::FieldValueTuple fv_plugin = std::make_pair("","")); FlexCounterManager(const FlexCounterManager&) = delete; @@ -81,6 +85,7 @@ class FlexCounterManager virtual ~FlexCounterManager(); void updateGroupPollingInterval(const uint polling_interval); + void updateGroupSecondaryPollFactor(const uint secondary_poll_factor); void enableFlexCounterGroup(); void disableFlexCounterGroup(); @@ -106,6 +111,11 @@ class FlexCounterManager return polling_interval; } + const uint& getSecondaryPollFactor() const + { + return secondary_poll_factor; + } + const bool& getEnabled() const { return enabled; @@ -122,6 +132,7 @@ class FlexCounterManager StatsMode stats_mode; uint polling_interval; bool enabled; + uint secondary_poll_factor; swss::FieldValueTuple fv_plugin; std::unordered_map installed_counters; bool is_gearbox; @@ -217,8 +228,9 @@ class FlexCounterCachedManager : public FlexCounterManager const StatsMode stats_mode, const uint polling_interval, const bool enabled, + const uint secondary_poll_factor = 0, swss::FieldValueTuple fv_plugin = std::make_pair("","")) : - FlexCounterManager(group_name, stats_mode, polling_interval, enabled, fv_plugin) + FlexCounterManager(group_name, stats_mode, polling_interval, enabled, secondary_poll_factor, fv_plugin) { } @@ -293,8 +305,9 @@ class FlexCounterTaggedCachedManager : public FlexCounterCachedManager const StatsMode stats_mode, const uint polling_interval, const bool enabled, + const uint secondary_poll_factor = 0, swss::FieldValueTuple fv_plugin = std::make_pair("","")) : - FlexCounterCachedManager(group_name, stats_mode, polling_interval, enabled, fv_plugin) + FlexCounterCachedManager(group_name, stats_mode, polling_interval, enabled, secondary_poll_factor, fv_plugin) { } @@ -327,15 +340,16 @@ class FlexCounterTaggedCachedManager : public FlexCounterCachedManager template class FlexCounterTaggedCachedManager::value>> : public FlexCounterCachedManager -{ +{ public: FlexCounterTaggedCachedManager( const std::string& group_name, const StatsMode stats_mode, const uint polling_interval, const bool enabled, + const uint secondary_poll_factor = 0, swss::FieldValueTuple fv_plugin = std::make_pair("","")) : - FlexCounterCachedManager(group_name, stats_mode, polling_interval, enabled, fv_plugin) + FlexCounterCachedManager(group_name, stats_mode, polling_interval, enabled, secondary_poll_factor, fv_plugin) { } @@ -375,8 +389,8 @@ class FlexManagerDirectory { public: FlexCounterManager* createFlexCounterManager(const std::string& group_name, const StatsMode stats_mode, - const uint polling_interval, const bool enabled, - swss::FieldValueTuple fv_plugin = std::make_pair("","")); + const uint polling_interval, bool enabled, + const uint secondary_poll_factor = 0, swss::FieldValueTuple fv_plugin = std::make_pair("","")); private: std::unordered_map m_managers; }; diff --git a/orchagent/flexcounterorch.cpp b/orchagent/flexcounterorch.cpp index 834838d7a5..cc8a885102 100644 --- a/orchagent/flexcounterorch.cpp +++ b/orchagent/flexcounterorch.cpp @@ -14,6 +14,7 @@ #include "portsorch.h" #include "pfcwdorch.h" #include "routeorch.h" +#include "schema.h" #include "srv6orch.h" #include "switchorch.h" #include "debugcounterorch.h" @@ -202,6 +203,19 @@ void FlexCounterOrch::doTask(Consumer &consumer) } } } + else if (field == SECONDARY_POLL_FACTOR_FIELD) + { + // Only handle FLR_INTERVAL_FACTOR for PORT counter group + if (key == PORT_KEY) + { + setFlexCounterGroupSecondaryPollFactor(flexCounterGroupMap[key], value); + + if (gPortsOrch && gPortsOrch->isGearboxEnabled()) + { + setFlexCounterGroupSecondaryPollFactor(flexCounterGroupMap[key], value, true); + } + } + } else if (field == BULK_CHUNK_SIZE_FIELD) { bulk_chunk_size = value; diff --git a/orchagent/intfsorch.cpp b/orchagent/intfsorch.cpp index a5fa104c9a..e3b55671e1 100644 --- a/orchagent/intfsorch.cpp +++ b/orchagent/intfsorch.cpp @@ -94,6 +94,7 @@ IntfsOrch::IntfsOrch(DBConnector *db, string tableName, VRFOrch *vrf_orch, DBCon setFlexCounterGroupParameter(RIF_STAT_COUNTER_FLEX_COUNTER_GROUP, RIF_FLEX_STAT_COUNTER_POLL_MSECS, + RIF_DEFAULT_SECONDARY_POLL_FACTOR, STATS_MODE_READ, RIF_PLUGIN_FIELD, rifRateSha); diff --git a/orchagent/intfsorch.h b/orchagent/intfsorch.h index aa5129bef4..b122b0729b 100644 --- a/orchagent/intfsorch.h +++ b/orchagent/intfsorch.h @@ -19,6 +19,7 @@ extern MacAddress gMacAddress; #define RIF_STAT_COUNTER_FLEX_COUNTER_GROUP "RIF_STAT_COUNTER" #define RIF_RATE_COUNTER_FLEX_COUNTER_GROUP "RIF_RATE_COUNTER" #define RIF_FLEX_STAT_COUNTER_POLL_MSECS "1000" +#define RIF_DEFAULT_SECONDARY_POLL_FACTOR "0" struct IntfsEntry { diff --git a/orchagent/p4orch/tests/test_main.cpp b/orchagent/p4orch/tests/test_main.cpp index 0ad50751bc..ed581e0318 100644 --- a/orchagent/p4orch/tests/test_main.cpp +++ b/orchagent/p4orch/tests/test_main.cpp @@ -254,6 +254,7 @@ int main(int argc, char *argv[]) void setFlexCounterGroupParameter(const std::string &group, const std::string &poll_interval, + const std::string &secondary_poll_factor, const std::string &stats_mode, const std::string &plugin_name, const std::string &plugins, @@ -284,6 +285,13 @@ void setFlexCounterGroupStatsMode(const std::string &group, return; } +void setFlexCounterGroupSecondaryPollFactor(const std::string &group, + const std::string &secondary_poll_factor, + bool is_gearbox) +{ + return; +} + void delFlexCounterGroup(const std::string &group, bool is_gearbox) { diff --git a/orchagent/pfcwdorch.cpp b/orchagent/pfcwdorch.cpp index b70b72bb0c..5f3d762e8d 100644 --- a/orchagent/pfcwdorch.cpp +++ b/orchagent/pfcwdorch.cpp @@ -2,6 +2,7 @@ #include #include #include "pfcwdorch.h" +#include "flex_counter_manager.h" #include "sai_serialize.h" #include "portsorch.h" #include "converter.h" @@ -719,7 +720,7 @@ PfcWdSwOrch::PfcWdSwOrch( } this->m_pfcwdFlexCounterManager = make_shared>( - "PFC_WD", StatsMode::READ, m_pollInterval, true, make_pair(QUEUE_PLUGIN_FIELD, plugins)); + "PFC_WD", StatsMode::READ, m_pollInterval, true, FLEX_COUNTER_DEFAULT_SECONDARY_POLL_FACTOR, make_pair(QUEUE_PLUGIN_FIELD, plugins)); auto consumer = new swss::NotificationConsumer( this->getCountersDb().get(), diff --git a/orchagent/port_flr.lua b/orchagent/port_flr.lua index 5d69cbaac1..90c83372e0 100644 --- a/orchagent/port_flr.lua +++ b/orchagent/port_flr.lua @@ -12,6 +12,10 @@ end local counters_db = ARGV[1] local counters_table_name = ARGV[2] +local poll_interval = tonumber(ARGV[3]) -- In milli Seconds +local secondary_poll_factor = tonumber(ARGV[4]) + +local FEC_FLR_POLL_INTERVAL = (poll_interval/1000) * secondary_poll_factor -- In Seconds local APPL_DB = 0 -- Application database local COUNTERS_DB = 2 -- Counters and statistics @@ -28,7 +32,6 @@ local rates_table_name = "RATES" local bookmark_table_name = "RATES:GLOBAL" local BIN_FILTER_VALUE = 10 local MIN_SIGNIFICANT_BINS = 2 -local FEC_FLR_POLL_INTERVAL = 120 local MFC = 8 local function get_port_name_from_oid(port) diff --git a/orchagent/portsorch.cpp b/orchagent/portsorch.cpp index 7f3c29f3c9..a78c877857 100644 --- a/orchagent/portsorch.cpp +++ b/orchagent/portsorch.cpp @@ -3,6 +3,7 @@ #include #include "portsorch.h" +#include "flex_counter_manager.h" #include "intfsorch.h" #include "bufferorch.h" #include "neighorch.h" @@ -782,24 +783,28 @@ PortsOrch::PortsOrch(DBConnector *db, DBConnector *stateDb, vector static inline void operateFlexCounterGroupDatabase(const string &group, const string &poll_interval, + const string &secondary_poll_factor, const string &stats_mode, const string &plugin_name, const string &plugins, @@ -841,6 +843,7 @@ static inline void operateFlexCounterGroupDatabase(const string &group, std::vector fvTuples; auto &flexCounterGroupTable = is_gearbox ? gGearBoxFlexCounterGroupTable : gFlexCounterGroupTable; + operateFlexCounterDbSingleField(fvTuples, SECONDARY_POLL_FACTOR_FIELD, secondary_poll_factor); operateFlexCounterDbSingleField(fvTuples, POLL_INTERVAL_FIELD, poll_interval); operateFlexCounterDbSingleField(fvTuples, STATS_MODE_FIELD, stats_mode); operateFlexCounterDbSingleField(fvTuples, plugin_name, plugins); @@ -848,8 +851,10 @@ static inline void operateFlexCounterGroupDatabase(const string &group, flexCounterGroupTable->set(group, fvTuples); } + void setFlexCounterGroupParameter(const string &group, const string &poll_interval, + const string &secondary_poll_factor, const string &stats_mode, const string &plugin_name, const string &plugins, @@ -858,7 +863,7 @@ void setFlexCounterGroupParameter(const string &group, { if (gTraditionalFlexCounter) { - operateFlexCounterGroupDatabase(group, poll_interval, stats_mode, plugin_name, plugins, operation, is_gearbox); + operateFlexCounterGroupDatabase(group, poll_interval, secondary_poll_factor, stats_mode, plugin_name, plugins, operation, is_gearbox); return; } @@ -872,6 +877,7 @@ void setFlexCounterGroupParameter(const string &group, initSaiRedisCounterEmptyParameter(flex_counter_group_param.bulk_chunk_size_per_prefix); initSaiRedisCounterParameterFromString(flex_counter_group_param.counter_group_name, group); initSaiRedisCounterParameterFromString(flex_counter_group_param.poll_interval, poll_interval); + initSaiRedisCounterParameterFromString(flex_counter_group_param.secondary_poll_factor, secondary_poll_factor); initSaiRedisCounterParameterFromString(flex_counter_group_param.operation, operation); initSaiRedisCounterParameterFromString(flex_counter_group_param.stats_mode, stats_mode); initSaiRedisCounterParameterFromString(flex_counter_group_param.plugin_name, plugin_name); @@ -886,7 +892,7 @@ void setFlexCounterGroupOperation(const string &group, { if (gTraditionalFlexCounter) { - operateFlexCounterGroupDatabase(group, "", "", "", "", operation, is_gearbox); + operateFlexCounterGroupDatabase(group, "", "", "", "", "", operation, is_gearbox); return; } @@ -909,7 +915,7 @@ void setFlexCounterGroupPollInterval(const string &group, { if (gTraditionalFlexCounter) { - operateFlexCounterGroupDatabase(group, poll_interval, "", "", "", "", is_gearbox); + operateFlexCounterGroupDatabase(group, poll_interval, "", "", "", "", "", is_gearbox); return; } @@ -926,13 +932,36 @@ void setFlexCounterGroupPollInterval(const string &group, notifySyncdCounterOperation(is_gearbox, attr); } +void setFlexCounterGroupSecondaryPollFactor(const std::string &group, + const std::string &secondary_poll_factor, + bool is_gearbox) +{ + if (gTraditionalFlexCounter) + { + operateFlexCounterGroupDatabase(group, "", secondary_poll_factor, "", "", "", "", is_gearbox); + return; + } + + sai_attribute_t attr; + sai_redis_flex_counter_group_parameter_t flex_counter_group_param; + + attr.id = SAI_REDIS_SWITCH_ATTR_FLEX_COUNTER_GROUP; + attr.value.ptr = &flex_counter_group_param; + + initSaiRedisCounterEmptyParameter(flex_counter_group_param); + initSaiRedisCounterParameterFromString(flex_counter_group_param.counter_group_name, group); + initSaiRedisCounterParameterFromString(flex_counter_group_param.secondary_poll_factor, secondary_poll_factor); + + notifySyncdCounterOperation(is_gearbox, attr); +} + void setFlexCounterGroupStatsMode(const std::string &group, const std::string &stats_mode, bool is_gearbox) { if (gTraditionalFlexCounter) { - operateFlexCounterGroupDatabase(group, "", stats_mode, "", "", "", is_gearbox); + operateFlexCounterGroupDatabase(group, "", "", stats_mode, "", "", "", is_gearbox); return; } diff --git a/orchagent/saihelper.h b/orchagent/saihelper.h index 54a52971fd..5c0473a6ef 100644 --- a/orchagent/saihelper.h +++ b/orchagent/saihelper.h @@ -25,6 +25,7 @@ void handleSaiFailure(sai_api_t api, std::string oper, sai_status_t status); void setFlexCounterGroupParameter(const std::string &group, const std::string &poll_interval, + const std::string &secondary_poll_factor, const std::string &stats_mode, const std::string &plugin_name="", const std::string &plugins="", @@ -33,6 +34,9 @@ void setFlexCounterGroupParameter(const std::string &group, void setFlexCounterGroupPollInterval(const std::string &group, const std::string &poll_interval, bool is_gearbox=false); +void setFlexCounterGroupSecondaryPollFactor(const std::string &group, + const std::string &secondary_poll_factor, + bool is_gearbox=false); void setFlexCounterGroupOperation(const std::string &group, const std::string &operation, bool is_gearbox=false); diff --git a/orchagent/vxlanorch.cpp b/orchagent/vxlanorch.cpp index 3e489b7fb1..0d9637993f 100644 --- a/orchagent/vxlanorch.cpp +++ b/orchagent/vxlanorch.cpp @@ -1215,7 +1215,8 @@ VxlanTunnelOrch::VxlanTunnelOrch(DBConnector *statedb, DBConnector *db, const st } tunnel_stat_manager = g_FlexManagerDirectory.createFlexCounterManager(TUNNEL_STAT_COUNTER_FLEX_COUNTER_GROUP, - StatsMode::READ, TUNNEL_STAT_FLEX_COUNTER_POLLING_INTERVAL_MS, false, fv); + StatsMode::READ, TUNNEL_STAT_FLEX_COUNTER_POLLING_INTERVAL_MS, false, + FLEX_COUNTER_DEFAULT_SECONDARY_POLL_FACTOR, fv); m_tunnelNameTable = unique_ptr(new Table(m_counter_db.get(), COUNTERS_TUNNEL_NAME_MAP)); m_tunnelTypeTable = unique_ptr
(new Table(m_counter_db.get(), COUNTERS_TUNNEL_TYPE_MAP)); From da857e03687b9ea4f3a9703c9ea4dcd76f219c6c Mon Sep 17 00:00:00 2001 From: Apoorv Sachan Date: Wed, 19 Nov 2025 12:05:53 +0000 Subject: [PATCH 2/2] fix mock test failures --- tests/mock_tests/flexcounter_ut.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/tests/mock_tests/flexcounter_ut.cpp b/tests/mock_tests/flexcounter_ut.cpp index 80a400a0fb..ac42c47cf4 100644 --- a/tests/mock_tests/flexcounter_ut.cpp +++ b/tests/mock_tests/flexcounter_ut.cpp @@ -1,3 +1,4 @@ +#include "schema.h" #define private public // make Directory::m_values available to clean it. #include "directory.h" #undef private @@ -111,6 +112,11 @@ namespace flexcounter_test entries.push_back({POLL_INTERVAL_FIELD, (const char*)flexCounterGroupParam->poll_interval.list}); } + if (flexCounterGroupParam->secondary_poll_factor.list != nullptr) + { + entries.push_back({SECONDARY_POLL_FACTOR_FIELD, (const char*)flexCounterGroupParam->secondary_poll_factor.list}); + } + if (flexCounterGroupParam->stats_mode.list != nullptr) { entries.push_back({STATS_MODE_FIELD, (const char*)flexCounterGroupParam->stats_mode.list}); @@ -488,12 +494,14 @@ namespace flexcounter_test { {STATS_MODE_FIELD, STATS_MODE_READ}, {POLL_INTERVAL_FIELD, "60000"}, + {SECONDARY_POLL_FACTOR_FIELD, "0"}, {FLEX_COUNTER_STATUS_FIELD, "disable"} })); ASSERT_TRUE(checkFlexCounterGroup(QUEUE_WATERMARK_STAT_COUNTER_FLEX_COUNTER_GROUP, { {STATS_MODE_FIELD, STATS_MODE_READ_AND_CLEAR}, {POLL_INTERVAL_FIELD, QUEUE_WATERMARK_FLEX_STAT_COUNTER_POLL_MSECS}, + {SECONDARY_POLL_FACTOR_FIELD, "0"}, {FLEX_COUNTER_STATUS_FIELD, "disable"}, {QUEUE_PLUGIN_FIELD, ""} })); @@ -501,6 +509,7 @@ namespace flexcounter_test { {STATS_MODE_FIELD, STATS_MODE_READ_AND_CLEAR}, {POLL_INTERVAL_FIELD, PG_WATERMARK_FLEX_STAT_COUNTER_POLL_MSECS}, + {SECONDARY_POLL_FACTOR_FIELD, "0"}, {FLEX_COUNTER_STATUS_FIELD, "disable"}, {PG_PLUGIN_FIELD, ""} })); @@ -508,6 +517,7 @@ namespace flexcounter_test { {STATS_MODE_FIELD, STATS_MODE_READ}, {POLL_INTERVAL_FIELD, PORT_RATE_FLEX_COUNTER_POLLING_INTERVAL_MS}, + {SECONDARY_POLL_FACTOR_FIELD, "0"}, {FLEX_COUNTER_STATUS_FIELD, "disable"}, {PORT_PLUGIN_FIELD, ""} })); @@ -515,11 +525,13 @@ namespace flexcounter_test { {STATS_MODE_FIELD, STATS_MODE_READ}, {POLL_INTERVAL_FIELD, PG_DROP_FLEX_STAT_COUNTER_POLL_MSECS}, + {SECONDARY_POLL_FACTOR_FIELD, "0"}, {FLEX_COUNTER_STATUS_FIELD, "disable"} })); ASSERT_TRUE(checkFlexCounterGroup(RIF_STAT_COUNTER_FLEX_COUNTER_GROUP, { {STATS_MODE_FIELD, STATS_MODE_READ}, + {SECONDARY_POLL_FACTOR_FIELD, "0"}, {POLL_INTERVAL_FIELD, "1000"}, {RIF_PLUGIN_FIELD, ""}, })); @@ -639,12 +651,14 @@ namespace flexcounter_test ASSERT_TRUE(checkFlexCounterGroup(SWITCH_STAT_COUNTER_FLEX_COUNTER_GROUP, { {POLL_INTERVAL_FIELD, "60000"}, + {SECONDARY_POLL_FACTOR_FIELD, "0"}, {STATS_MODE_FIELD, STATS_MODE_READ}, {FLEX_COUNTER_STATUS_FIELD, "enable"} })); ASSERT_TRUE(checkFlexCounterGroup(BUFFER_POOL_WATERMARK_STAT_COUNTER_FLEX_COUNTER_GROUP, { {POLL_INTERVAL_FIELD, "60000"}, + {SECONDARY_POLL_FACTOR_FIELD, "0"}, {STATS_MODE_FIELD, STATS_MODE_READ_AND_CLEAR}, {FLEX_COUNTER_STATUS_FIELD, "enable"}, {BUFFER_POOL_PLUGIN_FIELD, ""} @@ -652,6 +666,7 @@ namespace flexcounter_test ASSERT_TRUE(checkFlexCounterGroup(QUEUE_WATERMARK_STAT_COUNTER_FLEX_COUNTER_GROUP, { {POLL_INTERVAL_FIELD, "60000"}, + {SECONDARY_POLL_FACTOR_FIELD, "0"}, {STATS_MODE_FIELD, STATS_MODE_READ_AND_CLEAR}, {FLEX_COUNTER_STATUS_FIELD, "enable"}, {QUEUE_PLUGIN_FIELD, ""} @@ -659,6 +674,7 @@ namespace flexcounter_test ASSERT_TRUE(checkFlexCounterGroup(PG_WATERMARK_STAT_COUNTER_FLEX_COUNTER_GROUP, { {POLL_INTERVAL_FIELD, "60000"}, + {SECONDARY_POLL_FACTOR_FIELD, "0"}, {STATS_MODE_FIELD, STATS_MODE_READ_AND_CLEAR}, {FLEX_COUNTER_STATUS_FIELD, "enable"}, {PG_PLUGIN_FIELD, ""} @@ -666,18 +682,21 @@ namespace flexcounter_test ASSERT_TRUE(checkFlexCounterGroup(PORT_BUFFER_DROP_STAT_FLEX_COUNTER_GROUP, { {POLL_INTERVAL_FIELD, "60000"}, + {SECONDARY_POLL_FACTOR_FIELD, "0"}, {STATS_MODE_FIELD, STATS_MODE_READ}, {FLEX_COUNTER_STATUS_FIELD, "enable"} })); ASSERT_TRUE(checkFlexCounterGroup(PG_DROP_STAT_COUNTER_FLEX_COUNTER_GROUP, { {POLL_INTERVAL_FIELD, "10000"}, + {SECONDARY_POLL_FACTOR_FIELD, "0"}, {STATS_MODE_FIELD, STATS_MODE_READ}, {FLEX_COUNTER_STATUS_FIELD, "enable"} })); ASSERT_TRUE(checkFlexCounterGroup(PORT_STAT_COUNTER_FLEX_COUNTER_GROUP, { {POLL_INTERVAL_FIELD, "1000"}, + {SECONDARY_POLL_FACTOR_FIELD, "0"}, {STATS_MODE_FIELD, STATS_MODE_READ}, {FLEX_COUNTER_STATUS_FIELD, "enable"}, {PORT_PLUGIN_FIELD, ""} @@ -685,6 +704,7 @@ namespace flexcounter_test ASSERT_TRUE(checkFlexCounterGroup(QUEUE_STAT_COUNTER_FLEX_COUNTER_GROUP, { {POLL_INTERVAL_FIELD, "10000"}, + {SECONDARY_POLL_FACTOR_FIELD, "0"}, {STATS_MODE_FIELD, STATS_MODE_READ}, {FLEX_COUNTER_STATUS_FIELD, "enable"}, })); @@ -872,8 +892,9 @@ namespace flexcounter_test ASSERT_TRUE(checkFlexCounterGroup(PFC_WD_FLEX_COUNTER_GROUP, { {POLL_INTERVAL_FIELD, "200"}, + {SECONDARY_POLL_FACTOR_FIELD, "1"}, {STATS_MODE_FIELD, STATS_MODE_READ}, - {FLEX_COUNTER_STATUS_FIELD, "enable"}, + {FLEX_COUNTER_STATUS_FIELD, "disable"}, {QUEUE_PLUGIN_FIELD, ""} }));