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 if (auto br
= getenv_else("MEMCACHED_BREAK", "0")) {
19 if (*br
&& *br
!= '0') {
22 cout
<< "Started servers:\n";
23 for (const auto &server
: cluster
.getServers()) {
24 cout
<< server
.getPid() << " ";
26 cout
<< "\nPress ENTER to continue... " << ::flush
;
31 REQUIRE(memcached_create(&memc
));
32 for (const auto &server
: cluster
.getServers()) {
33 auto target
= server
.getSocketOrPort();
34 if (holds_alternative
<string
>(target
)) {
35 REQUIRE(MEMCACHED_SUCCESS
== memcached_server_add_unix_socket(&memc
, get
<string
>(target
).c_str()));
37 REQUIRE(MEMCACHED_SUCCESS
== memcached_server_add(&memc
, "localhost", get
<int>(target
)));
43 MemcachedCluster::~MemcachedCluster() {
44 if (memcmp(&memc
, &empty_memc
, sizeof(memc
))) {
45 memcached_free(&memc
);
49 void MemcachedCluster::flush() {
50 REQUIRE(MEMCACHED_SUCCESS
== memcached_flush(&memc
, 0));
53 MemcachedCluster::MemcachedCluster()
56 {random_socket_or_port_arg()}
62 MemcachedCluster::MemcachedCluster(Cluster
&&cluster_
)
63 : cluster
{move(cluster_
)}
68 MemcachedCluster::MemcachedCluster(MemcachedCluster
&&mc
)
74 MemcachedCluster
&MemcachedCluster::operator=(MemcachedCluster
&&mc
) {
75 cluster
= move(mc
.cluster
);
76 memcached_clone(&memc
, &mc
.memc
);
77 returns
= ReturnMatcher
{&memc
};
81 MemcachedCluster
MemcachedCluster::mixed() {
82 return MemcachedCluster
{};
85 MemcachedCluster
MemcachedCluster::network() {
86 return MemcachedCluster
{Cluster
{Server
{
88 {"-p", random_socket_or_port_string
}
92 MemcachedCluster
MemcachedCluster::socket() {
93 return MemcachedCluster
{Cluster
{Server
{
95 {"-s", random_socket_or_port_string
}
99 MemcachedCluster
MemcachedCluster::udp() {
100 return MemcachedCluster
{Cluster
{Server
{
103 Server::arg_pair_t
{"-U", random_socket_or_port_string
},
109 #if LIBMEMCACHED_WITH_SASL_SUPPORT
110 MemcachedCluster
MemcachedCluster::sasl() {
111 auto mc
= MemcachedCluster
{Cluster
{Server
{
114 Server::arg_pair_t
{"-p", random_socket_or_port_string
},
118 mc
.enableBinaryProto();
119 REQUIRE(MEMCACHED_SUCCESS
== memcached_set_sasl_auth_data(&mc
.memc
,
120 "memcached", "memcached"));
125 void MemcachedCluster::enableBinaryProto(bool enable
) {
126 REQUIRE(MEMCACHED_SUCCESS
== memcached_behavior_set(&memc
,
127 MEMCACHED_BEHAVIOR_BINARY_PROTOCOL
, enable
));
130 void MemcachedCluster::enableBuffering(bool enable
) {
131 REQUIRE(MEMCACHED_SUCCESS
== memcached_behavior_set(&memc
,
132 MEMCACHED_BEHAVIOR_BUFFER_REQUESTS
, enable
));
135 void MemcachedCluster::enableReplication() {
136 REQUIRE(MEMCACHED_SUCCESS
== memcached_behavior_set(&memc
,
137 MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS
, memcached_server_count(&memc
)));
140 void MemcachedCluster::enableUdp(bool enable
) {
141 REQUIRE(MEMCACHED_SUCCESS
== memcached_behavior_set(&memc
,
142 MEMCACHED_BEHAVIOR_USE_UDP
, enable
));