Aktualizr
C++ SOTA Client
All Classes Namespaces Files Functions Variables Enumerations Enumerator Pages
request_pool.h
1 #ifndef SOTA_CLIENT_TOOLS_REQUEST_POOL_H_
2 #define SOTA_CLIENT_TOOLS_REQUEST_POOL_H_
3 
4 #include <list>
5 
6 #include <curl/curl.h>
7 
8 #include "garage_common.h"
9 #include "ostree_object.h"
10 #include "rate_controller.h"
11 
12 class RequestPool {
13  public:
14  RequestPool(TreehubServer& server, int max_curl_requests, RunMode mode);
15  ~RequestPool();
16  void AddQuery(const OSTreeObject::ptr& request);
17  void AddUpload(const OSTreeObject::ptr& request);
18  void Abort() {
19  stopped_ = true;
20  query_queue_.clear();
21  upload_queue_.clear();
22  };
23  bool is_idle() const { return query_queue_.empty() && upload_queue_.empty() && running_requests_ == 0; }
24  bool is_stopped() const { return stopped_; }
25  RunMode run_mode() const { return mode_; }
26 
27  /**
28  * One iteration of request-listen loop, launches multiple requests, then
29  * listens for the result.
30  */
31  void Loop();
32  /**
33  * The number of HEAD + PUT requests that have been sent to curl. This
34  * includes requests that eventually returned 500 and get retried.
35  */
36  int put_requests_made() { return put_requests_made_; }
37  int head_requests_made() { return head_requests_made_; }
38  uintmax_t total_object_size() { return total_object_size_; }
39 
40  private:
41  void LoopLaunch(); // launches multiple requests from the queues
42  void LoopListen(); // listens to the result of launched requests
43 
44  RateController rate_controller_;
45  int running_requests_;
46  int head_requests_made_{0};
47  int put_requests_made_{0};
48  uintmax_t total_object_size_{0};
49  TreehubServer& server_;
50  CURLM* multi_;
51  std::list<OSTreeObject::ptr> query_queue_;
52  std::list<OSTreeObject::ptr> upload_queue_;
53  RunMode mode_;
54  bool stopped_;
55 };
56 // vim: set tabstop=2 shiftwidth=2 expandtab:
57 #endif // SOTA_CLIENT_TOOLS_REQUEST_POOL_H_
RateController
Control the rate of outgoing requests.
Definition: rate_controller.h:16
RequestPool::put_requests_made
int put_requests_made()
The number of HEAD + PUT requests that have been sent to curl.
Definition: request_pool.h:36
RequestPool::Loop
void Loop()
One iteration of request-listen loop, launches multiple requests, then listens for the result.
Definition: request_pool.cc:161
TreehubServer
Definition: treehub_server.h:11
RequestPool
Definition: request_pool.h:12
garage_common.h
RunMode
RunMode
Execution mode to run garage tools in.
Definition: garage_common.h:6