From 38652c3276645be9a798962e0643195ee98106be Mon Sep 17 00:00:00 2001 From: sitao Date: Fri, 28 Mar 2025 00:16:03 -0400 Subject: [PATCH] Fix fetch task logic --- src/spider/scheduler/FifoPolicy.cpp | 19 ++++++++++++++----- src/spider/scheduler/FifoPolicy.hpp | 2 ++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/spider/scheduler/FifoPolicy.cpp b/src/spider/scheduler/FifoPolicy.cpp index ae57dd60a..f1fc33123 100644 --- a/src/spider/scheduler/FifoPolicy.cpp +++ b/src/spider/scheduler/FifoPolicy.cpp @@ -1,6 +1,7 @@ #include "FifoPolicy.hpp" #include +#include #include #include #include @@ -29,12 +30,20 @@ auto FifoPolicy::schedule_next( boost::uuids::uuid const /*worker_id*/, std::string const& worker_addr ) -> std::optional { - if (m_tasks.empty()) { - fetch_tasks(); - if (m_tasks.empty()) { - return std::nullopt; - } + std::optional const next_task = pop_next_task(worker_addr); + if (next_task.has_value()) { + return next_task; } + size_t const num_tasks = m_tasks.size(); + fetch_tasks(); + if (m_tasks.size() == num_tasks) { + return std::nullopt; + } + return pop_next_task(worker_addr); +} + +auto FifoPolicy::pop_next_task(std::string const& worker_addr +) -> std::optional { auto const reverse_begin = std::reverse_iterator(m_tasks.end()); auto const reverse_end = std::reverse_iterator(m_tasks.begin()); auto const it diff --git a/src/spider/scheduler/FifoPolicy.hpp b/src/spider/scheduler/FifoPolicy.hpp index 2c142f1f6..b62592460 100644 --- a/src/spider/scheduler/FifoPolicy.hpp +++ b/src/spider/scheduler/FifoPolicy.hpp @@ -30,6 +30,8 @@ class FifoPolicy final : public SchedulerPolicy { private: auto fetch_tasks() -> void; + auto pop_next_task(std::string const& worker_addr) -> std::optional; + std::shared_ptr m_metadata_store; std::shared_ptr m_data_store; std::shared_ptr m_conn;