Skip to content

Commit 7f5eca5

Browse files
author
Shuotian Cheng
authored
[buffer]: Remove failed tasks from the m_toSync queue (#308)
- Remove the task with erase(it) to avoid looping inside the while - Align the code and refactor the error messages - Remove table verification code since it is unnecessary
1 parent cdf19d4 commit 7f5eca5

2 files changed

Lines changed: 25 additions & 29 deletions

File tree

orchagent/bufferorch.cpp

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -526,41 +526,37 @@ void BufferOrch::doTask(Consumer &consumer)
526526
auto it = consumer.m_toSync.begin();
527527
while (it != consumer.m_toSync.end())
528528
{
529-
KeyOpFieldsValuesTuple tuple = it->second;
530-
string map_type_name = consumer.m_consumer->getTableName();
531-
if (m_buffer_type_maps.find(map_type_name) == m_buffer_type_maps.end())
532-
{
533-
SWSS_LOG_ERROR("Unrecognised qos table encountered:%s", map_type_name.c_str());
534-
it = consumer.m_toSync.erase(it);
535-
continue;
536-
}
529+
/* Make sure the handler is initialized for the task */
530+
auto map_type_name = consumer.m_consumer->getTableName();
537531
if (m_bufferHandlerMap.find(map_type_name) == m_bufferHandlerMap.end())
538532
{
539533
SWSS_LOG_ERROR("No handler for key:%s found.", map_type_name.c_str());
540534
it = consumer.m_toSync.erase(it);
541535
continue;
542536
}
543-
task_process_status task_status = (this->*(m_bufferHandlerMap[map_type_name]))(consumer);
537+
538+
auto task_status = (this->*(m_bufferHandlerMap[map_type_name]))(consumer);
544539
switch(task_status)
545540
{
546-
case task_process_status::task_success :
547-
it = consumer.m_toSync.erase(it);
548-
break;
549-
case task_process_status::task_invalid_entry:
550-
SWSS_LOG_ERROR("Invalid buffer task item was encountered, removing from queue.");
551-
it = consumer.m_toSync.erase(it);
552-
break;
553-
case task_process_status::task_failed:
554-
SWSS_LOG_ERROR("Processing buffer task item failed, exiting.");
555-
return;
556-
case task_process_status::task_need_retry:
557-
SWSS_LOG_INFO("Processing buffer task item failed, will retry.");
558-
it++;
559-
break;
560-
default:
561-
SWSS_LOG_ERROR("Unknown task status: %d", task_status);
562-
it = consumer.m_toSync.erase(it);
563-
break;
541+
case task_process_status::task_success :
542+
it = consumer.m_toSync.erase(it);
543+
break;
544+
case task_process_status::task_invalid_entry:
545+
SWSS_LOG_ERROR("Failed to process invalid buffer task");
546+
it = consumer.m_toSync.erase(it);
547+
break;
548+
case task_process_status::task_failed:
549+
SWSS_LOG_ERROR("Failed to process buffer task, drop it");
550+
it = consumer.m_toSync.erase(it);
551+
return;
552+
case task_process_status::task_need_retry:
553+
SWSS_LOG_INFO("Failed to process buffer task, retry it");
554+
it++;
555+
break;
556+
default:
557+
SWSS_LOG_ERROR("Invalid task status %d", task_status);
558+
it = consumer.m_toSync.erase(it);
559+
break;
564560
}
565561
}
566562
}

orchagent/qosorch.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1243,7 +1243,7 @@ void QosOrch::doTask(Consumer &consumer)
12431243
while (it != consumer.m_toSync.end())
12441244
{
12451245
/* Make sure the handler is initialized for the task */
1246-
string qos_map_type_name = consumer.m_consumer->getTableName();
1246+
auto qos_map_type_name = consumer.m_consumer->getTableName();
12471247
if (m_qos_handler_map.find(qos_map_type_name) == m_qos_handler_map.end())
12481248
{
12491249
SWSS_LOG_ERROR("Task %s handler is not initialized", qos_map_type_name.c_str());
@@ -1266,7 +1266,7 @@ void QosOrch::doTask(Consumer &consumer)
12661266
it = consumer.m_toSync.erase(it);
12671267
return;
12681268
case task_process_status::task_need_retry :
1269-
SWSS_LOG_ERROR("Failed to process QOS task, retry it");
1269+
SWSS_LOG_INFO("Failed to process QOS task, retry it");
12701270
it++;
12711271
break;
12721272
default:

0 commit comments

Comments
 (0)