Loading...
Searching...
No Matches
request_tag_multi.h
1
5#pragma once
6
7#include <memory>
8#include <mutex>
9#include <string>
10#include <vector>
11
12#include <ucp/api/ucp.h>
13
14#include <ucxx/buffer.h>
15#include <ucxx/endpoint.h>
16#include <ucxx/future.h>
17#include <ucxx/request.h>
18#include <ucxx/request_tag_multi_builder.h>
19
20namespace ucxx {
21
22class RequestTagMulti;
23
31struct BufferRequest {
32 std::shared_ptr<Request> request{nullptr};
33 std::shared_ptr<std::string> stringBuffer{nullptr};
34 std::shared_ptr<Buffer> buffer{nullptr};
35
38
39 BufferRequest(const BufferRequest&) = delete;
40 BufferRequest& operator=(BufferRequest const&) = delete;
41 BufferRequest(BufferRequest&& o) = delete;
42 BufferRequest& operator=(BufferRequest&& o) = delete;
43};
44
50typedef std::shared_ptr<BufferRequest> BufferRequestPtr;
51
61class RequestTagMulti : public Request {
62 private:
63 size_t _totalRequests{0};
64 std::mutex
65 _completedRequestsMutex{};
66 size_t _completedRequests{0};
67 ucs_status_t _finalStatus{
68 UCS_OK};
69
70 public:
71 std::vector<BufferRequestPtr> _bufferRequests{};
72 bool _isFilled{false};
73
74 private:
75 RequestTagMulti() = delete;
76 RequestTagMulti(const RequestTagMulti&) = delete;
77 RequestTagMulti& operator=(RequestTagMulti const&) = delete;
78 RequestTagMulti(RequestTagMulti&& o) = delete;
79 RequestTagMulti& operator=(RequestTagMulti&& o) = delete;
80
106 RequestTagMulti(std::shared_ptr<Endpoint> endpoint,
107 const std::variant<data::TagMultiSend, data::TagMultiReceive> requestData,
108 std::string operationName,
109 const bool enablePythonFuture);
110
111 void populateDelayedSubmissionImpl() override;
112
126 void recvFrames();
127
137 void recvHeader();
138
144 void send();
145
146 public:
147 // Allow internal construction without exposing factory functions.
148 friend class detail::ConstructorFactory;
149
156
173 void markCompleted(ucs_status_t status);
174
191 void recvCallback(ucs_status_t status);
192
193 void cancel() override;
194};
195
201typedef std::shared_ptr<RequestTagMulti> RequestTagMultiPtr;
202
203} // namespace ucxx
Send or receive multiple messages with the UCX Tag API.
Definition request_tag_multi.h:61
void recvCallback(ucs_status_t status)
Callback to submit request to receive new header or frames.
virtual ~RequestTagMulti()
ucxx::RequestTagMulti destructor.
bool _isFilled
Whether the all requests have been posted.
Definition request_tag_multi.h:72
void markCompleted(ucs_status_t status)
Mark request as completed.
void cancel() override
Cancel the request.
std::vector< BufferRequestPtr > _bufferRequests
Container of all requests posted.
Definition request_tag_multi.h:71
virtual void populateDelayedSubmissionImpl()=0
Submit the request-specific UCX operation.
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.
Definition address.h:16
std::shared_ptr< BufferRequest > BufferRequestPtr
Pre-defined type for a pointer to an ucxx::BufferRequest.
Definition request_tag_multi.h:50
std::shared_ptr< RequestTagMulti > RequestTagMultiPtr
Pre-defined type for a pointer to an ucxx::RequestTagMulti.
Definition request_tag_multi.h:201
Container for data required by a ucxx::RequestTagMulti.
Definition request_tag_multi.h:31
std::shared_ptr< Buffer > buffer
Internally allocated buffer to receive a frame.
Definition request_tag_multi.h:34
std::shared_ptr< std::string > stringBuffer
Serialized Header.
Definition request_tag_multi.h:33
std::shared_ptr< Request > request
The ucxx::RequestTag of a header or frame.
Definition request_tag_multi.h:32