1 #include "MemcachedCluster.hpp"
4 const memcached_st
MemcachedCluster::empty_memc
{};
6 void MemcachedCluster::init() {
7 REQUIRE(cluster
.start());
9 Retry
cluster_is_listening([this]() {
10 return cluster
.isListening();
12 while (!cluster_is_listening()) {
18 REQUIRE(memcached_create(&memc
));
19 for (const auto &server
: cluster
.getServers()) {
20 auto target
= server
.getSocketOrPort();
21 if (holds_alternative
<string
>(target
)) {
22 REQUIRE(MEMCACHED_SUCCESS
== memcached_server_add_unix_socket(&memc
, get
<string
>(target
).c_str()));
24 REQUIRE(MEMCACHED_SUCCESS
== memcached_server_add(&memc
, "localhost", get
<int>(target
)));
30 MemcachedCluster::~MemcachedCluster() {
31 if (memcmp(&memc
, &empty_memc
, sizeof(memc
))) {
32 memcached_free(&memc
);
36 void MemcachedCluster::flush() {
37 REQUIRE(MEMCACHED_SUCCESS
== memcached_flush(&memc
, 0));
40 MemcachedCluster::MemcachedCluster()
43 {random_socket_or_port_arg()}
49 MemcachedCluster::MemcachedCluster(Cluster
&&cluster_
)
50 : cluster
{move(cluster_
)}
55 MemcachedCluster::MemcachedCluster(MemcachedCluster
&&mc
)
61 MemcachedCluster
&MemcachedCluster::operator=(MemcachedCluster
&&mc
) {
62 cluster
= move(mc
.cluster
);
63 memcached_clone(&memc
, &mc
.memc
);
64 returns
= ReturnMatcher
{&memc
};
68 MemcachedCluster
MemcachedCluster::mixed() {
69 return MemcachedCluster
{};
72 MemcachedCluster
MemcachedCluster::network() {
73 return MemcachedCluster
{Cluster
{Server
{
75 {"-p", random_socket_or_port_string
}
79 MemcachedCluster
MemcachedCluster::socket() {
80 return MemcachedCluster
{Cluster
{Server
{
82 {"-s", random_socket_or_port_string
}
86 #if LIBMEMCACHED_WITH_SASL_SUPPORT
87 MemcachedCluster
MemcachedCluster::sasl() {
88 auto mc
= MemcachedCluster
{Cluster
{Server
{
91 Server::arg_pair_t
{"-p", random_socket_or_port_string
},
95 mc
.enableBinaryProto();
96 REQUIRE(MEMCACHED_SUCCESS
== memcached_set_sasl_auth_data(&mc
.memc
,
97 "memcached", "memcached"));
102 void MemcachedCluster::enableBinaryProto(bool enable
) {
103 REQUIRE(MEMCACHED_SUCCESS
== memcached_behavior_set(&memc
,
104 MEMCACHED_BEHAVIOR_BINARY_PROTOCOL
, enable
));
107 void MemcachedCluster::enableBuffering(bool enable
) {
108 REQUIRE(MEMCACHED_SUCCESS
== memcached_behavior_set(&memc
,
109 MEMCACHED_BEHAVIOR_BUFFER_REQUESTS
, enable
));
112 void MemcachedCluster::enableReplication() {
113 REQUIRE(MEMCACHED_SUCCESS
== memcached_behavior_set(&memc
,
114 MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS
, memcached_server_count(&memc
)));