From a27ec92b6ce96e322d5a5bf2b23d7389f1437c29 Mon Sep 17 00:00:00 2001 From: saksarav Date: Wed, 14 Feb 2024 21:26:37 -0500 Subject: [PATCH 1/4] Fixed orchagent crash in VM with the Qos BUFFER_QUEUE|system-port|Queue-id-range config Signed-off-by: saksarav --- orchagent/bufferorch.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/orchagent/bufferorch.cpp b/orchagent/bufferorch.cpp index 91f13578a6f..9c8da5757c2 100644 --- a/orchagent/bufferorch.cpp +++ b/orchagent/bufferorch.cpp @@ -926,6 +926,7 @@ task_process_status BufferOrch::processQueue(KeyOpFieldsValuesTuple &tuple) { SWSS_LOG_DEBUG("processing queue:%zd", ind); sai_object_id_t queue_id; + string queues; if (gMySwitchType == "voq") { @@ -936,6 +937,7 @@ task_process_status BufferOrch::processQueue(KeyOpFieldsValuesTuple &tuple) return task_process_status::task_invalid_entry; } queue_id = queue_ids[ind]; + queues = tokens[3]; } else { @@ -951,11 +953,13 @@ task_process_status BufferOrch::processQueue(KeyOpFieldsValuesTuple &tuple) return task_process_status::task_need_retry; } queue_id = port.m_queue_ids[ind]; + queues = tokens[1]; } if (need_update_sai) { SWSS_LOG_DEBUG("Applying buffer profile:0x%" PRIx64 " to queue index:%zd, queue sai_id:0x%" PRIx64, sai_buffer_profile, ind, queue_id); + sai_status_t sai_status = sai_queue_api->set_queue_attribute(queue_id, &attr); if (sai_status != SAI_STATUS_SUCCESS) { @@ -970,7 +974,7 @@ task_process_status BufferOrch::processQueue(KeyOpFieldsValuesTuple &tuple) else { auto flexCounterOrch = gDirectory.get(); - auto queues = tokens[1]; + if (op == SET_COMMAND && (flexCounterOrch->getQueueCountersState() || flexCounterOrch->getQueueWatermarkCountersState())) { From 51dafad6f54f29bee015a7250a5a4f18efd82022 Mon Sep 17 00:00:00 2001 From: saksarav Date: Thu, 22 Feb 2024 10:43:16 -0500 Subject: [PATCH 2/4] Add/Remove Port Queue Counters only for non VOQ switch when the BUFEER_QUEUE config is added/deleted Signed-off-by: saksarav --- orchagent/bufferorch.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/orchagent/bufferorch.cpp b/orchagent/bufferorch.cpp index 9c8da5757c2..23fed42b512 100644 --- a/orchagent/bufferorch.cpp +++ b/orchagent/bufferorch.cpp @@ -970,8 +970,10 @@ task_process_status BufferOrch::processQueue(KeyOpFieldsValuesTuple &tuple) return handle_status; } } - // create/remove a port queue counter for the queue buffer - else + // create/remove a port queue counter for the queue buffer. + // For VOQ chassis, flexcounterorch adds the Queue Counters for all egress and VOQ queueis for all front panel and system ports + // to the FLEX_COUNTER_DB irrespective of BUFFER_QUEUE configuration. + else if (gMySwitchType != "voq") { auto flexCounterOrch = gDirectory.get(); From 1aeadaeaf314856d778d37fdbdcb4a053e05044f Mon Sep 17 00:00:00 2001 From: saksarav Date: Thu, 22 Feb 2024 13:49:15 -0500 Subject: [PATCH 3/4] Revert "Fixed orchagent crash in VM with the Qos BUFFER_QUEUE|system-port|Queue-id-range config" This reverts commit a27ec92b6ce96e322d5a5bf2b23d7389f1437c29. --- orchagent/bufferorch.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/orchagent/bufferorch.cpp b/orchagent/bufferorch.cpp index 23fed42b512..0fa80e21ab5 100644 --- a/orchagent/bufferorch.cpp +++ b/orchagent/bufferorch.cpp @@ -926,7 +926,6 @@ task_process_status BufferOrch::processQueue(KeyOpFieldsValuesTuple &tuple) { SWSS_LOG_DEBUG("processing queue:%zd", ind); sai_object_id_t queue_id; - string queues; if (gMySwitchType == "voq") { @@ -937,7 +936,6 @@ task_process_status BufferOrch::processQueue(KeyOpFieldsValuesTuple &tuple) return task_process_status::task_invalid_entry; } queue_id = queue_ids[ind]; - queues = tokens[3]; } else { @@ -953,13 +951,11 @@ task_process_status BufferOrch::processQueue(KeyOpFieldsValuesTuple &tuple) return task_process_status::task_need_retry; } queue_id = port.m_queue_ids[ind]; - queues = tokens[1]; } if (need_update_sai) { SWSS_LOG_DEBUG("Applying buffer profile:0x%" PRIx64 " to queue index:%zd, queue sai_id:0x%" PRIx64, sai_buffer_profile, ind, queue_id); - sai_status_t sai_status = sai_queue_api->set_queue_attribute(queue_id, &attr); if (sai_status != SAI_STATUS_SUCCESS) { @@ -976,7 +972,7 @@ task_process_status BufferOrch::processQueue(KeyOpFieldsValuesTuple &tuple) else if (gMySwitchType != "voq") { auto flexCounterOrch = gDirectory.get(); - + auto queues = tokens[1]; if (op == SET_COMMAND && (flexCounterOrch->getQueueCountersState() || flexCounterOrch->getQueueWatermarkCountersState())) { From 64ae2c52f048a60de92536907d0d321f5b317f80 Mon Sep 17 00:00:00 2001 From: saksarav Date: Thu, 22 Feb 2024 15:30:05 -0500 Subject: [PATCH 4/4] Fixed the code comment Signed-off-by: saksarav --- orchagent/bufferorch.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/orchagent/bufferorch.cpp b/orchagent/bufferorch.cpp index 0fa80e21ab5..c3a63c5ec3d 100644 --- a/orchagent/bufferorch.cpp +++ b/orchagent/bufferorch.cpp @@ -967,8 +967,8 @@ task_process_status BufferOrch::processQueue(KeyOpFieldsValuesTuple &tuple) } } // create/remove a port queue counter for the queue buffer. - // For VOQ chassis, flexcounterorch adds the Queue Counters for all egress and VOQ queueis for all front panel and system ports - // to the FLEX_COUNTER_DB irrespective of BUFFER_QUEUE configuration. + // For VOQ chassis, flexcounterorch adds the Queue Counters for all egress and VOQ queues of all front panel and system ports + // to the FLEX_COUNTER_DB irrespective of BUFFER_QUEUE configuration. So Port Queue counter needs to be updated only for non VOQ switch. else if (gMySwitchType != "voq") { auto flexCounterOrch = gDirectory.get();