inflight_requests.h
1 
5 #pragma once
6 
7 #include <map>
8 #include <memory>
9 #include <mutex>
10 #include <utility>
11 
12 namespace ucxx {
13 
14 class Request;
15 
22 typedef std::
23  map<std::shared_ptr<Request>, std::shared_ptr<Request>, std::owner_less<std::shared_ptr<Request>>>
25 
32 typedef struct TrackedRequests {
35  std::mutex _mutex{};
36  std::mutex
39 
46 typedef std::unique_ptr<TrackedRequests> TrackedRequestsPtr;
47 
55  private:
56  TrackedRequestsPtr _trackedRequests{
57  std::make_unique<TrackedRequests>()};
60  std::recursive_mutex _mutex{};
61 
69  size_t dropCanceled();
70 
71  public:
75  InflightRequests() = default;
76 
77  InflightRequests(const InflightRequests&) = delete;
78  InflightRequests& operator=(InflightRequests const&) = delete;
79  InflightRequests(InflightRequests&& o) = delete;
80  InflightRequests& operator=(InflightRequests&& o) = delete;
81 
88 
94  [[nodiscard]] size_t size();
95 
101  void insert(std::shared_ptr<Request> request);
102 
112  void merge(TrackedRequestsPtr trackedRequests);
113 
123  void remove(std::shared_ptr<Request> request);
124 
133  size_t cancelAll();
134 
144  [[nodiscard]] TrackedRequestsPtr release();
145 
156  [[nodiscard]] size_t getCancelingSize();
157 };
158 
159 } // namespace ucxx
Handle tracked requests.
Definition: inflight_requests.h:54
void remove(std::shared_ptr< Request > request)
Remove an inflight request from the internal container.
TrackedRequestsPtr release()
Releases the internally-tracked containers.
void insert(std::shared_ptr< Request > request)
Insert an inflight requests to the container.
size_t cancelAll()
Issue cancelation of all inflight requests and clear the internal container.
InflightRequests()=default
Default constructor.
void merge(TrackedRequestsPtr trackedRequests)
Merge containers of inflight requests with the internal containers.
size_t size()
Query the number of pending inflight requests.
size_t getCancelingSize()
Get count of requests in process of cancelation.
~InflightRequests()
Destructor.
Definition: address.h:15
struct ucxx::TrackedRequests TrackedRequests
A container for the different types of tracked requests.
std::unique_ptr< TrackedRequests > TrackedRequestsPtr
Pre-defined type for a pointer to a container of tracked requests.
Definition: inflight_requests.h:46
std::map< std::shared_ptr< Request >, std::shared_ptr< Request >, std::owner_less< std::shared_ptr< Request > > > InflightRequestsMap
An inflight request map.
Definition: inflight_requests.h:14
A container for the different types of tracked requests.
Definition: inflight_requests.h:32
std::mutex _mutex
Mutex to control access to inflight requests container.
Definition: inflight_requests.h:35
InflightRequestsMap _inflight
Valid requests awaiting completion.
Definition: inflight_requests.h:33
std::mutex _cancelMutex
Mutex to allow cancelation and prevent removing requests simultaneously.
Definition: inflight_requests.h:37
InflightRequestsMap _canceling
Requests scheduled for cancelation.
Definition: inflight_requests.h:34