Skip to content

Commit

Permalink
[syncd] Remove error message when tryTranslateVidToRid fails (sonic-n…
Browse files Browse the repository at this point in the history
  • Loading branch information
kcudnik authored and skbarista committed Dec 2, 2022
1 parent 3587c31 commit 139d971
Show file tree
Hide file tree
Showing 5 changed files with 249 additions and 45 deletions.
69 changes: 59 additions & 10 deletions syncd/VirtualOidTranslator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -338,33 +338,82 @@ bool VirtualOidTranslator::tryTranslateVidToRid(
{
SWSS_LOG_ENTER();

try
std::lock_guard<std::mutex> lock(m_mutex);

if (vid == SAI_NULL_OBJECT_ID)
{
SWSS_LOG_DEBUG("translated VID null to RID null");

rid = SAI_NULL_OBJECT_ID;
return true;
}

auto it = m_vid2rid.find(vid);

if (it != m_vid2rid.end())
{
rid = translateVidToRid(vid);
rid = it->second;
return true;
}
catch (const std::exception& e)

rid = m_client->getRidForVid(vid);

if (rid == SAI_NULL_OBJECT_ID)
{
// message was logged already when throwing
SWSS_LOG_INFO("unable to get RID for VID %s",
sai_serialize_object_id(vid).c_str());
return false;
}

/*
* We got this RID from redis db, so put it also to local db so it will be
* faster to retrieve it late on.
*/

m_vid2rid[vid] = rid;

SWSS_LOG_DEBUG("translated VID %s to RID %s",
sai_serialize_object_id(vid).c_str(),
sai_serialize_object_id(rid).c_str());

return true;
}

bool VirtualOidTranslator::tryTranslateVidToRid(
_Inout_ sai_object_meta_key_t &metaKey)
{
SWSS_LOG_ENTER();

try
auto info = sai_metadata_get_object_type_info(metaKey.objecttype);

if (info->isobjectid)
{
translateVidToRid(metaKey);
return true;
return tryTranslateVidToRid(
metaKey.objectkey.key.object_id,
metaKey.objectkey.key.object_id);
}
catch (const std::exception& e)

for (size_t j = 0; j < info->structmemberscount; ++j)
{
// message was logged already when throwing
return false;
const sai_struct_member_info_t *m = info->structmembers[j];

if (m->membervaluetype == SAI_ATTR_VALUE_TYPE_OBJECT_ID)
{
sai_object_id_t vid = m->getoid(&metaKey);

sai_object_id_t rid;

if (tryTranslateVidToRid(vid, rid))
{
m->setoid(&metaKey, rid);
continue;
}

return false;
}
}

return true;
}

void VirtualOidTranslator::translateVidToRid(
Expand Down
3 changes: 2 additions & 1 deletion unittest/syncd/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@ tests_SOURCES = main.cpp \
MockHelper.cpp \
TestCommandLineOptions.cpp \
TestFlexCounter.cpp \
TestVirtualOidTranslator.cpp \
TestNotificationQueue.cpp

tests_CXXFLAGS = $(DBGFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS_COMMON)
tests_LDADD = $(LDADD_GTEST) $(top_srcdir)/syncd/libSyncd.a -lhiredis -lswsscommon -lpthread -L$(top_srcdir)/lib/.libs -lsairedis -L$(top_srcdir)/meta/.libs -lsaimetadata -lsaimeta -lzmq $(CODE_COVERAGE_LIBS)
tests_LDADD = $(LDADD_GTEST) $(top_srcdir)/syncd/libSyncd.a $(top_srcdir)/vslib/libSaiVS.a -lhiredis -lswsscommon -lnl-genl-3 -lnl-nf-3 -lnl-route-3 -lnl-3 -lpthread -L$(top_srcdir)/lib/.libs -lsairedis -L$(top_srcdir)/meta/.libs -lsaimetadata -lsaimeta -lzmq $(CODE_COVERAGE_LIBS)

TESTS = tests
8 changes: 0 additions & 8 deletions unittest/syncd/MockHelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,3 @@ namespace test_syncd {
mock_objectTypeQuery_result = mock_result;
}
}

namespace syncd {
sai_object_type_t VidManager::objectTypeQuery(_In_ sai_object_id_t objectId)
{
SWSS_LOG_ENTER();
return test_syncd::mock_objectTypeQuery_result;
}
}
52 changes: 26 additions & 26 deletions unittest/syncd/TestFlexCounter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ TEST(FlexCounter, addRemoveCounterForFlowCounter)
std::shared_ptr<MockableSaiInterface> sai(new MockableSaiInterface());
FlexCounter fc("test", sai, "COUNTERS_DB");

sai_object_id_t counterVid{100};
sai_object_id_t counterRid{100};
sai_object_id_t counterVid{0x54000000000000};
sai_object_id_t counterRid{0x54000000000000};
std::vector<swss::FieldValueTuple> values;
values.emplace_back(FLOW_COUNTER_ID_LIST, "SAI_COUNTER_STAT_PACKETS,SAI_COUNTER_STAT_BYTES");

Expand Down Expand Up @@ -46,12 +46,12 @@ TEST(FlexCounter, addRemoveCounterForFlowCounter)
std::vector<std::string> keys;
countersTable.getKeys(keys);
EXPECT_EQ(keys.size(), size_t(1));
EXPECT_EQ(keys[0], "oid:0x64");
EXPECT_EQ(keys[0], "oid:0x54000000000000");

std::string value;
countersTable.hget("oid:0x64", "SAI_COUNTER_STAT_PACKETS", value);
countersTable.hget("oid:0x54000000000000", "SAI_COUNTER_STAT_PACKETS", value);
EXPECT_EQ(value, "100");
countersTable.hget("oid:0x64", "SAI_COUNTER_STAT_BYTES", value);
countersTable.hget("oid:0x54000000000000", "SAI_COUNTER_STAT_BYTES", value);
EXPECT_EQ(value, "200");

fc.removeCounter(counterVid);
Expand Down Expand Up @@ -81,8 +81,8 @@ TEST(FlexCounter, addRemoveCounterForMACsecFlow)
std::shared_ptr<MockableSaiInterface> sai(new MockableSaiInterface());
FlexCounter fc("test", sai, "COUNTERS_DB");

sai_object_id_t macsecFlowVid{101};
sai_object_id_t macsecFlowRid{101};
sai_object_id_t macsecFlowVid{0x5a000000000000};
sai_object_id_t macsecFlowRid{0x5a000000000000};
std::vector<swss::FieldValueTuple> values;
values.emplace_back(MACSEC_FLOW_COUNTER_ID_LIST, "SAI_MACSEC_FLOW_STAT_CONTROL_PKTS,SAI_MACSEC_FLOW_STAT_PKTS_UNTAGGED");

Expand Down Expand Up @@ -114,17 +114,17 @@ TEST(FlexCounter, addRemoveCounterForMACsecFlow)
std::vector<std::string> keys;
countersTable.getKeys(keys);
EXPECT_EQ(keys.size(), size_t(1));
EXPECT_EQ(keys[0], "oid:0x65");
EXPECT_EQ(keys[0], "oid:0x5a000000000000");

std::string value;
countersTable.hget("oid:0x65", "SAI_MACSEC_FLOW_STAT_CONTROL_PKTS", value);
countersTable.hget("oid:0x5a000000000000", "SAI_MACSEC_FLOW_STAT_CONTROL_PKTS", value);
//EXPECT_EQ(value, "100");
countersTable.hget("oid:0x65", "SAI_MACSEC_FLOW_STAT_PKTS_UNTAGGED", value);
countersTable.hget("oid:0x5a000000000000", "SAI_MACSEC_FLOW_STAT_PKTS_UNTAGGED", value);
//EXPECT_EQ(value, "200");

fc.removeCounter(macsecFlowVid);
EXPECT_EQ(fc.isEmpty(), true);
countersTable.del("oid:0x65");
countersTable.del("oid:0x5a000000000000");
countersTable.getKeys(keys);

ASSERT_TRUE(keys.empty());
Expand All @@ -136,8 +136,8 @@ TEST(FlexCounter, addRemoveCounterForMACsecSA)
std::shared_ptr<MockableSaiInterface> sai(new MockableSaiInterface());
FlexCounter fc("test", sai, "COUNTERS_DB");

sai_object_id_t macsecSAVid{102};
sai_object_id_t macsecSARid{102};
sai_object_id_t macsecSAVid{0x5c000000000000};
sai_object_id_t macsecSARid{0x5c000000000000};
std::vector<swss::FieldValueTuple> values;
values.emplace_back(MACSEC_SA_COUNTER_ID_LIST, "SAI_MACSEC_SA_STAT_OCTETS_ENCRYPTED,SAI_MACSEC_SA_STAT_OCTETS_PROTECTED");

Expand Down Expand Up @@ -169,17 +169,17 @@ TEST(FlexCounter, addRemoveCounterForMACsecSA)
std::vector<std::string> keys;
countersTable.getKeys(keys);
EXPECT_EQ(keys.size(), size_t(1));
EXPECT_EQ(keys[0], "oid:0x66");
EXPECT_EQ(keys[0], "oid:0x5c000000000000");

std::string value;
countersTable.hget("oid:0x66", "SAI_MACSEC_SA_STAT_OCTETS_ENCRYPTED", value);
countersTable.hget("oid:0x5c000000000000", "SAI_MACSEC_SA_STAT_OCTETS_ENCRYPTED", value);
//EXPECT_EQ(value, "100");
countersTable.hget("oid:0x66", "SAI_MACSEC_SA_STAT_OCTETS_PROTECTED", value);
countersTable.hget("oid:0x5c000000000000", "SAI_MACSEC_SA_STAT_OCTETS_PROTECTED", value);
//EXPECT_EQ(value, "200");

fc.removeCounter(macsecSAVid);
EXPECT_EQ(fc.isEmpty(), true);
countersTable.del("oid:0x66");
countersTable.del("oid:0x5c000000000000");
countersTable.getKeys(keys);

ASSERT_TRUE(keys.empty());
Expand All @@ -191,8 +191,8 @@ TEST(FlexCounter, addRemoveCounterForPort)
std::shared_ptr<MockableSaiInterface> sai(new MockableSaiInterface());
FlexCounter fc("test", sai, "COUNTERS_DB");

sai_object_id_t counterVid{100};
sai_object_id_t counterRid{100};
sai_object_id_t counterVid{0x1000000000000};
sai_object_id_t counterRid{0x1000000000000};
std::vector<swss::FieldValueTuple> values;
values.emplace_back(PORT_COUNTER_ID_LIST, "SAI_PORT_STAT_IF_IN_OCTETS,SAI_PORT_STAT_IF_IN_ERRORS");

Expand Down Expand Up @@ -232,17 +232,17 @@ TEST(FlexCounter, addRemoveCounterForPort)
std::vector<std::string> keys;
countersTable.getKeys(keys);
EXPECT_EQ(keys.size(), size_t(1));
EXPECT_EQ(keys[0], "oid:0x64");
EXPECT_EQ(keys[0], "oid:0x1000000000000");

std::string value;
countersTable.hget("oid:0x64", "SAI_PORT_STAT_IF_IN_OCTETS", value);
countersTable.hget("oid:0x1000000000000", "SAI_PORT_STAT_IF_IN_OCTETS", value);
EXPECT_EQ(value, "100");
countersTable.hget("oid:0x64", "SAI_PORT_STAT_IF_IN_ERRORS", value);
countersTable.hget("oid:0x1000000000000", "SAI_PORT_STAT_IF_IN_ERRORS", value);
EXPECT_EQ(value, "200");

fc.removeCounter(counterVid);
EXPECT_EQ(fc.isEmpty(), true);
countersTable.del("oid:0x64");
countersTable.del("oid:0x1000000000000");
countersTable.getKeys(keys);
ASSERT_TRUE(keys.empty());

Expand All @@ -265,14 +265,14 @@ TEST(FlexCounter, addRemoveCounterForPort)
EXPECT_EQ(fc.isEmpty(), false);

usleep(1000*1000);
countersTable.hget("oid:0x64", "SAI_PORT_STAT_IF_IN_OCTETS", value);
countersTable.hget("oid:0x1000000000000", "SAI_PORT_STAT_IF_IN_OCTETS", value);
EXPECT_EQ(value, "100");
countersTable.hget("oid:0x64", "SAI_PORT_STAT_IF_IN_ERRORS", value);
countersTable.hget("oid:0x1000000000000", "SAI_PORT_STAT_IF_IN_ERRORS", value);
EXPECT_EQ(value, "200");

fc.removeCounter(counterVid);
EXPECT_EQ(fc.isEmpty(), true);
countersTable.del("oid:0x64");
countersTable.del("oid:0x1000000000000");
countersTable.getKeys(keys);
ASSERT_TRUE(keys.empty());
}
Loading

0 comments on commit 139d971

Please sign in to comment.