From abc9f0e82591696023ee7f85b2c2062e72024b6f Mon Sep 17 00:00:00 2001 From: Zain Budhwani <99770260+zbud-msft@users.noreply.github.com> Date: Mon, 23 Dec 2024 21:13:11 -0800 Subject: [PATCH] Ignore control character event if it comes (#21200) Why I did it Fixes #21140 In #20024 and sonic-net/sonic-swss-common#906, we made the change that when a control character is read, zmq_message_read will return with rc 0, which will create an empty internal event. As part of eventd design, empty structured events are dropped, which leads to control characters being a no-op which is the expected behavior. In UT, we are still always expecting a control character to be the first message to be read by zmq which is not the case as described in #20024. We are also not ignoring empty events that are read which is being done by eventd. With this change, control characters are properly ignored if it does after the first test event. How I did it Ignore empty structured events and not expect first zmq_message_read to be control character. How to verify it Manual test/pipeline --- src/sonic-eventd/tests/eventd_ut.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/sonic-eventd/tests/eventd_ut.cpp b/src/sonic-eventd/tests/eventd_ut.cpp index a499bb67a95e..6c2ddb116043 100644 --- a/src/sonic-eventd/tests/eventd_ut.cpp +++ b/src/sonic-eventd/tests/eventd_ut.cpp @@ -164,16 +164,12 @@ void run_cap(void *zctx, bool &term, string &read_source, EXPECT_EQ(0, zmq_setsockopt(mock_cap, ZMQ_SUBSCRIBE, "", 0)); EXPECT_EQ(0, zmq_setsockopt(mock_cap, ZMQ_RCVTIMEO, &block_ms, sizeof (block_ms))); - zmq_msg_t msg; - zmq_msg_init(&msg); - int rc = zmq_msg_recv(&msg, mock_cap, 0); - EXPECT_EQ(1, rc); // read control character while(!term) { string source; internal_event_t ev_int; - - if (0 == zmq_message_read(mock_cap, 0, source, ev_int)) { + int rc = zmq_message_read(mock_cap, 0, source, ev_int); + if (0 == rc && !ev_int.empty()) { // ignore control character empty event cnt = ++i; } }