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  RequestCallbackUserFunction callbackFunction = nullptr,
82  RequestCallbackUserData callbackData = nullptr);
83 
92  void process();
93 
103  void setStatus(ucs_status_t status);
104 
105  public:
106  Request() = delete;
107  Request(const Request&) = delete;
108  Request& operator=(Request const&) = delete;
109  Request(Request&& o) = delete;
110  Request& operator=(Request&& o) = delete;
111 
118  virtual ~Request();
119 
126  virtual void cancel();
127 
137  [[nodiscard]] ucs_status_t getStatus();
138 
147  [[nodiscard]] void* getFuture();
148 
161  void checkError();
162 
171  [[nodiscard]] bool isCompleted();
172 
186  void callback(void* request, ucs_status_t status);
187 
198  virtual void populateDelayedSubmission() = 0;
199 
210  [[nodiscard]] const std::string& getOwnerString() const;
211 
224  [[nodiscard]] virtual std::shared_ptr<Buffer> getRecvBuffer();
225 };
226 
227 } // 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
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.
Request(std::shared_ptr< Component > endpointOrWorker, const data::RequestData requestData, const std::string operationName, const bool enablePythonFuture=false, RequestCallbackUserFunction callbackFunction=nullptr, RequestCallbackUserData callbackData=nullptr)
Protected constructor of an abstract ucxx::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