CMSDK 2.0.1
Cross-platform C++ base library and SDK for the Psyclone AIOS platform
Loading...
Searching...
No Matches
cmlabs::RequestQueue Class Reference

Priority-ordered queue of pending RequestReply objects (per executor connection). More...

#include <RequestClient.h>

Collaboration diagram for cmlabs::RequestQueue:
[legend]

Public Member Functions

 RequestQueue ()
virtual ~RequestQueue ()
bool init (uint32 id)
 Initialise the queue.
uint32 getCount ()
bool addRequest (RequestReply *req, double priority=0)
 Insert a request, ordered by priority (higher = closer to the front).
RequestReplygetNextRequest ()
 Pop the next request to dispatch.
RequestReplygetNextTimedoutRequest ()
 Find and remove the next request whose deadline has passed.
bool completeRequest (RequestReply *req)
 Mark a request as done and remove it from tracking.
uint32 removeStaleRequests (uint32 ttlMS)
 Fail and remove requests older than ttlMS milliseconds.
std::list< RequestReply * > takeQueue ()
 Atomically take all queued requests (used to redistribute a dead executor's backlog).
std::string toXML ()
std::string toJSON ()

Static Public Member Functions

static bool UnitTest ()
 Self-test of queue ordering/priority behaviour.

Protected Attributes

std::list< RequestReply * > requestQ
 The ordered pending requests.
utils::Mutex mutex
 Guards ::requestQ.
uint32 id
 Owner id for logging.

Detailed Description

Priority-ordered queue of pending RequestReply objects (per executor connection).

Used by RequestGateway to hold requests destined for one executor, separately for short and long requests. Supports priority insertion, timeout scanning and bulk take-over when an executor dies (its queue is redistributed to the survivors). Implemented in RequestGateway.cpp.

Thread-safety
All operations are guarded by an internal mutex.

Definition at line 241 of file RequestClient.h.

Constructor & Destructor Documentation

◆ RequestQueue()

cmlabs::RequestQueue::RequestQueue ( )

Definition at line 17 of file RequestGateway.cpp.

Referenced by UnitTest().

◆ ~RequestQueue()

cmlabs::RequestQueue::~RequestQueue ( )
virtual

Definition at line 21 of file RequestGateway.cpp.

References mutex, and requestQ.

Member Function Documentation

◆ addRequest()

bool cmlabs::RequestQueue::addRequest ( RequestReply * req,
double priority = 0 )

Insert a request, ordered by priority (higher = closer to the front).

Parameters
reqRequest (queue does not take ownership of the pooled object).
priorityOrdering key; 0 appends in FIFO order.
Returns
true on success.

Definition at line 32 of file RequestGateway.cpp.

References cmlabs::RequestReply::gatewayRef, mutex, cmlabs::RequestReply::origin, and requestQ.

Referenced by cmlabs::RequestGateway::addRequestReplyToRequestQueue(), and UnitTest().

◆ completeRequest()

bool cmlabs::RequestQueue::completeRequest ( RequestReply * req)

Mark a request as done and remove it from tracking.

Parameters
reqThe completed request.
Returns
true if found.

Definition at line 137 of file RequestGateway.cpp.

References mutex, and requestQ.

Referenced by UnitTest().

◆ getCount()

uint32 cmlabs::RequestQueue::getCount ( )
inline
Returns
Number of requests currently queued.

Definition at line 253 of file RequestClient.h.

References requestQ.

Referenced by cmlabs::RequestGateway::addRequestReplyToRequestQueue(), and UnitTest().

◆ getNextRequest()

RequestReply * cmlabs::RequestQueue::getNextRequest ( )

Pop the next request to dispatch.

Returns
The request, or NULL when empty.

Definition at line 74 of file RequestGateway.cpp.

References cmlabs::RequestReply::getStatus(), cmlabs::LOCALERROR, mutex, cmlabs::PROCESSING, cmlabs::QUEUED, requestQ, and cmlabs::RequestReply::setStatus().

Referenced by UnitTest().

◆ getNextTimedoutRequest()

RequestReply * cmlabs::RequestQueue::getNextTimedoutRequest ( )

Find and remove the next request whose deadline has passed.

Returns
The timed-out request, or NULL when none.

Definition at line 100 of file RequestGateway.cpp.

References cmlabs::RequestReply::getStatus(), mutex, requestQ, and cmlabs::TIMEOUT.

◆ init()

bool cmlabs::RequestQueue::init ( uint32 id)

Initialise the queue.

Parameters
idOwner id used for logging.
Returns
true.

Definition at line 27 of file RequestGateway.cpp.

◆ removeStaleRequests()

uint32 cmlabs::RequestQueue::removeStaleRequests ( uint32 ttlMS)

Fail and remove requests older than ttlMS milliseconds.

Parameters
ttlMSAge limit.
Returns
Number of requests removed.

Definition at line 155 of file RequestGateway.cpp.

References cmlabs::RequestReply::getStatus(), cmlabs::GetTimeAgeMS(), mutex, cmlabs::PROCESSING, requestQ, cmlabs::SENT, cmlabs::RequestReply::setStatus(), cmlabs::RequestReply::startTime, and cmlabs::TIMEOUT.

◆ takeQueue()

std::list< RequestReply * > cmlabs::RequestQueue::takeQueue ( )

Atomically take all queued requests (used to redistribute a dead executor's backlog).

Returns
The removed list; queue is left empty.

Definition at line 145 of file RequestGateway.cpp.

References mutex, and requestQ.

Referenced by UnitTest().

◆ toJSON()

std::string cmlabs::RequestQueue::toJSON ( )
Returns
Queue contents summarised as JSON (for diagnostics APIs).

Definition at line 193 of file RequestGateway.cpp.

References cmlabs::GetTimeAgeMS(), mutex, requestQ, and cmlabs::utils::StringFormat().

◆ toXML()

std::string cmlabs::RequestQueue::toXML ( )
Returns
Queue contents summarised as XML (for PsyProbe/diagnostics).

Definition at line 177 of file RequestGateway.cpp.

References cmlabs::GetTimeAgeMS(), mutex, requestQ, and cmlabs::utils::StringFormat().

◆ UnitTest()

Member Data Documentation

◆ id

uint32 cmlabs::RequestQueue::id
protected

Owner id for logging.

Definition at line 286 of file RequestClient.h.

◆ mutex

utils::Mutex cmlabs::RequestQueue::mutex
protected

◆ requestQ

std::list<RequestReply*> cmlabs::RequestQueue::requestQ
protected

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