[action] [PR:19310] Fix buffer queue cnt test to account for different BUFFER_QUEUE configs#19501
Merged
mssonicbld merged 1 commit intosonic-net:202505from Jul 10, 2025
Merged
Conversation
…gs (sonic-net#19310) Approach What is the motivation for this PR? Currently this test does not account for BUFFER_QUEUE configs to have only entry for an interface. In some SKU's and config BUFFER_QUEUE may have config such as "BUFFER_QUEUE": { "Ethernet0|0-2": { "profile": "egress_lossy_profile" }, "Ethernet0|3-4": { "profile": "egress_lossless_profile" }, "Ethernet0|5-7": { "profile": "egress_lossy_profile" }, or even "BUFFER_QUEUE": { "Ethernet0|0": { "profile": "egress_lossy_profile" }, "Ethernet0|1": { "profile": "egress_lossless_profile" }, "Ethernet0|2": { "profile": "egress_lossy_profile" }, ... etc The test works fine for the above configs. However if the BUFFER_QUEUE was configured such as "BUFFER_QUEUE": { "Ethernet0|0-9": { "profile": "egress_lossy_profile" }, "Ethernet100|0-9": { "profile": "egress_lossless_profile" }, "Ethernet200|0-9": { "profile": "egress_lossy_profile" }, When we delete Ethernet0|0-9 as part of del data['BUFFER_QUEUE'][ interface_buffer_queues[0] ] we end up deleting all queues for that interface from COUNTERS_QUEUE_NAME_MAP which causes check_buffer_queues_cnt_cmd_output to always return false. This test checks for such edge case and we split the BUFFER_QUEUE config such that we can delete an entry without deleting all entries in the map. How did you do it? Code change How did you verify/test it? Test on 20241110 01/07/2025 19:00:48 base._run L0108 DEBUG | /var/src/sonic-mgmt-int/tests/telemetry/test_telemetry.py::get_buffer_queues_cnt#47: [xxxxx-x] AnsibleModule::shell Result => {"failed": true, "changed": true, "end": "2025-07-01 19:00:48.806079", "stdout": "Performing GetRequest, encoding=JSON_IETF to xx.xx.xxx.xxx with the following gNMI Path\n ------------------------- \n [elem {\n name: \"COUNTERS_QUEUE_NAME_MAP\"\n}\nelem {\n name: \"Ethernet0:0\"\n}\n]\nGRPC error\n redis: nil", "cmd": "python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:0 -xt COUNTERS_DB -o \"xxxxxxxxx\" ", "delta": "0:00:00.199525", "stderr": "", "rc": 1, "invocation": {"module_args": {"creates": null, "executable": null, "_uses_shell": true, "strip_empty_ends": true, "_raw_params": "python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:0 -xt COUNTERS_DB -o \"xxxxxxxxx\" ", "removes": null, "argv": null, "warn": true, "chdir": null, "stdin_add_newline": true, "stdin": null}}, "start": "2025-07-01 19:00:48.606554", "msg": "non-zero return code", "stdout_lines": ["Performing GetRequest, encoding=JSON_IETF to xx.xx.xxx.xxx with the following gNMI Path", " ------------------------- ", " [elem {", " name: \"COUNTERS_QUEUE_NAME_MAP\"", "}", "elem {", " name: \"Ethernet0:0\"", "}", "]", "GRPC error", " redis: nil"], "stderr_lines": [], "_ansible_no_log": false} 01/07/2025 19:00:48 base._run L0071 DEBUG | /var/src/sonic-mgmt-int/tests/telemetry/test_telemetry.py::get_buffer_queues_cnt#47: [xxxxx-x] AnsibleModule::shell, args=["python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:1 -xt COUNTERS_DB -o \"xxxxxxxxx\" "], kwargs={"module_ignore_errors": true} 01/07/2025 19:00:49 base._run L0108 DEBUG | /var/src/sonic-mgmt-int/tests/telemetry/test_telemetry.py::get_buffer_queues_cnt#47: [xxxxx-x] AnsibleModule::shell Result => {"changed": true, "end": "2025-07-01 19:00:49.227872", "stdout": "Performing GetRequest, encoding=JSON_IETF to xx.xx.xxx.xxx with the following gNMI Path\n ------------------------- \n [elem {\n name: \"COUNTERS_QUEUE_NAME_MAP\"\n}\nelem {\n name: \"Ethernet0:1\"\n}\n]\nThe GetResponse is below\n-------------------------\n\noid:0x15000000000679", "cmd": "python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:1 -xt COUNTERS_DB -o \"xxxxxxxxx\" ", "rc": 0, "start": "2025-07-01 19:00:48.981566", "stderr": "", "delta": "0:00:00.246306", "invocation": {"module_args": {"creates": null, "executable": null, "_uses_shell": true, "strip_empty_ends": true, "_raw_params": "python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:1 -xt COUNTERS_DB -o \"xxxxxxxxx\" ", "removes": null, "argv": null, "warn": true, "chdir": null, "stdin_add_newline": true, "stdin": null}}, "stdout_lines": ["Performing GetRequest, encoding=JSON_IETF to xx.xx.xxx.xxx with the following gNMI Path", " ------------------------- ", " [elem {", " name: \"COUNTERS_QUEUE_NAME_MAP\"", "}", "elem {", " name: \"Ethernet0:1\"", "}", "]", "The GetResponse is below", "-------------------------", "", "oid:0x15000000000679"], "stderr_lines": [], "_ansible_no_log": false, "failed": false} 01/07/2025 19:00:49 base._run L0071 DEBUG | /var/src/sonic-mgmt-int/tests/telemetry/test_telemetry.py::get_buffer_queues_cnt#47: [xxxxx-x] AnsibleModule::shell, args=["python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:2 -xt COUNTERS_DB -o \"xxxxxxxxx\" "], kwargs={"module_ignore_errors": true} 01/07/2025 19:00:49 base._run L0108 DEBUG | /var/src/sonic-mgmt-int/tests/telemetry/test_telemetry.py::get_buffer_queues_cnt#47: [xxxxx-x] AnsibleModule::shell Result => {"changed": true, "end": "2025-07-01 19:00:49.614484", "stdout": "Performing GetRequest, encoding=JSON_IETF to xx.xx.xxx.xxx with the following gNMI Path\n ------------------------- \n [elem {\n name: \"COUNTERS_QUEUE_NAME_MAP\"\n}\nelem {\n name: \"Ethernet0:2\"\n}\n]\nThe GetResponse is below\n-------------------------\n\noid:0x1500000000067a", "cmd": "python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:2 -xt COUNTERS_DB -o \"xxxxxxxxx\" ", "rc": 0, "start": "2025-07-01 19:00:49.411463", "stderr": "", "delta": "0:00:00.203021", "invocation": {"module_args": {"creates": null, "executable": null, "_uses_shell": true, "strip_empty_ends": true, "_raw_params": "python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:2 -xt COUNTERS_DB -o \"xxxxxxxxx\" ", "removes": null, "argv": null, "warn": true, "chdir": null, "stdin_add_newline": true, "stdin": null}}, "stdout_lines": ["Performing GetRequest, encoding=JSON_IETF to xx.xx.xxx.xxx with the following gNMI Path", " ------------------------- ", " [elem {", " name: \"COUNTERS_QUEUE_NAME_MAP\"", "}", "elem {", " name: \"Ethernet0:2\"", "}", "]", "The GetResponse is below", "-------------------------", "", "oid:0x1500000000067a"], "stderr_lines": [], "_ansible_no_log": false, "failed": false} 01/07/2025 19:00:49 base._run L0071 DEBUG | /var/src/sonic-mgmt-int/tests/telemetry/test_telemetry.py::get_buffer_queues_cnt#47: [xxxxx-x] AnsibleModule::shell, args=["python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:3 -xt COUNTERS_DB -o \"xxxxxxxxx\" "], kwargs={"module_ignore_errors": true} 01/07/2025 19:00:50 base._run L0108 DEBUG | /var/src/sonic-mgmt-int/tests/telemetry/test_telemetry.py::get_buffer_queues_cnt#47: [xxxxx-x] AnsibleModule::shell Result => {"changed": true, "end": "2025-07-01 19:00:49.997748", "stdout": "Performing GetRequest, encoding=JSON_IETF to xx.xx.xxx.xxx with the following gNMI Path\n ------------------------- \n [elem {\n name: \"COUNTERS_QUEUE_NAME_MAP\"\n}\nelem {\n name: \"Ethernet0:3\"\n}\n]\nThe GetResponse is below\n-------------------------\n\noid:0x1500000000067b", "cmd": "python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:3 -xt COUNTERS_DB -o \"xxxxxxxxx\" ", "rc": 0, "start": "2025-07-01 19:00:49.798159", "stderr": "", "delta": "0:00:00.199589", "invocation": {"module_args": {"creates": null, "executable": null, "_uses_shell": true, "strip_empty_ends": true, "_raw_params": "python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:3 -xt COUNTERS_DB -o \"xxxxxxxxx\" ", "removes": null, "argv": null, "warn": true, "chdir": null, "stdin_add_newline": true, "stdin": null}}, "stdout_lines": ["Performing GetRequest, encoding=JSON_IETF to xx.xx.xxx.xxx with the following gNMI Path", " ------------------------- ", " [elem {", " name: \"COUNTERS_QUEUE_NAME_MAP\"", "}", "elem {", " name: \"Ethernet0:3\"", "}", "]", "The GetResponse is below", "-------------------------", "", "oid:0x1500000000067b"], "stderr_lines": [], "_ansible_no_log": false, "failed": false} 01/07/2025 19:00:50 base._run L0071 DEBUG | /var/src/sonic-mgmt-int/tests/telemetry/test_telemetry.py::get_buffer_queues_cnt#47: [xxxxx-x] AnsibleModule::shell, args=["python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:4 -xt COUNTERS_DB -o \"xxxxxxxxx\" "], kwargs={"module_ignore_errors": true} 01/07/2025 19:00:50 base._run L0108 DEBUG | /var/src/sonic-mgmt-int/tests/telemetry/test_telemetry.py::get_buffer_queues_cnt#47: [xxxxx-x] AnsibleModule::shell Result => {"changed": true, "end": "2025-07-01 19:00:50.381489", "stdout": "Performing GetRequest, encoding=JSON_IETF to xx.xx.xxx.xxx with the following gNMI Path\n ------------------------- \n [elem {\n name: \"COUNTERS_QUEUE_NAME_MAP\"\n}\nelem {\n name: \"Ethernet0:4\"\n}\n]\nThe GetResponse is below\n-------------------------\n\noid:0x1500000000067c", "cmd": "python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:4 -xt COUNTERS_DB -o \"xxxxxxxxx\" ", "rc": 0, "start": "2025-07-01 19:00:50.177327", "stderr": "", "delta": "0:00:00.204162", "invocation": {"module_args": {"creates": null, "executable": null, "_uses_shell": true, "strip_empty_ends": true, "_raw_params": "python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:4 -xt COUNTERS_DB -o \"xxxxxxxxx\" ", "removes": null, "argv": null, "warn": true, "chdir": null, "stdin_add_newline": true, "stdin": null}}, "stdout_lines": ["Performing GetRequest, encoding=JSON_IETF to xx.xx.xxx.xxx with the following gNMI Path", " ------------------------- ", " [elem {", " name: \"COUNTERS_QUEUE_NAME_MAP\"", "}", "elem {", " name: \"Ethernet0:4\"", "}", "]", "The GetResponse is below", "-------------------------", "", "oid:0x1500000000067c"], "stderr_lines": [], "_ansible_no_log": false, "failed": false} 01/07/2025 19:00:50 base._run L0071 DEBUG | /var/src/sonic-mgmt-int/tests/telemetry/test_telemetry.py::get_buffer_queues_cnt#47: [xxxxx-x] AnsibleModule::shell, args=["python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:5 -xt COUNTERS_DB -o \"xxxxxxxxx\" "], kwargs={"module_ignore_errors": true} 01/07/2025 19:00:50 base._run L0108 DEBUG | /var/src/sonic-mgmt-int/tests/telemetry/test_telemetry.py::get_buffer_queues_cnt#47: [xxxxx-x] AnsibleModule::shell Result => {"changed": true, "end": "2025-07-01 19:00:50.771962", "stdout": "Performing GetRequest, encoding=JSON_IETF to xx.xx.xxx.xxx with the following gNMI Path\n ------------------------- \n [elem {\n name: \"COUNTERS_QUEUE_NAME_MAP\"\n}\nelem {\n name: \"Ethernet0:5\"\n}\n]\nThe GetResponse is below\n-------------------------\n\noid:0x1500000000067d", "cmd": "python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:5 -xt COUNTERS_DB -o \"xxxxxxxxx\" ", "rc": 0, "start": "2025-07-01 19:00:50.566323", "stderr": "", "delta": "0:00:00.205639", "invocation": {"module_args": {"creates": null, "executable": null, "_uses_shell": true, "strip_empty_ends": true, "_raw_params": "python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:5 -xt COUNTERS_DB -o \"xxxxxxxxx\" ", "removes": null, "argv": null, "warn": true, "chdir": null, "stdin_add_newline": true, "stdin": null}}, "stdout_lines": ["Performing GetRequest, encoding=JSON_IETF to xx.xx.xxx.xxx with the following gNMI Path", " ------------------------- ", " [elem {", " name: \"COUNTERS_QUEUE_NAME_MAP\"", "}", "elem {", " name: \"Ethernet0:5\"", "}", "]", "The GetResponse is below", "-------------------------", "", "oid:0x1500000000067d"], "stderr_lines": [], "_ansible_no_log": false, "failed": false} 01/07/2025 19:00:50 base._run L0071 DEBUG | /var/src/sonic-mgmt-int/tests/telemetry/test_telemetry.py::get_buffer_queues_cnt#47: [xxxxx-x] AnsibleModule::shell, args=["python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:6 -xt COUNTERS_DB -o \"xxxxxxxxx\" "], kwargs={"module_ignore_errors": true} 01/07/2025 19:00:51 base._run L0108 DEBUG | /var/src/sonic-mgmt-int/tests/telemetry/test_telemetry.py::get_buffer_queues_cnt#47: [xxxxx-x] AnsibleModule::shell Result => {"changed": true, "end": "2025-07-01 19:00:51.236571", "stdout": "Performing GetRequest, encoding=JSON_IETF to xx.xx.xxx.xxx with the following gNMI Path\n ------------------------- \n [elem {\n name: \"COUNTERS_QUEUE_NAME_MAP\"\n}\nelem {\n name: \"Ethernet0:6\"\n}\n]\nThe GetResponse is below\n-------------------------\n\noid:0x1500000000067e", "cmd": "python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:6 -xt COUNTERS_DB -o \"xxxxxxxxx\" ", "rc": 0, "start": "2025-07-01 19:00:50.951268", "stderr": "", "delta": "0:00:00.285303", "invocation": {"module_args": {"creates": null, "executable": null, "_uses_shell": true, "strip_empty_ends": true, "_raw_params": "python /root/gnxi/gnmi_cli_py/py_gnmicli.py -g -t xx.xx.xxx.xxx -p 50051 -m get -x COUNTERS_QUEUE_NAME_MAP/Ethernet0:6 -xt COUNTERS_DB -o \"xxxxxxxxx\" ", "removes": null, "argv": null, "warn": true, "choir": null, "stdin_add_newline": true, "stdin": null}}, "stdout_lines": ["Performing GetRequest, encoding=JSON_IETF to xx.xx.xxx.xxx with the following gNMI Path", " ------------------------- ", " [elem {", " name: \"COUNTERS_QUEUE_NAME_MAP\"", "}", "elem {", " name: \"Ethernet0:6\"", "}", "]", "The GetResponse is below", "-------------------------", "", "oid:0x1500000000067e"], "stderr_lines": [], "_ansible_no_log": false, "failed": false}
Collaborator
Author
|
Original PR: #19310 |
11 tasks
Collaborator
Author
|
/azp run |
|
Azure Pipelines successfully started running 1 pipeline(s). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description of PR
Summary:
Fixes #19201
MSADO: 33479698
Type of change
Back port request
Approach
What is the motivation for this PR?
Currently this test does not account for BUFFER_QUEUE configs to have only entry for an interface.
In some SKU's and config
BUFFER_QUEUE may have config such as
"BUFFER_QUEUE": {
"Ethernet0|0-2": {
"profile": "egress_lossy_profile"
},
"Ethernet0|3-4": {
"profile": "egress_lossless_profile"
},
"Ethernet0|5-7": {
"profile": "egress_lossy_profile"
},
or even
"BUFFER_QUEUE": {
"Ethernet0|0": {
"profile": "egress_lossy_profile"
},
"Ethernet0|1": {
"profile": "egress_lossless_profile"
},
"Ethernet0|2": {
"profile": "egress_lossy_profile"
}, ... etc
The test works fine for the above configs.
However if the BUFFER_QUEUE was configured such as
"BUFFER_QUEUE": {
"Ethernet0|0-9": {
"profile": "egress_lossy_profile"
},
"Ethernet100|0-9": {
"profile": "egress_lossless_profile"
},
"Ethernet200|0-9": {
"profile": "egress_lossy_profile"
},
When we delete Ethernet0|0-9 as part of del data['BUFFER_QUEUE'][ interface_buffer_queues[0] ] we end up deleting all queues for that interface from COUNTERS_QUEUE_NAME_MAP which causes check_buffer_queues_cnt_cmd_output to always return false.
This test checks for such edge case and we split the BUFFER_QUEUE config such that we can delete an entry without deleting all entries in the map.
How did you do it?
Code change
How did you verify/test it?
Test on 20241110
Any platform specific information?
Supported testbed topology if it's a new test case?
Documentation