1 #include "MemcachedCluster.hpp"
4 const memcached_st
MemcachedCluster::empty_memc
{};
6 void MemcachedCluster::init() {
7 REQUIRE(cluster
.start());
9 REQUIRE(memcached_create(&memc
));
10 for (const auto &server
: cluster
.getServers()) {
11 auto target
= server
.getSocketOrPort();
12 if (holds_alternative
<string
>(target
)) {
13 REQUIRE(MEMCACHED_SUCCESS
== memcached_server_add_unix_socket(&memc
, get
<string
>(target
).c_str()));
15 REQUIRE(MEMCACHED_SUCCESS
== memcached_server_add(&memc
, "localhost", get
<int>(target
)));
19 Retry
cluster_is_listening([this]() {
20 return cluster
.isListening();
22 REQUIRE(cluster_is_listening());
25 MemcachedCluster::~MemcachedCluster() {
26 if (memcmp(&memc
, &empty_memc
, sizeof(memc
))) {
27 memcached_free(&memc
);
31 void MemcachedCluster::flush() {
32 REQUIRE(MEMCACHED_SUCCESS
== memcached_flush(&memc
, 0));
35 MemcachedCluster::MemcachedCluster()
38 {random_socket_or_port_arg()}
44 MemcachedCluster::MemcachedCluster(Cluster
&&cluster_
)
45 : cluster
{move(cluster_
)}
50 MemcachedCluster
MemcachedCluster::mixed() {
51 return MemcachedCluster
{};
54 MemcachedCluster
MemcachedCluster::network() {
55 return MemcachedCluster
{Cluster
{Server
{
57 {"-p", random_socket_or_port_string
}
61 MemcachedCluster
MemcachedCluster::socket() {
62 return MemcachedCluster
{Cluster
{Server
{
64 {"-s", random_socket_or_port_string
}
68 void MemcachedCluster::enableBinaryProto(bool enable
) {
69 REQUIRE(MEMCACHED_SUCCESS
== memcached_behavior_set(&memc
,
70 MEMCACHED_BEHAVIOR_BINARY_PROTOCOL
, enable
));
73 MemcachedCluster::MemcachedCluster(MemcachedCluster
&&mc
)
79 MemcachedCluster
&MemcachedCluster::operator=(MemcachedCluster
&&mc
) {
80 cluster
= move(mc
.cluster
);
81 memcached_clone(&memc
, &mc
.memc
);
82 returns
= ReturnMatcher
{&memc
};