Loading...
Searching...
No Matches
request.h
1
5#pragma once
6
7#include <atomic>
8#include <chrono>
9#include <memory>
10#include <string>
11#include <utility>
12
13#include <ucp/api/ucp.h>
14
15#include <ucxx/component.h>
16#include <ucxx/endpoint.h>
17#include <ucxx/future.h>
18#include <ucxx/request_data.h>
19#include <ucxx/typedefs.h>
20
21#define ucxx_trace_req_f(_owner, _req, _handle, _name, _message, ...) \
22 ucxx_trace_req("ucxx::Request: %p on %s, UCP handle: %p, op: %s, " _message, \
23 (_req), \
24 (_owner), \
25 (_handle), \
26 (_name), \
27 ##__VA_ARGS__)
28
29namespace ucxx {
30
39class Request : public Component {
40 protected:
44 struct Attributes {
45 ucs_memory_type memoryType{UCS_MEMORY_TYPE_UNKNOWN};
46 std::string debugString{};
47 };
48
49 ucs_status_t _status{UCS_INPROGRESS};
50 std::string _status_msg{};
51 void* _request{nullptr};
52 std::shared_ptr<Future> _future{nullptr};
53 std::shared_ptr<Worker> _worker{
54 nullptr};
55 std::shared_ptr<Endpoint> _endpoint{
56 nullptr};
57 std::string _ownerString{
58 "undetermined owner"};
59 std::recursive_mutex _mutex{};
60 data::RequestData _requestData{};
61 std::string _operationName{
62 "request_undefined"};
69
91 Request(std::shared_ptr<Component> endpointOrWorker,
92 const data::RequestData requestData,
93 std::string operationName,
94 const bool enablePythonFuture = false,
95 RequestCallbackUserFunction callbackFunction = nullptr,
96 RequestCallbackUserData callbackData = nullptr);
97
106 void process();
107
117 void setStatus(ucs_status_t status);
118
119 public:
120 Request() = delete;
121 Request(const Request&) = delete;
122 Request& operator=(Request const&) = delete;
123 Request(Request&& o) = delete;
124 Request& operator=(Request&& o) = delete;
125
132 virtual ~Request();
133
140 virtual void cancel();
141
151 [[nodiscard]] ucs_status_t getStatus();
152
161 [[nodiscard]] void* getFuture();
162
176
185 [[nodiscard]] bool isCompleted();
186
200 void callback(void* request, ucs_status_t status);
201
216
227 [[nodiscard]] const std::string& getOwnerString() const;
228
241 [[nodiscard]] virtual std::shared_ptr<Buffer> getRecvBuffer();
242
252 [[nodiscard]] virtual std::string getRecvHeader();
253
278
279 protected:
287
302 void publishRequest(void* request);
303};
304
305} // namespace ucxx
A UCXX component class to prevent early destruction of parent object.
Definition component.h:21
virtual std::string getRecvHeader()
Get the received user header.
void checkError()
Check whether the request completed with an error.
std::string _status_msg
Human-readable status message.
Definition request.h:50
RequestCallbackUserFunction _callback
Completion callback.
Definition request.h:64
std::recursive_mutex _mutex
Mutex to prevent checking status while it's being set.
Definition request.h:59
data::RequestData _requestData
The operation-specific data to be used in the request.
Definition request.h:60
bool isCompleted()
Check whether the request has already completed.
RequestCallbackUserData _callbackData
Completion callback data.
Definition request.h:65
const std::string & getOwnerString() const
Get formatted string with owner type and handle address.
void publishRequest(void *request)
Publish the UCP request handle and capture its attributes.
std::shared_ptr< Endpoint > _endpoint
Endpoint that generated request (if not from worker).
Definition request.h:55
virtual void populateDelayedSubmissionImpl()=0
Submit the request-specific UCX operation.
void callback(void *request, ucs_status_t status)
Callback executed by UCX when request is completed.
std::shared_ptr< Worker > _worker
Worker that generated request (if not from endpoint).
Definition request.h:53
bool _enablePythonFuture
Whether Python future is enabled for this request.
Definition request.h:63
virtual ~Request()
ucxx::Request destructor.
ucs_status_t getStatus()
Return the status of the request.
virtual std::shared_ptr< Buffer > getRecvBuffer()
Get the received buffer.
std::shared_ptr< Future > _future
Future to notify upon completion.
Definition request.h:52
Attributes _requestAttr
Definition request.h:66
void populateDelayedSubmission()
Populate the internal submission dispatcher.
Attributes queryAttributes()
Get the requests's attributes.
std::string _ownerString
String to print owner (endpoint or worker) when logging.
Definition request.h:57
Request(std::shared_ptr< Component > endpointOrWorker, const data::RequestData requestData, std::string operationName, const bool enablePythonFuture=false, RequestCallbackUserFunction callbackFunction=nullptr, RequestCallbackUserData callbackData=nullptr)
Protected constructor of an abstract ucxx::Request.
std::string _operationName
Human-readable operation name, mostly used for log messages.
Definition request.h:61
ucs_status_t _status
Requests status.
Definition request.h:49
void * getFuture()
Return the future used to check on state.
void setStatus(ucs_status_t status)
Set the request status and notify Python future.
void process()
Perform initial processing of the request to determine if immediate completion.
virtual void cancel()
Cancel the request.
void * _request
Pointer to UCP request.
Definition request.h:51
Definition address.h:16
std::function< void(ucs_status_t, std::shared_ptr< void >)> RequestCallbackUserFunction
A user-defined function to execute as part of a ucxx::Request callback.
Definition typedefs.h:97
std::shared_ptr< void > RequestCallbackUserData
Data for the user-defined function provided to the ucxx::Request callback.
Definition typedefs.h:105
Request attributes reported by ucp_request_query.
Definition request.h:44
ucs_memory_type memoryType
Memory type of the request.
Definition request.h:45
std::string debugString
Stored debug string.
Definition request.h:46