fix too strict assertion

This commit is contained in:
Alexander Tokmakov 2022-03-22 14:43:52 +01:00
parent 778416f576
commit e8b7f963b7
2 changed files with 14 additions and 1 deletions

View File

@ -350,6 +350,12 @@ void DDLWorker::scheduleTasks(bool reinitialized)
bool maybe_concurrently_deleting = task && !zookeeper->exists(fs::path(task->entry_path) / "active"); bool maybe_concurrently_deleting = task && !zookeeper->exists(fs::path(task->entry_path) / "active");
return task && !maybe_concurrently_deleting && !maybe_currently_processing; return task && !maybe_concurrently_deleting && !maybe_currently_processing;
} }
else if (last_skipped_entry_name.has_value() && !queue_fully_loaded_after_initialization_debug_helper)
{
/// If connection was lost during queue loading
/// we may start processing from finished task (because we don't know yet that it's finished) and it's ok.
return false;
}
else else
{ {
/// Return true if entry should not be scheduled. /// Return true if entry should not be scheduled.
@ -365,7 +371,11 @@ void DDLWorker::scheduleTasks(bool reinitialized)
String reason; String reason;
auto task = initAndCheckTask(entry_name, reason, zookeeper); auto task = initAndCheckTask(entry_name, reason, zookeeper);
if (!task) if (task)
{
queue_fully_loaded_after_initialization_debug_helper = true;
}
else
{ {
LOG_DEBUG(log, "Will not execute task {}: {}", entry_name, reason); LOG_DEBUG(log, "Will not execute task {}: {}", entry_name, reason);
updateMaxDDLEntryID(entry_name); updateMaxDDLEntryID(entry_name);

View File

@ -131,6 +131,9 @@ protected:
std::optional<String> first_failed_task_name; std::optional<String> first_failed_task_name;
std::list<DDLTaskPtr> current_tasks; std::list<DDLTaskPtr> current_tasks;
/// This flag is needed for debug assertions only
bool queue_fully_loaded_after_initialization_debug_helper = false;
Coordination::Stat queue_node_stat; Coordination::Stat queue_node_stat;
std::shared_ptr<Poco::Event> queue_updated_event = std::make_shared<Poco::Event>(); std::shared_ptr<Poco::Event> queue_updated_event = std::make_shared<Poco::Event>();
std::shared_ptr<Poco::Event> cleanup_event = std::make_shared<Poco::Event>(); std::shared_ptr<Poco::Event> cleanup_event = std::make_shared<Poco::Event>();