@@ -389,6 +389,11 @@ task_process_status BufferOrch::processBufferPool(KeyOpFieldsValuesTuple &tuple)
389
389
{
390
390
sai_object = (*(m_buffer_type_maps[map_type_name]))[object_name].m_saiObjectId ;
391
391
SWSS_LOG_DEBUG (" found existing object:%s of type:%s" , object_name.c_str (), map_type_name.c_str ());
392
+ if ((*(m_buffer_type_maps[map_type_name]))[object_name].m_pendingRemove && op == SET_COMMAND)
393
+ {
394
+ SWSS_LOG_NOTICE (" Entry %s %s is pending remove, need retry" , map_type_name.c_str (), object_name.c_str ());
395
+ return task_process_status::task_need_retry;
396
+ }
392
397
}
393
398
SWSS_LOG_DEBUG (" processing command:%s" , op.c_str ());
394
399
if (object_name == " ingress_zero_pool" )
@@ -565,6 +570,7 @@ task_process_status BufferOrch::processBufferPool(KeyOpFieldsValuesTuple &tuple)
565
570
}
566
571
567
572
(*(m_buffer_type_maps[map_type_name]))[object_name].m_saiObjectId = sai_object;
573
+ (*(m_buffer_type_maps[map_type_name]))[object_name].m_pendingRemove = false ;
568
574
// Here we take the PFC watchdog approach to update the COUNTERS_DB metadata (e.g., PFC_WD_DETECTION_TIME per queue)
569
575
// at initialization (creation and registration phase)
570
576
// Specifically, we push the buffer pool name to oid mapping upon the creation of the oid
@@ -579,6 +585,7 @@ task_process_status BufferOrch::processBufferPool(KeyOpFieldsValuesTuple &tuple)
579
585
{
580
586
auto hint = objectReferenceInfo (m_buffer_type_maps, map_type_name, object_name);
581
587
SWSS_LOG_NOTICE (" Can't remove object %s due to being referenced (%s)" , object_name.c_str (), hint.c_str ());
588
+ (*(m_buffer_type_maps[map_type_name]))[object_name].m_pendingRemove = true ;
582
589
583
590
return task_process_status::task_need_retry;
584
591
}
@@ -647,6 +654,11 @@ task_process_status BufferOrch::processBufferProfile(KeyOpFieldsValuesTuple &tup
647
654
{
648
655
sai_object = (*(m_buffer_type_maps[map_type_name]))[object_name].m_saiObjectId ;
649
656
SWSS_LOG_DEBUG (" found existing object:%s of type:%s" , object_name.c_str (), map_type_name.c_str ());
657
+ if ((*(m_buffer_type_maps[map_type_name]))[object_name].m_pendingRemove && op == SET_COMMAND)
658
+ {
659
+ SWSS_LOG_NOTICE (" Entry %s %s is pending remove, need retry" , map_type_name.c_str (), object_name.c_str ());
660
+ return task_process_status::task_need_retry;
661
+ }
650
662
}
651
663
SWSS_LOG_DEBUG (" processing command:%s" , op.c_str ());
652
664
if (op == SET_COMMAND)
@@ -787,6 +799,7 @@ task_process_status BufferOrch::processBufferProfile(KeyOpFieldsValuesTuple &tup
787
799
}
788
800
}
789
801
(*(m_buffer_type_maps[map_type_name]))[object_name].m_saiObjectId = sai_object;
802
+ (*(m_buffer_type_maps[map_type_name]))[object_name].m_pendingRemove = false ;
790
803
SWSS_LOG_NOTICE (" Created buffer profile %s with type %s" , object_name.c_str (), map_type_name.c_str ());
791
804
}
792
805
@@ -799,6 +812,7 @@ task_process_status BufferOrch::processBufferProfile(KeyOpFieldsValuesTuple &tup
799
812
{
800
813
auto hint = objectReferenceInfo (m_buffer_type_maps, map_type_name, object_name);
801
814
SWSS_LOG_NOTICE (" Can't remove object %s due to being referenced (%s)" , object_name.c_str (), hint.c_str ());
815
+ (*(m_buffer_type_maps[map_type_name]))[object_name].m_pendingRemove = true ;
802
816
803
817
return task_process_status::task_need_retry;
804
818
}
0 commit comments