ndmspc  v1.2.0-0.1.rc6
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. More...
 
bool AssignToWorker (const WorkerId &worker, TaskId id)
 Assign a pending task to a worker (transitions to running) More...
 
bool ClaimNextPendingForWorker (const WorkerId &worker, TaskId &id, TaskPayload &payload)
 Atomically pop the next pending task and assign it to a worker. More...
 
bool MarkDone (TaskId id)
 Mark a running task as completed. More...
 
bool MarkFailed (TaskId id)
 Mark a running task as failed (returns to pending for redistribution) More...
 
bool RequeueTask (TaskId id)
 Requeue a task to pending state from running or done state. More...
 
std::set< TaskId > GetWorkerTasks (const WorkerId &worker) const
 Get all tasks currently assigned to a worker. More...
 
std::pair< TaskId, TaskPayload > GetNextPending ()
 Get the next pending task for dispatch. More...
 
bool HasPending () const
 Check if there are pending tasks. More...
 
std::vector< std::pair< TaskId, TaskPayload > > RecoverWorkerTasks (const WorkerId &worker)
 Recover all tasks from a failed worker. More...
 
bool RemoveTaskFromWorker (const WorkerId &worker, TaskId id)
 Remove a specific task ID from a worker (e.g., after ACK but worker later fails) More...
 
WorkerId GetTaskWorker (TaskId id) const
 Get the worker currently executing a task. More...
 
bool IsDone (TaskId id) const
 Check if a task has been completed. More...
 
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 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.

◆ 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().

◆ 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().


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