@@ -629,6 +629,17 @@ sai_status_t Syncd::processClearStatsEvent(
629629 sai_object_meta_key_t metaKey;
630630 sai_deserialize_object_meta_key (key, metaKey);
631631
632+ if (isInitViewMode () && m_createdInInitView.find (metaKey.objectkey .key .object_id ) != m_createdInInitView.end ())
633+ {
634+ SWSS_LOG_WARN (" CLEAR STATS api can't be used on %s since it's created in INIT_VIEW mode" , key.c_str ());
635+
636+ sai_status_t status = SAI_STATUS_INVALID_OBJECT_ID;
637+
638+ m_selectableChannel->set (sai_serialize_status (status), {}, REDIS_ASIC_STATE_COMMAND_GETRESPONSE);
639+
640+ return status;
641+ }
642+
632643 if (!m_translator->tryTranslateVidToRid (metaKey))
633644 {
634645 SWSS_LOG_WARN (" VID to RID translation failure: %s" , key.c_str ());
@@ -675,7 +686,16 @@ sai_status_t Syncd::processGetStatsEvent(
675686 sai_object_meta_key_t metaKey;
676687 sai_deserialize_object_meta_key (key, metaKey);
677688
678- // TODO get stats on created object in init view mode could fail
689+ if (isInitViewMode () && m_createdInInitView.find (metaKey.objectkey .key .object_id ) != m_createdInInitView.end ())
690+ {
691+ SWSS_LOG_WARN (" GET STATS api can't be used on %s since it's created in INIT_VIEW mode" , key.c_str ());
692+
693+ sai_status_t status = SAI_STATUS_INVALID_OBJECT_ID;
694+
695+ m_selectableChannel->set (sai_serialize_status (status), {}, REDIS_ASIC_STATE_COMMAND_GETRESPONSE);
696+
697+ return status;
698+ }
679699
680700 m_translator->translateVidToRid (metaKey);
681701
@@ -867,6 +887,16 @@ sai_status_t Syncd::processBulkQuadEventInInitViewMode(
867887
868888 syncUpdateRedisBulkQuadEvent (api, statuses, objectType, objectIds, strAttributes);
869889
890+ for (auto & str: objectIds)
891+ {
892+ sai_object_id_t objectVid;
893+ sai_deserialize_object_id (str, objectVid);
894+
895+ // in init view mode insert every created object except switch
896+
897+ m_createdInInitView.insert (objectVid);
898+ }
899+
870900 return SAI_STATUS_SUCCESS;
871901 }
872902
@@ -1471,6 +1501,7 @@ sai_status_t Syncd::processBulkOidCreate(
14711501 if (statuses[idx] == SAI_STATUS_SUCCESS)
14721502 {
14731503 m_translator->insertRidAndVid (objectRids[idx], objectVids[idx]);
1504+
14741505 SWSS_LOG_INFO (" saved VID %s to RID %s" ,
14751506 sai_serialize_object_id (objectVids[idx]).c_str (),
14761507 sai_serialize_object_id (objectRids[idx]).c_str ());
@@ -1722,6 +1753,12 @@ sai_status_t Syncd::processQuadInInitViewModeCreate(
17221753 {
17231754 onSwitchCreateInInitViewMode (objectVid, attr_count, attr_list);
17241755 }
1756+ else
1757+ {
1758+ // in init view mode insert every created object except switch
1759+
1760+ m_createdInInitView.insert (objectVid);
1761+ }
17251762 }
17261763
17271764 sendApiResponse (SAI_COMMON_API_CREATE, SAI_STATUS_SUCCESS);
@@ -1837,6 +1874,19 @@ sai_status_t Syncd::processQuadInInitViewModeGet(
18371874 sai_object_id_t objectVid;
18381875 sai_deserialize_object_id (strObjectId, objectVid);
18391876
1877+ if (isInitViewMode () && m_createdInInitView.find (objectVid) != m_createdInInitView.end ())
1878+ {
1879+ SWSS_LOG_WARN (" GET api can't be used on %s (%s) since it's created in INIT_VIEW mode" ,
1880+ strObjectId.c_str (),
1881+ sai_serialize_object_type (objectType).c_str ());
1882+
1883+ status = SAI_STATUS_INVALID_OBJECT_ID;
1884+
1885+ sendGetResponse (objectType, strObjectId, switchVid, status, attr_count, attr_list);
1886+
1887+ return status;
1888+ }
1889+
18401890 switchVid = VidManager::switchIdQuery (objectVid);
18411891
18421892 SWSS_LOG_DEBUG (" generic get (init view) for object type %s:%s" ,
@@ -3211,6 +3261,8 @@ sai_status_t Syncd::processNotifySyncd(
32113261
32123262 clearTempView ();
32133263
3264+ m_createdInInitView.clear ();
3265+
32143266 // NOTE: Currently as WARN to be easier to spot, later should be NOTICE.
32153267
32163268 SWSS_LOG_WARN (" syncd switched to INIT VIEW mode, all op will be saved to TEMP view" );
@@ -3263,6 +3315,8 @@ sai_status_t Syncd::processNotifySyncd(
32633315 */
32643316
32653317 m_translator->clearLocalCache ();
3318+
3319+ m_createdInInitView.clear ();
32663320 }
32673321 else
32683322 {
0 commit comments