24#ifndef MYSQL_CSA_DEPENDENCY_ADAPTER_LWM_H
25#define MYSQL_CSA_DEPENDENCY_ADAPTER_LWM_H
27#include <ankerl/unordered_dense.h>
118 inline std::pair<Clock_delay, Task_id_resolved>
solve(
119 Task_id task_id, int64_t seq_num, int64_t commit_parent)
override {
120 const uint64_t current_task_id = task_id.
get();
121 const bool is_contiguous = (
m_prev_seq + 1) == seq_num;
138 if (commit_parent > 0 && is_contiguous) {
139 uint64_t parent_id{0};
140 bool has_parent{
false};
153 parent_id = it->second;
158 uint64_t next_parent =
162 (next_parent < parent_id &&
168 }
else if (commit_parent == 0 || seq_num <=
m_prev_seq ||
185 seq_to_task.insert_or_assign(seq_num, current_task_id);
190 return std::make_pair<Clock_delay, Task_id_resolved>(delay, {});
Dependency adapter for LWM (Low Water Mark) based scheduling.
Definition: dependency_adapter_lwm.h:111
uint64_t max_task_id
Definition: dependency_adapter_lwm.h:209
int64_t m_prev_seq
Previous sequence number to check continuity.
Definition: dependency_adapter_lwm.h:212
int64_t m_dense_base_seq
First seq/task pair for the current dense mapping range.
Definition: dependency_adapter_lwm.h:219
std::size_t size() const
Get tracked mapping size for unit tests.
Definition: dependency_adapter_lwm.h:197
Dependency_adapter_lwm()
Definition: dependency_adapter_lwm.h:116
bool m_dense_mapping
True when current seq->task mapping is dense and can be resolved arithmetically (without hash inserts...
Definition: dependency_adapter_lwm.h:217
std::pair< Clock_delay, Task_id_resolved > solve(Task_id task_id, int64_t seq_num, int64_t commit_parent) override
Solves dependencies - figures out after which task a task with the given id should run.
Definition: dependency_adapter_lwm.h:118
uint64_t m_dense_base_task_id
Definition: dependency_adapter_lwm.h:220
ankerl::unordered_dense::map< int64_t, uint64_t > seq_to_task
Definition: dependency_adapter_lwm.h:208
uint64_t id_after_barrier
Definition: dependency_adapter_lwm.h:210
uint64_t m_prev_task_id
Previous task id for fast-path parent resolution.
Definition: dependency_adapter_lwm.h:214
Class that resolves dependencies based on transaction sequence number and last committed.
Definition: dependency_adapter.h:41
std::optional< uint64_t > Clock_delay
Optional clock delay value.
Definition: dependency_adapter.h:48
mysql::scheduler::Task_id Task_id
Alias for task identifier from scheduler.
Definition: dependency_adapter.h:44
std::optional< Task_id > Task_id_resolved
Optional resolved task identifier.
Definition: dependency_adapter.h:46
Represents the identifier of a task ingested by the scheduler,.
Definition: task_id.h:41
uint64_t get() const
Definition: task_id.h:61
ValueType max(X &&first)
Definition: gtid.h:103
Definition: channel.cpp:28