forked from fastio/1store
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathproxy.hh
53 lines (45 loc) · 1.56 KB
/
proxy.hh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#pragma once
#include "core/distributed.hh"
#include "utils/histogram.hh"
#include "utils/estimated_histogram.hh"
#include <seastar/core/metrics.hh>
#include "gms/inet_address.hh"
#include "keys.hh"
#include "token.hh"
namespace redis {
class service;
class request_wrapper;
class result;
class proxy;
extern distributed<proxy> _the_redis_proxy;
inline distributed<proxy>& get_proxy() {
return _the_redis_proxy;
}
inline proxy& get_local_proxy() {
return _the_redis_proxy.local();
}
inline shared_ptr<proxy> get_local_shared_proxy() {
return _the_redis_proxy.local_shared();
}
class proxy : public seastar::async_sharded_service<proxy> {
public:
using clock_type = lowres_clock;
private:
distributed<redis::service> _redis;
seastar::metrics::metric_groups _metrics;
private:
void uninit_messaging_service() {}
std::vector<gms::inet_address> get_live_endpoints(const redis::token& token);
future<> proxy_command_to_endpoint(gms::inet_address addr, const redis::request_wrapper& req);
future<foreign_ptr<lw_shared_ptr<redis::result>>> execute(const redis::request_wrapper& req);
future<> execute_command_set(const redis::request_wrapper& req, output_stream<char>& out);
future<> execute_command_get(const redis::request_wrapper& req, output_stream<char>& out);
future<> execute_command_del(const redis::request_wrapper& req, output_stream<char>& out);
public:
proxy() {}
~proxy() {}
future<> execute(const redis::request_wrapper& req, output_stream<char>& out);
void init_messaging_service();
future<> stop();
};
}