Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 23 additions & 3 deletions syncd/FlexCounter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1705,6 +1705,7 @@ class DashMeterCounterContext : public BaseCounterContext
if (m_switchId == 0UL)
{
m_switchId = m_vendorSai->switchIdQuery(rid);
m_switchVid = VidManager::switchIdQuery(vid);
}

if (m_meterBucketsPerEni == 0)
Expand Down Expand Up @@ -1766,7 +1767,9 @@ class DashMeterCounterContext : public BaseCounterContext
swss::RedisPipeline pipeline(&db);
swss::Table countersTable(&pipeline, COUNTERS_TABLE, true);
for (const auto& object_key: it->second.object_keys) {
countersTable.del(sai_serialize_meter_bucket_entry(object_key.key.meter_bucket_entry));
auto meter_bucket_entry =
meterBucketRidToVid(object_key.key.meter_bucket_entry, vid);
countersTable.del(sai_serialize_meter_bucket_entry(meter_bucket_entry));
}
// remove from flex counter poll
m_bulkMeterContexts.erase(it);
Expand Down Expand Up @@ -1799,7 +1802,10 @@ class DashMeterCounterContext : public BaseCounterContext
idStrings.reserve(m_meterBucketsPerEni);

for (uint32_t i = 0; i < m_meterBucketsPerEni; ++i) {
idStrings.push_back(sai_serialize_meter_bucket_entry(ctx.object_keys[i].key.meter_bucket_entry));
auto meter_bucket_entry =
meterBucketRidToVid(ctx.object_keys[i].key.meter_bucket_entry,
ctx.eni_vid);
idStrings.push_back(sai_serialize_meter_bucket_entry(meter_bucket_entry));
}
std::for_each(m_plugins.begin(),
m_plugins.end(),
Expand Down Expand Up @@ -1893,7 +1899,10 @@ class DashMeterCounterContext : public BaseCounterContext
{
values.emplace_back(serializeStat(ctx.counter_ids[j]), std::to_string(ctx.counters[i * ctx.counter_ids.size() + j]));
}
countersTable.set(sai_serialize_meter_bucket_entry(ctx.object_keys[i].key.meter_bucket_entry), values, "");
auto meter_bucket_entry =
meterBucketRidToVid(ctx.object_keys[i].key.meter_bucket_entry,
ctx.eni_vid);
countersTable.set(sai_serialize_meter_bucket_entry(meter_bucket_entry), values, "");
values.clear();
}
return true;
Expand Down Expand Up @@ -2035,13 +2044,24 @@ class DashMeterCounterContext : public BaseCounterContext
m_bulkMeterContexts.emplace(vid, makeBulkMeterContext(vid, rid));
}

sai_meter_bucket_entry_t meterBucketRidToVid(
const sai_meter_bucket_entry_t& in_entry, sai_object_id_t eniVid)
{
SWSS_LOG_ENTER();
auto out_entry = in_entry;
out_entry.eni_id = eniVid;
out_entry.switch_id = m_switchVid;
return out_entry;
}

std::map<sai_object_id_t, BulkMeterStatsContext> m_bulkMeterContexts;
std::vector<sai_meter_bucket_entry_stat_t> m_supportedMeterCounters;
sai_object_type_t m_objectType = (sai_object_type_t) SAI_OBJECT_TYPE_METER_BUCKET_ENTRY;
std::string m_dbCounters;
sairedis::SaiInterface *m_vendorSai;
sai_stats_mode_t m_groupStatsMode = SAI_STATS_MODE_READ;
sai_object_id_t m_switchId = 0UL;
sai_object_id_t m_switchVid = 0UL;
uint32_t m_meterBucketsPerEni = 0;
bool m_initalized = false;
};
Expand Down
4 changes: 3 additions & 1 deletion unittest/syncd/TestFlexCounter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include "MockableSaiInterface.h"
#include "MockHelper.h"
#include "VirtualObjectIdManager.h"
#include "VidManager.h"
#include "NumberOidIndexGenerator.h"
#include <string>
#include <gtest/gtest.h>
Expand Down Expand Up @@ -1840,9 +1841,10 @@ TEST(FlexCounter, addRemoveDashMeterCounter)
auto counterVerifyFunc = [] (swss::Table &countersTable, sai_object_id_t eni_id, const std::vector<std::string>& counterIdNames, const dash_meter_expected_val_t& expectedValues)
{
std::string value;
auto switchVid = VidManager::switchIdQuery(eni_id);
for (uint32_t i = 0; i < (expectedValues.size()/counterIdNames.size()); i++)
{
auto entry_key = sai_meter_bucket_entry_t {.switch_id = 0, .eni_id = eni_id,
auto entry_key = sai_meter_bucket_entry_t {.switch_id = switchVid, .eni_id = eni_id,
.meter_class = (i*100) + 1};
auto key = sai_serialize_meter_bucket_entry(entry_key);
for (size_t j = 0; j < 2; ++j) {
Expand Down
Loading