From de62c9f3da1f0557dcf3fd3448d2c29f0bf83882 Mon Sep 17 00:00:00 2001 From: Vivek Reddy Date: Tue, 5 Aug 2025 07:24:14 +0000 Subject: [PATCH] Deprecate traditional FC support for DASH counters Signed-off-by: Vivek Reddy --- orchagent/dash/dashmeterorch.cpp | 116 +-------------------- orchagent/dash/dashmeterorch.h | 18 +--- orchagent/dash/dashorch.cpp | 156 +++++----------------------- orchagent/dash/dashorch.h | 90 +++++++++++++--- orchagent/flexcounterorch.cpp | 5 +- orchagent/orchdaemon.cpp | 2 +- tests/mock_tests/flexcounter_ut.cpp | 46 +++----- tests/mock_tests/mock_orch_test.cpp | 2 +- 8 files changed, 122 insertions(+), 313 deletions(-) diff --git a/orchagent/dash/dashmeterorch.cpp b/orchagent/dash/dashmeterorch.cpp index dba2d17f2e7..b671e33d448 100644 --- a/orchagent/dash/dashmeterorch.cpp +++ b/orchagent/dash/dashmeterorch.cpp @@ -23,39 +23,12 @@ extern sai_object_id_t gSwitchId; extern size_t gMaxBulkSize; extern CrmOrch *gCrmOrch; extern Directory gDirectory; -extern bool gTraditionalFlexCounter; -#define METER_FLEX_COUNTER_UPD_INTERVAL 1 - -DashMeterOrch::DashMeterOrch(DBConnector *db, const vector &tables, DashOrch *dash_orch, DBConnector *app_state_db, ZmqServer *zmqServer) : - m_meter_stat_manager(METER_STAT_COUNTER_FLEX_COUNTER_GROUP, StatsMode::READ, METER_STAT_FLEX_COUNTER_POLLING_INTERVAL_MS, false), +DashMeterOrch::DashMeterOrch(DBConnector *db, const vector &tables, DBConnector *app_state_db, ZmqServer *zmqServer) : meter_rule_bulker_(sai_dash_meter_api, gSwitchId, gMaxBulkSize), - ZmqOrch(db, tables, zmqServer), - m_dash_orch(dash_orch) + ZmqOrch(db, tables, zmqServer) { SWSS_LOG_ENTER(); - - m_counter_db = std::shared_ptr(new DBConnector("COUNTERS_DB", 0)); - m_asic_db = std::shared_ptr(new DBConnector("ASIC_DB", 0)); - - if (gTraditionalFlexCounter) - { - m_vid_to_rid_table = std::make_unique(m_asic_db.get(), "VIDTORID"); - } - - auto intervT = timespec { .tv_sec = METER_FLEX_COUNTER_UPD_INTERVAL , .tv_nsec = 0 }; - m_meter_fc_update_timer = new SelectableTimer(intervT); - auto executorT = new ExecutableTimer(m_meter_fc_update_timer, this, "METER_FLEX_COUNTER_UPD_TIMER"); - Orch::addExecutor(executorT); - - /* Fetch the meter bucket counter Ids */ - m_meter_counter_stats.clear(); - auto stat_enum_list = queryAvailableCounterStats((sai_object_type_t)SAI_OBJECT_TYPE_METER_BUCKET_ENTRY); - for (auto &stat_enum: stat_enum_list) - { - auto counter_id = static_cast(stat_enum); - m_meter_counter_stats.emplace(sai_serialize_meter_bucket_entry_stat(counter_id)); - } } sai_object_id_t DashMeterOrch::getMeterPolicyOid(const string& meter_policy) const @@ -619,88 +592,3 @@ void DashMeterOrch::doTask(ConsumerBase& consumer) SWSS_LOG_ERROR("Unknown table: %s", tn.c_str()); } } - -void DashMeterOrch::addEniToMeterFC(sai_object_id_t oid, const string &name) -{ - if (!m_meter_fc_status) - { - return; - } - auto was_empty = m_meter_stat_work_queue.empty(); - m_meter_stat_work_queue[oid] = name; - if (was_empty) - { - m_meter_fc_update_timer->start(); - } -} - -void DashMeterOrch::removeEniFromMeterFC(sai_object_id_t oid, const string &name) -{ - SWSS_LOG_ENTER(); - - if (oid == SAI_NULL_OBJECT_ID) - { - SWSS_LOG_WARN("Cannot remove meter counter on NULL OID for eni %s", name.c_str()); - return; - } - if (m_meter_stat_work_queue.find(oid) != m_meter_stat_work_queue.end()) - { - m_meter_stat_work_queue.erase(oid); - return; - } - - m_meter_stat_manager.clearCounterIdList(oid); - SWSS_LOG_INFO("Unregistering FC for ENI %s, oid %s", name.c_str(), sai_serialize_object_id(oid).c_str()); -} - -void DashMeterOrch::handleMeterFCStatusUpdate(bool enabled) -{ - DashOrch *dash_orch = gDirectory.get(); - bool prev_enabled = m_meter_fc_status; - m_meter_fc_status = enabled; /* Update the status */ - if (!enabled && prev_enabled) - { - m_meter_fc_update_timer->stop(); - dash_orch->refreshMeterFCStats(false); /* Clear any existing FC entries */ - } - else if (enabled && !prev_enabled) - { - dash_orch->refreshMeterFCStats(true); - m_meter_fc_update_timer->start(); - } -} - -void DashMeterOrch::doTask(SelectableTimer &timer) -{ - SWSS_LOG_ENTER(); - - if (!m_meter_fc_status) - { - m_meter_fc_update_timer->stop(); - return ; - } - - for (auto it = m_meter_stat_work_queue.begin(); it != m_meter_stat_work_queue.end(); ) - { - string value; - const auto id = sai_serialize_object_id(it->first); - if (!gTraditionalFlexCounter || m_vid_to_rid_table->hget("", id, value)) - { - SWSS_LOG_INFO("Registering FC for ENI %s, oid %s", it->second.c_str(), id.c_str()); - std::vector eniNameFvs; - eniNameFvs.emplace_back(it->second, id); - - m_meter_stat_manager.setCounterIdList(it->first, CounterType::DASH_METER, m_meter_counter_stats); - it = m_meter_stat_work_queue.erase(it); - } - else - { - ++it; - } - } - - if (m_meter_stat_work_queue.empty()) - { - m_meter_fc_update_timer->stop(); - } -} diff --git a/orchagent/dash/dashmeterorch.h b/orchagent/dash/dashmeterorch.h index ac38f15457f..eea728b5e42 100644 --- a/orchagent/dash/dashmeterorch.h +++ b/orchagent/dash/dashmeterorch.h @@ -20,9 +20,6 @@ #include "dash_api/meter_policy.pb.h" #include "dash_api/meter_rule.pb.h" -#define METER_STAT_COUNTER_FLEX_COUNTER_GROUP "METER_STAT_COUNTER" -#define METER_STAT_FLEX_COUNTER_POLLING_INTERVAL_MS 10000 - struct MeterPolicyContext { std::string meter_policy; @@ -69,18 +66,14 @@ class DashMeterOrch : public ZmqOrch public: using TaskArgs = std::vector; - DashMeterOrch(swss::DBConnector *db, const std::vector &tables, DashOrch *dash_orch, swss::DBConnector *app_state_db, swss::ZmqServer *zmqServer); + DashMeterOrch(swss::DBConnector *db, const std::vector &tables, swss::DBConnector *app_state_db, swss::ZmqServer *zmqServer); sai_object_id_t getMeterPolicyOid(const std::string& meter_policy) const; int32_t getMeterPolicyEniBindCount(const std::string& meter_policy) const; void incrMeterPolicyEniBindCount(const std::string& meter_policy); void decrMeterPolicyEniBindCount(const std::string& meter_policy); - void addEniToMeterFC(sai_object_id_t oid, const std::string& name); - void removeEniFromMeterFC(sai_object_id_t oid, const std::string& name); - void handleMeterFCStatusUpdate(bool is_enabled); private: - void doTask(swss::SelectableTimer&); void doTask(ConsumerBase &consumer); void doTaskMeterPolicyTable(ConsumerBase &consumer); void doTaskMeterRuleTable(ConsumerBase &consumer); @@ -101,16 +94,7 @@ class DashMeterOrch : public ZmqOrch void incrMeterPolicyRuleCount(const std::string& meter_policy); void decrMeterPolicyRuleCount(const std::string& meter_policy); - DashOrch *m_dash_orch; MeterPolicyTable meter_policy_entries_; MeterRuleTable meter_rule_entries_; ObjectBulker meter_rule_bulker_; - bool m_meter_fc_status = false; - FlexCounterManager m_meter_stat_manager; - std::unordered_set m_meter_counter_stats; - std::map m_meter_stat_work_queue; - std::unique_ptr m_vid_to_rid_table; - std::shared_ptr m_counter_db; - std::shared_ptr m_asic_db; - swss::SelectableTimer* m_meter_fc_update_timer = nullptr; }; diff --git a/orchagent/dash/dashorch.cpp b/orchagent/dash/dashorch.cpp index 65550339dc3..b849330d51d 100644 --- a/orchagent/dash/dashorch.cpp +++ b/orchagent/dash/dashorch.cpp @@ -40,9 +40,9 @@ extern sai_dash_trusted_vni_api_t* sai_dash_trusted_vni_api; extern sai_object_id_t gSwitchId; extern size_t gMaxBulkSize; extern CrmOrch *gCrmOrch; -extern bool gTraditionalFlexCounter; #define FLEX_COUNTER_UPD_INTERVAL 1 +#define METER_FLEX_COUNTER_UPD_INTERVAL 1 static const std::unordered_map eniModeMap = { @@ -58,11 +58,11 @@ static const std::unordered_map dir DashOrch::DashOrch(DBConnector *db, vector &tableName, DBConnector *app_state_db, ZmqServer *zmqServer) : ZmqOrch(db, tableName, zmqServer), - m_eni_stat_manager(ENI_STAT_COUNTER_FLEX_COUNTER_GROUP, StatsMode::READ, ENI_STAT_FLEX_COUNTER_POLLING_INTERVAL_MS, false) + EniCounter(ENI_STAT_COUNTER_FLEX_COUNTER_GROUP, StatsMode::READ, ENI_STAT_FLEX_COUNTER_POLLING_INTERVAL_MS, false), + MeterCounter(METER_STAT_COUNTER_FLEX_COUNTER_GROUP, StatsMode::READ, METER_STAT_FLEX_COUNTER_POLLING_INTERVAL_MS, false) { SWSS_LOG_ENTER(); - m_asic_db = std::shared_ptr(new DBConnector("ASIC_DB", 0)); m_counter_db = std::shared_ptr(new DBConnector("COUNTERS_DB", 0)); m_eni_name_table = make_unique
(m_counter_db.get(), COUNTERS_ENI_NAME_MAP); dash_eni_result_table_ = make_unique
(app_state_db, APP_DASH_ENI_TABLE_NAME); @@ -70,25 +70,6 @@ DashOrch::DashOrch(DBConnector *db, vector &tableName, DBConnector *app_ dash_qos_result_table_ = make_unique
(app_state_db, APP_DASH_QOS_TABLE_NAME); dash_appliance_result_table_ = make_unique
(app_state_db, APP_DASH_APPLIANCE_TABLE_NAME); dash_routing_type_result_table_ = make_unique
(app_state_db, APP_DASH_ROUTING_TYPE_TABLE_NAME); - - if (gTraditionalFlexCounter) - { - m_vid_to_rid_table = std::make_unique
(m_asic_db.get(), "VIDTORID"); - } - - auto intervT = timespec { .tv_sec = FLEX_COUNTER_UPD_INTERVAL , .tv_nsec = 0 }; - m_fc_update_timer = new SelectableTimer(intervT); - auto executorT = new ExecutableTimer(m_fc_update_timer, this, "FLEX_COUNTER_UPD_TIMER"); - Orch::addExecutor(executorT); - - /* Fetch the available counter Ids */ - m_counter_stats.clear(); - auto stat_enum_list = queryAvailableCounterStats((sai_object_type_t)SAI_OBJECT_TYPE_ENI); - for (auto &stat_enum: stat_enum_list) - { - auto counter_id = static_cast(stat_enum); - m_counter_stats.insert(sai_serialize_eni_stat(counter_id)); - } } bool DashOrch::getRouteTypeActions(dash::route_type::RoutingType routing_type, dash::route_type::RouteType& route_type) @@ -677,8 +658,8 @@ bool DashOrch::addEniObject(const string& eni, EniEntry& entry) } addEniMapEntry(eni_id, eni); - addEniToFC(eni_id, eni); - dash_meter_orch->addEniToMeterFC(eni_id, eni); + EniCounter.addToFC(eni_id, eni); + MeterCounter.addToFC(eni_id, eni); gCrmOrch->incCrmResUsedCounter(CrmResourceType::CRM_DASH_ENI); @@ -818,8 +799,8 @@ bool DashOrch::removeEniObject(const string& eni) EniEntry entry = eni_entries_[eni]; DashMeterOrch *dash_meter_orch = gDirectory.get(); - dash_meter_orch->removeEniFromMeterFC(entry.eni_id, eni); - removeEniFromFC(entry.eni_id, eni); + MeterCounter.removeFromFC(entry.eni_id, eni); + EniCounter.removeFromFC(entry.eni_id, eni); removeEniMapEntry(entry.eni_id, eni); sai_status_t status = sai_dash_eni_api->remove_eni(entry.eni_id); @@ -1269,74 +1250,32 @@ void DashOrch::doTask(ConsumerBase& consumer) } } -void DashOrch::removeEniFromFC(sai_object_id_t oid, const string &name) +template<> +void DashOrch::DashCounter::fetchStats() { - SWSS_LOG_ENTER(); - - if (oid == SAI_NULL_OBJECT_ID) - { - SWSS_LOG_WARN("Cannot remove counter on NULL OID for eni %s", name.c_str()); - return; - } - - if (m_eni_stat_work_queue.find(oid) != m_eni_stat_work_queue.end()) + counter_stats.clear(); + auto stat_enum_list = queryAvailableCounterStats((sai_object_type_t)SAI_OBJECT_TYPE_ENI); + for (auto &stat_enum: stat_enum_list) { - m_eni_stat_work_queue.erase(oid); - return; + auto counter_id = static_cast(stat_enum); + counter_stats.insert(sai_serialize_eni_stat(counter_id)); } - - m_eni_stat_manager.clearCounterIdList(oid); - SWSS_LOG_INFO("Unregistering FC for %s, id: %s", name.c_str(), sai_serialize_object_id(oid).c_str()); } -void DashOrch::refreshEniFCStats(bool install) +template<> +void DashOrch::DashCounter::fetchStats() { - for (auto it = eni_entries_.begin(); it != eni_entries_.end(); it++) + counter_stats.clear(); + auto stat_enum_list = queryAvailableCounterStats((sai_object_type_t)SAI_OBJECT_TYPE_METER_BUCKET_ENTRY); + for (auto &stat_enum: stat_enum_list) { - if (install) - { - addEniToFC(it->second.eni_id, it->first); - } - else - { - removeEniFromFC(it->second.eni_id, it->first); - } + auto counter_id = static_cast(stat_enum); + counter_stats.insert(sai_serialize_meter_bucket_entry_stat(counter_id)); } } -void DashOrch::refreshMeterFCStats(bool install) +void DashOrch::addEniMapEntry(sai_object_id_t oid, const string &name) { - DashMeterOrch *dash_meter_orch = gDirectory.get(); - for (auto it = eni_entries_.begin(); it != eni_entries_.end(); it++) - { - if (install) - { - dash_meter_orch->addEniToMeterFC(it->second.eni_id, it->first); - } - else - { - dash_meter_orch->removeEniFromMeterFC(it->second.eni_id, it->first); - } - } -} - -void DashOrch::handleFCStatusUpdate(bool enabled) -{ - bool prev_enabled = m_eni_fc_status; - m_eni_fc_status = enabled; /* Update the status */ - if (!enabled && prev_enabled) - { - m_fc_update_timer->stop(); - refreshEniFCStats(false); /* Clear any existing FC entries */ - } - else if (enabled && !prev_enabled) - { - refreshEniFCStats(true); - m_fc_update_timer->start(); - } -} - -void DashOrch::addEniMapEntry(sai_object_id_t oid, const string &name) { SWSS_LOG_ENTER(); if (oid == SAI_NULL_OBJECT_ID) @@ -1352,7 +1291,8 @@ void DashOrch::addEniMapEntry(sai_object_id_t oid, const string &name) { m_eni_name_table->set("", eniNameFvs); } -void DashOrch::removeEniMapEntry(sai_object_id_t oid, const string &name) { +void DashOrch::removeEniMapEntry(sai_object_id_t oid, const string &name) +{ SWSS_LOG_ENTER(); if (oid == SAI_NULL_OBJECT_ID) @@ -1365,54 +1305,6 @@ void DashOrch::removeEniMapEntry(sai_object_id_t oid, const string &name) { SWSS_LOG_INFO("Removing ENI map entry for %s, id: %s", name.c_str(), sai_serialize_object_id(oid).c_str()); } -void DashOrch::addEniToFC(sai_object_id_t oid, const string &name) -{ - if (!m_eni_fc_status) - { - return ; - } - auto was_empty = m_eni_stat_work_queue.empty(); - m_eni_stat_work_queue[oid] = name; - if (was_empty) - { - m_fc_update_timer->start(); - } -} - -void DashOrch::doTask(SelectableTimer &timer) -{ - SWSS_LOG_ENTER(); - - if (!m_eni_fc_status) - { - m_fc_update_timer->stop(); - return ; - } - - for (auto it = m_eni_stat_work_queue.begin(); it != m_eni_stat_work_queue.end(); ) - { - string value; - const auto id = sai_serialize_object_id(it->first); - - if (!gTraditionalFlexCounter || m_vid_to_rid_table->hget("", id, value)) - { - SWSS_LOG_INFO("Registering FC for ENI: %s, id %s", it->second.c_str(), id.c_str()); - - m_eni_stat_manager.setCounterIdList(it->first, CounterType::ENI, m_counter_stats); - it = m_eni_stat_work_queue.erase(it); - } - else - { - ++it; - } - } - - if (m_eni_stat_work_queue.empty()) - { - m_fc_update_timer->stop(); - } -} - dash::types::IpAddress DashOrch::getApplianceVip() { SWSS_LOG_ENTER(); diff --git a/orchagent/dash/dashorch.h b/orchagent/dash/dashorch.h index e99fb8c0f91..9d93f8a8aa6 100644 --- a/orchagent/dash/dashorch.h +++ b/orchagent/dash/dashorch.h @@ -28,6 +28,9 @@ #define ENI_STAT_COUNTER_FLEX_COUNTER_GROUP "ENI_STAT_COUNTER" #define ENI_STAT_FLEX_COUNTER_POLLING_INTERVAL_MS 10000 +#define METER_STAT_COUNTER_FLEX_COUNTER_GROUP "METER_STAT_COUNTER" +#define METER_STAT_FLEX_COUNTER_POLLING_INTERVAL_MS 10000 + #define DASH_RESULT_SUCCESS 0 #define DASH_RESULT_FAILURE 1 @@ -56,11 +59,8 @@ class DashOrch : public ZmqOrch const EniEntry *getEni(const std::string &eni) const; const EniTable *getEniTable() const { return &eni_entries_; }; bool getRouteTypeActions(dash::route_type::RoutingType routing_type, dash::route_type::RouteType& route_type); - void handleFCStatusUpdate(bool is_enabled); dash::types::IpAddress getApplianceVip(); - bool hasApplianceEntry(); - void clearMeterFCStats(); - void refreshMeterFCStats(bool); + bool hasApplianceEntry(); private: ApplianceTable appliance_entries_; @@ -101,20 +101,78 @@ class DashOrch : public ZmqOrch bool removeEniRoute(const std::string& eni); private: - std::map m_eni_stat_work_queue; - FlexCounterManager m_eni_stat_manager; - bool m_eni_fc_status = false; - std::unordered_set m_counter_stats; + + template + struct DashCounter + { + FlexCounterManager stat_manager; + bool fc_status = false; + std::unordered_set counter_stats; + + DashCounter() {} + DashCounter(const std::string& group_name, StatsMode stats_mode, uint polling_interval, bool enabled) + : stat_manager(group_name, stats_mode, polling_interval, enabled) { fetchStats(); } + void fetchStats(); + + void addToFC(sai_object_id_t oid, const std::string& name) + { + if (!fc_status) + { + return; + } + + if (oid == SAI_NULL_OBJECT_ID) + { + SWSS_LOG_WARN("Cannot add counter on NULL OID for %s", name.c_str()); + return; + } + stat_manager.setCounterIdList(oid, CT, counter_stats); + } + + void removeFromFC(sai_object_id_t oid, const std::string& name) + { + if (oid == SAI_NULL_OBJECT_ID) + { + SWSS_LOG_WARN("Cannot remove counter on NULL OID for %s", name.c_str()); + return; + } + stat_manager.clearCounterIdList(oid); + } + + void refreshStats(bool install, const EniTable& eni_entries) + { + for (auto it = eni_entries.begin(); it != eni_entries.end(); it++) + { + if (install) + { + addToFC(it->second.eni_id, it->first); + } + else + { + removeFromFC(it->second.eni_id, it->first); + } + } + } + + void handleStatusUpdate(bool enabled, const EniTable& eni_entries) + { + bool prev_enabled = fc_status; + fc_status = enabled; + if (fc_status != prev_enabled) + { + refreshStats(fc_status, eni_entries); + } + } + }; + std::unique_ptr m_eni_name_table; - std::unique_ptr m_vid_to_rid_table; std::shared_ptr m_counter_db; - std::shared_ptr m_asic_db; - swss::SelectableTimer* m_fc_update_timer = nullptr; - - void doTask(swss::SelectableTimer&); void addEniMapEntry(sai_object_id_t oid, const std::string& name); void removeEniMapEntry(sai_object_id_t oid, const std::string& name); - void addEniToFC(sai_object_id_t oid, const std::string& name); - void removeEniFromFC(sai_object_id_t oid, const std::string& name); - void refreshEniFCStats(bool); + DashCounter EniCounter; + DashCounter MeterCounter; + +public: + void handleFCStatusUpdate(bool is_enabled) { EniCounter.handleStatusUpdate(is_enabled, eni_entries_); } + void handleMeterFCStatusUpdate(bool is_enabled) { MeterCounter.handleStatusUpdate(is_enabled, eni_entries_); } }; diff --git a/orchagent/flexcounterorch.cpp b/orchagent/flexcounterorch.cpp index a87c5efd634..6dbeac575ed 100644 --- a/orchagent/flexcounterorch.cpp +++ b/orchagent/flexcounterorch.cpp @@ -126,7 +126,6 @@ void FlexCounterOrch::doTask(Consumer &consumer) VxlanTunnelOrch* vxlan_tunnel_orch = gDirectory.get(); DashOrch* dash_orch = gDirectory.get(); - DashMeterOrch* dash_meter_orch = gDirectory.get(); if (gPortsOrch && !gPortsOrch->allPortsReady()) { return; @@ -261,9 +260,9 @@ void FlexCounterOrch::doTask(Consumer &consumer) { dash_orch->handleFCStatusUpdate((value == "enable")); } - if (dash_meter_orch && (key == DASH_METER_KEY)) + if (dash_orch && (key == DASH_METER_KEY)) { - dash_meter_orch->handleMeterFCStatusUpdate((value == "enable")); + dash_orch->handleMeterFCStatusUpdate((value == "enable")); } if (gCoppOrch && (key == FLOW_CNT_TRAP_KEY)) { diff --git a/orchagent/orchdaemon.cpp b/orchagent/orchdaemon.cpp index 1a8785e5f88..3e01a4d4817 100644 --- a/orchagent/orchdaemon.cpp +++ b/orchagent/orchdaemon.cpp @@ -1313,7 +1313,7 @@ bool DpuOrchDaemon::init() APP_DASH_METER_POLICY_TABLE_NAME, APP_DASH_METER_RULE_TABLE_NAME }; - DashMeterOrch *dash_meter_orch = new DashMeterOrch(m_applDb, dash_meter_tables, dash_orch, m_dpu_appstateDb, dash_zmq_server); + DashMeterOrch *dash_meter_orch = new DashMeterOrch(m_applDb, dash_meter_tables, m_dpu_appstateDb, dash_zmq_server); gDirectory.set(dash_meter_orch); vector dash_port_map_tables = { diff --git a/tests/mock_tests/flexcounter_ut.cpp b/tests/mock_tests/flexcounter_ut.cpp index 651188f5913..3af2f78f66a 100644 --- a/tests/mock_tests/flexcounter_ut.cpp +++ b/tests/mock_tests/flexcounter_ut.cpp @@ -1046,7 +1046,7 @@ namespace flexcounter_test /* Should create ENI Counter stats for existing ENI's */ m_DashOrch->handleFCStatusUpdate(true); - m_DashOrch->doTask(*(m_DashOrch->m_fc_update_timer)); + // m_DashOrch->doTask(*(m_DashOrch->m_fc_update_timer)); ASSERT_TRUE(checkFlexCounter(ENI_STAT_COUNTER_FLEX_COUNTER_GROUP, tmp_entry.eni_id, ENI_COUNTER_ID_LIST)); /* This should delete the STATS */ @@ -1054,6 +1054,22 @@ namespace flexcounter_test ASSERT_FALSE(checkFlexCounter(ENI_STAT_COUNTER_FLEX_COUNTER_GROUP, tmp_entry.eni_id, ENI_COUNTER_ID_LIST)); } + TEST_F(StandaloneFCTest, TestMeterStatusUpdate) + { + /* Add a mock ENI */ + EniEntry tmp_entry; + tmp_entry.eni_id = 0x7008000000021; + m_DashOrch->eni_entries_["497f23d7-f0ac-4c99-a98f-59b470e8c7c"] = tmp_entry; + + /* Should create Meter Counter stats for existing ENI's */ + m_DashOrch->handleMeterFCStatusUpdate(true); + ASSERT_TRUE(checkFlexCounter(METER_STAT_COUNTER_FLEX_COUNTER_GROUP, tmp_entry.eni_id, DASH_METER_COUNTER_ID_LIST)); + + /* This should delete the STATS */ + m_DashOrch->handleMeterFCStatusUpdate(false); + ASSERT_FALSE(checkFlexCounter(METER_STAT_COUNTER_FLEX_COUNTER_GROUP, tmp_entry.eni_id, DASH_METER_COUNTER_ID_LIST)); + } + TEST_F(StandaloneFCTest, TestCaching) { mockFlexCounterOperationCallCount = 0; @@ -1121,32 +1137,4 @@ namespace flexcounter_test } })); } - - class MeterStatFlexCounterTest : public MockOrchTest - { - virtual void PostSetUp() { - _hook_sai_switch_api(); - } - - virtual void PreTearDown() { - _unhook_sai_switch_api(); - } - }; - - TEST_F(MeterStatFlexCounterTest, TestStatusUpdate) - { - /* Add a mock ENI */ - EniEntry tmp_entry; - tmp_entry.eni_id = 0x7008000000021; - m_DashOrch->eni_entries_["497f23d7-f0ac-4c99-a98f-59b470e8c7c"] = tmp_entry; - - /* Should create Meter Counter stats for existing ENI's */ - m_DashMeterOrch->handleMeterFCStatusUpdate(true); - m_DashMeterOrch->doTask(*(m_DashMeterOrch->m_meter_fc_update_timer)); - ASSERT_TRUE(checkFlexCounter(METER_STAT_COUNTER_FLEX_COUNTER_GROUP, tmp_entry.eni_id, DASH_METER_COUNTER_ID_LIST)); - - /* This should delete the STATS */ - m_DashMeterOrch->handleMeterFCStatusUpdate(false); - ASSERT_FALSE(checkFlexCounter(METER_STAT_COUNTER_FLEX_COUNTER_GROUP, tmp_entry.eni_id, DASH_METER_COUNTER_ID_LIST)); - } } diff --git a/tests/mock_tests/mock_orch_test.cpp b/tests/mock_tests/mock_orch_test.cpp index 77095342edd..451747838cc 100644 --- a/tests/mock_tests/mock_orch_test.cpp +++ b/tests/mock_tests/mock_orch_test.cpp @@ -256,7 +256,7 @@ void MockOrchTest::SetUp() APP_DASH_METER_RULE_TABLE_NAME }; - m_DashMeterOrch = new DashMeterOrch(m_app_db.get(), dash_meter_tables, m_DashOrch, m_dpu_app_state_db.get(), nullptr); + m_DashMeterOrch = new DashMeterOrch(m_app_db.get(), dash_meter_tables, m_dpu_app_state_db.get(), nullptr); gDirectory.set(m_DashMeterOrch); ut_orch_list.push_back((Orch **)&m_DashMeterOrch);