ndmspc v1.2.0-0.1.rc7
Loading...
Searching...
No Matches
Ndmspc::NTaskStateManager Class Reference

Manages task lifecycle: pending → running → done/failed. More...

#include <NTaskStateManager.h>

Public Types

using TaskId = size_t
 
using WorkerId = std::string
 
using TaskPayload = std::vector<int>
 

Public Member Functions

void AddPending (TaskId id, const TaskPayload &payload)
 Add a new task to the pending queue.
 
bool AssignToWorker (const WorkerId &worker, TaskId id)
 Assign a pending task to a worker (transitions to running)
 
bool ClaimNextPendingForWorker (const WorkerId &worker, TaskId &id, TaskPayload &payload)
 Atomically pop the next pending task and assign it to a worker.
 
bool MarkDone (TaskId id)
 Mark a running task as completed.
 
bool MarkFailed (TaskId id)
 Mark a running task as failed (returns to pending for redistribution)
 
bool RequeueTask (TaskId id)
 Requeue a task to pending state from running or done state.
 
std::set< TaskId > GetWorkerTasks (const WorkerId &worker) const
 Get all tasks currently assigned to a worker.
 
std::pair< TaskId, TaskPayload > GetNextPending ()
 Get the next pending task for dispatch.
 
bool HasPending () const
 Check if there are pending tasks.
 
std::vector< std::pair< TaskId, TaskPayload > > RecoverWorkerTasks (const WorkerId &worker)
 Recover all tasks from a failed worker.
 
bool RemoveTaskFromWorker (const WorkerId &worker, TaskId id)
 Remove a specific task ID from a worker (e.g., after ACK but worker later fails)
 
WorkerId GetTaskWorker (TaskId id) const
 Get the worker currently executing a task.
 
bool IsDone (TaskId id) const
 Check if a task has been completed.
 
size_t PendingCount () const
 Get number of pending tasks.
 
size_t RunningCount () const
 Get number of running tasks.
 
size_t DoneCount () const
 Get number of completed tasks.
 
size_t TotalCount () const
 Get total tasks tracked (pending + running + done)
 
void Clear ()
 Clear all state (for reuse or cleanup)
 

Private Member Functions

bool TaskExists (TaskId id) const
 Check if task exists in any state.
 
void EnqueuePending (TaskId id, const TaskPayload &payload)
 Push task into pending queue and pending-id index.
 

Private Attributes

std::queue< std::pair< TaskId, TaskPayload > > fPending
 
std::unordered_set< TaskId > fPendingIds
 
std::unordered_map< TaskId, TaskPayload > fRunning
 
std::set< TaskId > fDone
 
std::unordered_map< WorkerId, std::set< TaskId > > fWorkerToTasks
 
std::unordered_map< TaskId, WorkerId > fTaskToWorker
 
std::unordered_map< TaskId, TaskPayload > fTaskPayloads
 

Detailed Description

Manages task lifecycle: pending → running → done/failed.

Separates task state management from IPC/worker concerns. Tracks which tasks are assigned to which workers and handles redistribution.

Definition at line 22 of file NTaskStateManager.h.

Member Typedef Documentation

◆ TaskId

using Ndmspc::NTaskStateManager::TaskId = size_t

Definition at line 24 of file NTaskStateManager.h.

◆ TaskPayload

using Ndmspc::NTaskStateManager::TaskPayload = std::vector<int>

Definition at line 26 of file NTaskStateManager.h.

◆ WorkerId

using Ndmspc::NTaskStateManager::WorkerId = std::string

Definition at line 25 of file NTaskStateManager.h.

Member Function Documentation

◆ AddPending()

void Ndmspc::NTaskStateManager::AddPending ( TaskId id,
const TaskPayload & payload )

Add a new task to the pending queue.

Parameters
idUnique task identifier
payloadTask data (typically coordinates)

Definition at line 6 of file NTaskStateManager.cxx.

References EnqueuePending(), and TaskExists().

◆ AssignToWorker()

bool Ndmspc::NTaskStateManager::AssignToWorker ( const WorkerId & worker,
TaskId id )

Assign a pending task to a worker (transitions to running)

Parameters
workerWorker identifier
idTask ID to assign
Returns
true if assignment succeeded, false if task not in pending

Definition at line 15 of file NTaskStateManager.cxx.

◆ ClaimNextPendingForWorker()

bool Ndmspc::NTaskStateManager::ClaimNextPendingForWorker ( const WorkerId & worker,
TaskId & id,
TaskPayload & payload )

Atomically pop the next pending task and assign it to a worker.

Parameters
workerWorker identifier
idOutput task ID
payloadOutput task payload
Returns
true if a task was claimed, false if no pending tasks exist

Definition at line 45 of file NTaskStateManager.cxx.

◆ Clear()

void Ndmspc::NTaskStateManager::Clear ( )

Clear all state (for reuse or cleanup)

Definition at line 239 of file NTaskStateManager.cxx.

◆ DoneCount()

size_t Ndmspc::NTaskStateManager::DoneCount ( ) const
inline

Get number of completed tasks.

Definition at line 133 of file NTaskStateManager.h.

Referenced by TotalCount().

◆ EnqueuePending()

void Ndmspc::NTaskStateManager::EnqueuePending ( TaskId id,
const TaskPayload & payload )
private

Push task into pending queue and pending-id index.

Definition at line 258 of file NTaskStateManager.cxx.

Referenced by AddPending(), MarkFailed(), RecoverWorkerTasks(), and RequeueTask().

◆ GetNextPending()

std::pair< NTaskStateManager::TaskId, NTaskStateManager::TaskPayload > Ndmspc::NTaskStateManager::GetNextPending ( )

Get the next pending task for dispatch.

Returns
Pair of (TaskId, TaskPayload), or invalid if none pending
Note
This does NOT assign the task; use AssignToWorker after sending

Definition at line 164 of file NTaskStateManager.cxx.

◆ GetTaskWorker()

NTaskStateManager::WorkerId Ndmspc::NTaskStateManager::GetTaskWorker ( TaskId id) const

Get the worker currently executing a task.

Parameters
idTask ID
Returns
Worker ID if task is running, empty string if not running

Definition at line 225 of file NTaskStateManager.cxx.

◆ GetWorkerTasks()

std::set< NTaskStateManager::TaskId > Ndmspc::NTaskStateManager::GetWorkerTasks ( const WorkerId & worker) const

Get all tasks currently assigned to a worker.

Parameters
workerWorker identifier
Returns
Set of task IDs assigned to this worker

Definition at line 155 of file NTaskStateManager.cxx.

◆ HasPending()

bool Ndmspc::NTaskStateManager::HasPending ( ) const

Check if there are pending tasks.

Returns
true if pending queue is non-empty

Definition at line 174 of file NTaskStateManager.cxx.

◆ IsDone()

bool Ndmspc::NTaskStateManager::IsDone ( TaskId id) const

Check if a task has been completed.

Parameters
idTask ID
Returns
true if task is in done set

Definition at line 234 of file NTaskStateManager.cxx.

◆ MarkDone()

bool Ndmspc::NTaskStateManager::MarkDone ( TaskId id)

Mark a running task as completed.

Parameters
idTask ID to mark done
Returns
true if task was running, false otherwise

Definition at line 64 of file NTaskStateManager.cxx.

◆ MarkFailed()

bool Ndmspc::NTaskStateManager::MarkFailed ( TaskId id)

Mark a running task as failed (returns to pending for redistribution)

Parameters
idTask ID that failed
Returns
true if task was running, false otherwise

Definition at line 89 of file NTaskStateManager.cxx.

References EnqueuePending().

◆ PendingCount()

size_t Ndmspc::NTaskStateManager::PendingCount ( ) const
inline

Get number of pending tasks.

Definition at line 127 of file NTaskStateManager.h.

Referenced by TotalCount().

◆ RecoverWorkerTasks()

std::vector< std::pair< NTaskStateManager::TaskId, NTaskStateManager::TaskPayload > > Ndmspc::NTaskStateManager::RecoverWorkerTasks ( const WorkerId & worker)

Recover all tasks from a failed worker.

Parameters
workerWorker identifier
Returns
Vector of (TaskId, TaskPayload) pairs for redistribution
Note
Tasks are moved back to pending state

Definition at line 180 of file NTaskStateManager.cxx.

References EnqueuePending().

◆ RemoveTaskFromWorker()

bool Ndmspc::NTaskStateManager::RemoveTaskFromWorker ( const WorkerId & worker,
TaskId id )

Remove a specific task ID from a worker (e.g., after ACK but worker later fails)

Parameters
workerWorker identifier
idTask ID to remove
Returns
true if task was found and removed, false otherwise

Definition at line 206 of file NTaskStateManager.cxx.

◆ RequeueTask()

bool Ndmspc::NTaskStateManager::RequeueTask ( TaskId id)

Requeue a task to pending state from running or done state.

Parameters
idTask ID to requeue
Returns
true if task was requeued, false if task was already pending or unknown

Definition at line 115 of file NTaskStateManager.cxx.

References EnqueuePending().

◆ RunningCount()

size_t Ndmspc::NTaskStateManager::RunningCount ( ) const
inline

Get number of running tasks.

Definition at line 130 of file NTaskStateManager.h.

Referenced by TotalCount().

◆ TaskExists()

bool Ndmspc::NTaskStateManager::TaskExists ( TaskId id) const
private

Check if task exists in any state.

Definition at line 250 of file NTaskStateManager.cxx.

Referenced by AddPending().

◆ TotalCount()

size_t Ndmspc::NTaskStateManager::TotalCount ( ) const
inline

Get total tasks tracked (pending + running + done)

Definition at line 136 of file NTaskStateManager.h.

References DoneCount(), PendingCount(), and RunningCount().

Member Data Documentation

◆ fDone

std::set<TaskId> Ndmspc::NTaskStateManager::fDone
private

Definition at line 146 of file NTaskStateManager.h.

◆ fPending

std::queue<std::pair<TaskId, TaskPayload> > Ndmspc::NTaskStateManager::fPending
private

Definition at line 143 of file NTaskStateManager.h.

◆ fPendingIds

std::unordered_set<TaskId> Ndmspc::NTaskStateManager::fPendingIds
private

Definition at line 144 of file NTaskStateManager.h.

◆ fRunning

std::unordered_map<TaskId, TaskPayload> Ndmspc::NTaskStateManager::fRunning
private

Definition at line 145 of file NTaskStateManager.h.

◆ fTaskPayloads

std::unordered_map<TaskId, TaskPayload> Ndmspc::NTaskStateManager::fTaskPayloads
private

Definition at line 151 of file NTaskStateManager.h.

◆ fTaskToWorker

std::unordered_map<TaskId, WorkerId> Ndmspc::NTaskStateManager::fTaskToWorker
private

Definition at line 150 of file NTaskStateManager.h.

◆ fWorkerToTasks

std::unordered_map<WorkerId, std::set<TaskId> > Ndmspc::NTaskStateManager::fWorkerToTasks
private

Definition at line 149 of file NTaskStateManager.h.


The documentation for this class was generated from the following files: