libucxx  0.37.00
All Classes Namespaces Functions Variables Typedefs Enumerations Friends
request.h
1 
5 #pragma once
6 
7 #include <atomic>
8 #include <chrono>
9 #include <memory>
10 #include <string>
11 
12 #include <ucp/api/ucp.h>
13 
14 #include <ucxx/component.h>
15 #include <ucxx/endpoint.h>
16 #include <ucxx/future.h>
17 #include <ucxx/request_data.h>
18 #include <ucxx/typedefs.h>
19 
20 #define ucxx_trace_req_f(_owner, _req, _handle, _name, _message, ...) \
21  ucxx_trace_req("ucxx::Request: %p on %s, UCP handle: %p, op: %s, " _message, \
22  (_req), \
23  (_owner), \
24  (_handle), \
25  (_name), \
26  ##__VA_ARGS__)
27 
28 namespace ucxx {
29 
38 class Request : public Component {
39  protected:
40  ucs_status_t _status{UCS_INPROGRESS};
41  std::string _status_msg{};
42  void* _request{nullptr};
43  std::shared_ptr<Future> _future{nullptr};
46  std::shared_ptr<Worker> _worker{
47  nullptr};
48  std::shared_ptr<Endpoint> _endpoint{
49  nullptr};
50  std::string _ownerString{
51  "undetermined owner"};
52  data::RequestData _requestData{};
53  std::string _operationName{
54  "request_undefined"};
55  std::recursive_mutex _mutex{};
56  bool _enablePythonFuture{true};
57 
77  Request(std::shared_ptr<Component> endpointOrWorker,
78  const data::RequestData requestData,
79  const std::string operationName,
80  const bool enablePythonFuture = false);
81 
90  void process();
91 
101  void setStatus(ucs_status_t status);
102 
103  public:
104  Request() = delete;
105  Request(const Request&) = delete;
106  Request& operator=(Request const&) = delete;
107  Request(Request&& o) = delete;
108  Request& operator=(Request&& o) = delete;
109 
116  virtual ~Request();
117 
124  virtual void cancel();
125 
135  ucs_status_t getStatus();
136 
145  void* getFuture();
146 
159  void checkError();
160 
169  bool isCompleted();
170 
184  void callback(void* request, ucs_status_t status);
185 
196  virtual void populateDelayedSubmission() = 0;
197 
208  const std::string& getOwnerString() const;
209 
222  virtual std::shared_ptr<Buffer> getRecvBuffer();
223 };
224 
225 } // namespace ucxx
A UCXX component class to prevent early destruction of parent object.
Definition: component.h:17
Base type for a UCXX transfer request.
Definition: request.h:38
void checkError()
Check whether the request completed with an error.
std::string _status_msg
Human-readable status message.
Definition: request.h:41
RequestCallbackUserFunction _callback
Completion callback.
Definition: request.h:44
std::recursive_mutex _mutex
Mutex to prevent checking status while it's being set.
Definition: request.h:55
void * getFuture()
Return the future used to check on state.
data::RequestData _requestData
The operation-specific data to be used in the request.
Definition: request.h:52
bool isCompleted()
Check whether the request has already completed.
RequestCallbackUserData _callbackData
Completion callback data.
Definition: request.h:45
std::shared_ptr< Endpoint > _endpoint
Endpoint that generated request (if not from worker)
Definition: request.h:48
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:46
bool _enablePythonFuture
Whether Python future is enabled for this request.
Definition: request.h:56
Request(std::shared_ptr< Component > endpointOrWorker, const data::RequestData requestData, const std::string operationName, const bool enablePythonFuture=false)
Protected constructor of an abstract ucxx::Request.
virtual std::shared_ptr< Buffer > getRecvBuffer()
Get the received buffer.
virtual ~Request()
ucxx::Request destructor.
ucs_status_t getStatus()
Return the status of the request.
std::shared_ptr< Future > _future
Future to notify upon completion.
Definition: request.h:43
const std::string & getOwnerString() const
Get formatted string with owner type and handle address.
std::string _ownerString
String to print owner (endpoint or worker) when logging.
Definition: request.h:50
std::string _operationName
Human-readable operation name, mostly used for log messages.
Definition: request.h:53
ucs_status_t _status
Requests status.
Definition: request.h:40
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.
virtual void populateDelayedSubmission()=0
Populate the internal submission dispatcher.
void * _request
Pointer to UCP request.
Definition: request.h:42
Definition: address.h:15
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:89
std::shared_ptr< void > RequestCallbackUserData
Data for the user-defined function provided to the ucxx::Request callback.
Definition: typedefs.h:97