@@ -629,6 +629,17 @@ sai_status_t Syncd::processClearStatsEvent(
629
629
sai_object_meta_key_t metaKey;
630
630
sai_deserialize_object_meta_key (key, metaKey);
631
631
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
+
632
643
if (!m_translator->tryTranslateVidToRid (metaKey))
633
644
{
634
645
SWSS_LOG_WARN (" VID to RID translation failure: %s" , key.c_str ());
@@ -675,7 +686,16 @@ sai_status_t Syncd::processGetStatsEvent(
675
686
sai_object_meta_key_t metaKey;
676
687
sai_deserialize_object_meta_key (key, metaKey);
677
688
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
+ }
679
699
680
700
m_translator->translateVidToRid (metaKey);
681
701
@@ -867,6 +887,16 @@ sai_status_t Syncd::processBulkQuadEventInInitViewMode(
867
887
868
888
syncUpdateRedisBulkQuadEvent (api, statuses, objectType, objectIds, strAttributes);
869
889
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
+
870
900
return SAI_STATUS_SUCCESS;
871
901
}
872
902
@@ -1471,6 +1501,7 @@ sai_status_t Syncd::processBulkOidCreate(
1471
1501
if (statuses[idx] == SAI_STATUS_SUCCESS)
1472
1502
{
1473
1503
m_translator->insertRidAndVid (objectRids[idx], objectVids[idx]);
1504
+
1474
1505
SWSS_LOG_INFO (" saved VID %s to RID %s" ,
1475
1506
sai_serialize_object_id (objectVids[idx]).c_str (),
1476
1507
sai_serialize_object_id (objectRids[idx]).c_str ());
@@ -1722,6 +1753,12 @@ sai_status_t Syncd::processQuadInInitViewModeCreate(
1722
1753
{
1723
1754
onSwitchCreateInInitViewMode (objectVid, attr_count, attr_list);
1724
1755
}
1756
+ else
1757
+ {
1758
+ // in init view mode insert every created object except switch
1759
+
1760
+ m_createdInInitView.insert (objectVid);
1761
+ }
1725
1762
}
1726
1763
1727
1764
sendApiResponse (SAI_COMMON_API_CREATE, SAI_STATUS_SUCCESS);
@@ -1837,6 +1874,19 @@ sai_status_t Syncd::processQuadInInitViewModeGet(
1837
1874
sai_object_id_t objectVid;
1838
1875
sai_deserialize_object_id (strObjectId, objectVid);
1839
1876
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
+
1840
1890
switchVid = VidManager::switchIdQuery (objectVid);
1841
1891
1842
1892
SWSS_LOG_DEBUG (" generic get (init view) for object type %s:%s" ,
@@ -3211,6 +3261,8 @@ sai_status_t Syncd::processNotifySyncd(
3211
3261
3212
3262
clearTempView ();
3213
3263
3264
+ m_createdInInitView.clear ();
3265
+
3214
3266
// NOTE: Currently as WARN to be easier to spot, later should be NOTICE.
3215
3267
3216
3268
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(
3263
3315
*/
3264
3316
3265
3317
m_translator->clearLocalCache ();
3318
+
3319
+ m_createdInInitView.clear ();
3266
3320
}
3267
3321
else
3268
3322
{
0 commit comments