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 REQUIRE(cluster_is_listening());
14 REQUIRE(memcached_create(&memc
));
15 for (const auto &server
: cluster
.getServers()) {
16 auto target
= server
.getSocketOrPort();
17 if (holds_alternative
<string
>(target
)) {
18 REQUIRE(MEMCACHED_SUCCESS
== memcached_server_add_unix_socket(&memc
, get
<string
>(target
).c_str()));
20 REQUIRE(MEMCACHED_SUCCESS
== memcached_server_add(&memc
, "localhost", get
<int>(target
)));
26 MemcachedCluster::~MemcachedCluster() {
27 if (memcmp(&memc
, &empty_memc
, sizeof(memc
))) {
28 memcached_free(&memc
);
32 void MemcachedCluster::flush() {
33 REQUIRE(MEMCACHED_SUCCESS
== memcached_flush(&memc
, 0));
36 MemcachedCluster::MemcachedCluster()
39 {random_socket_or_port_arg()}
45 MemcachedCluster::MemcachedCluster(Cluster
&&cluster_
)
46 : cluster
{move(cluster_
)}
51 MemcachedCluster::MemcachedCluster(MemcachedCluster
&&mc
)
57 MemcachedCluster
&MemcachedCluster::operator=(MemcachedCluster
&&mc
) {
58 cluster
= move(mc
.cluster
);
59 memcached_clone(&memc
, &mc
.memc
);
60 returns
= ReturnMatcher
{&memc
};
64 MemcachedCluster
MemcachedCluster::mixed() {
65 return MemcachedCluster
{};
68 MemcachedCluster
MemcachedCluster::network() {
69 return MemcachedCluster
{Cluster
{Server
{
71 {"-p", random_socket_or_port_string
}
75 MemcachedCluster
MemcachedCluster::socket() {
76 return MemcachedCluster
{Cluster
{Server
{
78 {"-s", random_socket_or_port_string
}
82 #if LIBMEMCACHED_WITH_SASL_SUPPORT
83 MemcachedCluster
MemcachedCluster::sasl() {
84 auto mc
= MemcachedCluster
{Cluster
{Server
{
87 Server::arg_pair_t
{"-p", random_socket_or_port_string
},
91 mc
.enableBinaryProto();
92 REQUIRE(MEMCACHED_SUCCESS
== memcached_set_sasl_auth_data(&mc
.memc
,
93 "memcached", "memcached"));
98 void MemcachedCluster::enableBinaryProto(bool enable
) {
99 REQUIRE(MEMCACHED_SUCCESS
== memcached_behavior_set(&memc
,
100 MEMCACHED_BEHAVIOR_BINARY_PROTOCOL
, enable
));
103 void MemcachedCluster::enableBuffering(bool enable
) {
104 REQUIRE(MEMCACHED_SUCCESS
== memcached_behavior_set(&memc
,
105 MEMCACHED_BEHAVIOR_BUFFER_REQUESTS
, enable
));
108 void MemcachedCluster::enableReplication() {
109 REQUIRE(MEMCACHED_SUCCESS
== memcached_behavior_set(&memc
,
110 MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS
, memcached_server_count(&memc
)));