Skip to content

Commit

Permalink
[sairedis] Add context config fields conflict check (sonic-net#874)
Browse files Browse the repository at this point in the history
  • Loading branch information
kcudnik committed Jul 30, 2021
1 parent 00ccc95 commit ff631f4
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 1 deletion.
2 changes: 2 additions & 0 deletions lib/inc/ContextConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ namespace sairedis
void insert(
_In_ std::shared_ptr<SwitchConfig> config);

bool hasConflict(
_In_ std::shared_ptr<const ContextConfig> ctx) const;

public: // TODO to private

Expand Down
52 changes: 52 additions & 0 deletions lib/src/ContextConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,55 @@ void ContextConfig::insert(

m_scc->insert(config);
}

bool ContextConfig::hasConflict(
_In_ std::shared_ptr<const ContextConfig> ctx) const
{
SWSS_LOG_ENTER();

if (m_guid == ctx->m_guid)
{
SWSS_LOG_ERROR("guid %u conflict", m_guid);
return true;
}

if (m_name == ctx->m_name)
{
SWSS_LOG_ERROR("name %s conflict", m_name.c_str());
return true;
}

if (m_dbAsic == ctx->m_dbAsic)
{
SWSS_LOG_ERROR("dbAsic %s conflict", m_dbAsic.c_str());
return true;
}

if (m_dbCounters == ctx->m_dbCounters)
{
SWSS_LOG_ERROR("dbCounters %s conflict", m_dbCounters.c_str());
return true;
}

if (m_dbFlex == ctx->m_dbFlex)
{
SWSS_LOG_ERROR("dbFlex %s conflict", m_dbFlex.c_str());
return true;
}

// state database can be shared

if (m_zmqEndpoint == ctx->m_zmqEndpoint)
{
SWSS_LOG_ERROR("zmqEndpoint %s conflict", m_zmqEndpoint.c_str());
return true;
}

if (m_zmqNtfEndpoint == ctx->m_zmqNtfEndpoint)
{
SWSS_LOG_ERROR("zmqNtfEndpoint %s conflict", m_zmqNtfEndpoint.c_str());
return true;
}

return false;
}
12 changes: 11 additions & 1 deletion lib/src/ContextConfigContainer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,16 @@ void ContextConfigContainer::insert(
{
SWSS_LOG_ENTER();

for (auto& c: m_map)
{
if (c.second->hasConflict(contextConfig))
{
SWSS_LOG_THROW("context config with guid %u have conflicts with guid %u",
contextConfig->m_guid,
c.second->m_guid);
}
}

m_map[contextConfig->m_guid] = contextConfig;
}

Expand Down Expand Up @@ -159,7 +169,7 @@ std::set<std::shared_ptr<ContextConfig>> ContextConfigContainer::getAllContextCo

std::set<std::shared_ptr<ContextConfig>> set;

for (auto&item: m_map)
for (auto& item: m_map)
{
set.insert(item.second);
}
Expand Down

0 comments on commit ff631f4

Please sign in to comment.