From d331e1ee80e0ffb7ca1aa35344bc46df10885579 Mon Sep 17 00:00:00 2001 From: Prabhat Aravind Date: Tue, 9 Dec 2025 02:53:14 +0000 Subject: [PATCH 1/2] Fix error handling in sairedis for errors which are handled in swss Signed-off-by: Prabhat Aravind --- meta/Meta.cpp | 8 ++++++++ meta/SaiObjectCollection.cpp | 12 ++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/meta/Meta.cpp b/meta/Meta.cpp index a13459b702..978a0e5382 100644 --- a/meta/Meta.cpp +++ b/meta/Meta.cpp @@ -1870,6 +1870,14 @@ void Meta::meta_generic_validation_post_remove( return; } + // Make sure the object exists before trying to get its attributes + if (!m_saiObjectCollection.objectExists(meta_key)) + { + SWSS_LOG_ERROR("FATAL: object %s doesn't exist", + sai_serialize_object_meta_key(meta_key).c_str()); + return; + } + // get all attributes that was set for (auto&it: m_saiObjectCollection.getObject(meta_key)->getAttributes()) diff --git a/meta/SaiObjectCollection.cpp b/meta/SaiObjectCollection.cpp index edb311f2ad..26fd716aa8 100644 --- a/meta/SaiObjectCollection.cpp +++ b/meta/SaiObjectCollection.cpp @@ -30,8 +30,9 @@ void SaiObjectCollection::createObject( if (objectExists(metaKey)) { - SWSS_LOG_THROW("FATAL: object %s already exists", + SWSS_LOG_ERROR("FATAL: object %s already exists", sai_serialize_object_meta_key(metaKey).c_str()); + return; } m_objects[metaKey] = obj; @@ -44,8 +45,9 @@ void SaiObjectCollection::removeObject( if (!objectExists(metaKey)) { - SWSS_LOG_THROW("FATAL: object %s doesn't exist", + SWSS_LOG_ERROR("FATAL: object %s doesn't exist", sai_serialize_object_meta_key(metaKey).c_str()); + return; } m_objects.erase(metaKey); @@ -60,8 +62,9 @@ void SaiObjectCollection::setObjectAttr( if (!objectExists(metaKey)) { - SWSS_LOG_THROW("FATAL: object %s doesn't exist", + SWSS_LOG_ERROR("FATAL: object %s doesn't exist", sai_serialize_object_meta_key(metaKey).c_str()); + return; } m_objects[metaKey]->setAttr(&md, attr); @@ -115,8 +118,9 @@ std::shared_ptr SaiObjectCollection::getObject( if (!objectExists(metaKey)) { - SWSS_LOG_THROW("FATAL: object %s doesn't exist", + SWSS_LOG_ERROR("FATAL: object %s doesn't exist", sai_serialize_object_meta_key(metaKey).c_str()); + return nullptr; } return m_objects.at(metaKey); From 5eb5bba0ae5a370a0f4c2b810c32df8ae53933bf Mon Sep 17 00:00:00 2001 From: Prabhat Aravind Date: Tue, 9 Dec 2025 07:27:57 +0000 Subject: [PATCH 2/2] Fix mocktests Signed-off-by: Prabhat Aravind --- unittest/meta/TestSaiObjectCollection.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/unittest/meta/TestSaiObjectCollection.cpp b/unittest/meta/TestSaiObjectCollection.cpp index 46931df997..5d8bd88375 100644 --- a/unittest/meta/TestSaiObjectCollection.cpp +++ b/unittest/meta/TestSaiObjectCollection.cpp @@ -14,7 +14,7 @@ TEST(SaiObjectCollection, createObject) oc.createObject(mk); - EXPECT_THROW(oc.createObject(mk), std::runtime_error); + EXPECT_NO_THROW(oc.createObject(mk)); } TEST(SaiObjectCollection, removeObject) @@ -23,7 +23,7 @@ TEST(SaiObjectCollection, removeObject) SaiObjectCollection oc; - EXPECT_THROW(oc.removeObject(mk), std::runtime_error); + EXPECT_NO_THROW(oc.removeObject(mk)); } TEST(SaiObjectCollection, setObjectAttr) @@ -36,7 +36,7 @@ TEST(SaiObjectCollection, setObjectAttr) SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_INIT_SWITCH); - EXPECT_THROW(oc.setObjectAttr(mk, *meta, nullptr), std::runtime_error); + EXPECT_NO_THROW(oc.setObjectAttr(mk, *meta, nullptr)); } TEST(SaiObjectCollection, getObjectAttr) @@ -54,5 +54,5 @@ TEST(SaiObjectCollection, getObject) SaiObjectCollection oc; - EXPECT_THROW(oc.getObject(mk), std::runtime_error); + EXPECT_NO_THROW(oc.getObject(mk)); }