void MemcachedCluster::init() {
REQUIRE(cluster.start());
- Retry cluster_is_listening([this]() {
- return cluster.isListening();
- });
- while (!cluster_is_listening()) {
- cluster.stop();
- cluster.wait();
- cluster.start();
+ while (!cluster.ensureListening()) {
+ cluster.restart();
}
if (auto br = getenv_else("MEMCACHED_BREAK", "0")) {
}
REQUIRE(memcached_create(&memc));
+
+ for (const auto &[behavior, value] : to_set) {
+ REQUIRE(MEMCACHED_SUCCESS == memcached_behavior_set(&memc, behavior, value));
+ }
+
for (const auto &server : cluster.getServers()) {
auto target = server.getSocketOrPort();
if (holds_alternative<string>(target)) {
}
MemcachedCluster::~MemcachedCluster() {
- if (memcmp(&memc, &empty_memc, sizeof(memc))) {
+ if (!!memcmp(&memc, &empty_memc, sizeof(memc))) {
memcached_free(&memc);
}
}
init();
}
-MemcachedCluster::MemcachedCluster(Cluster &&cluster_)
+MemcachedCluster::MemcachedCluster(Cluster &&cluster_, behaviors_t to_set_)
: cluster{move(cluster_)}
+, to_set{move(to_set_)}
{
init();
}
-MemcachedCluster::MemcachedCluster(MemcachedCluster &&mc)
+MemcachedCluster::MemcachedCluster(MemcachedCluster &&mc) noexcept
: cluster{Server{}}
{
*this = move(mc);
}
-MemcachedCluster &MemcachedCluster::operator=(MemcachedCluster &&mc) {
+MemcachedCluster &MemcachedCluster::operator=(MemcachedCluster &&mc) noexcept {
cluster = move(mc.cluster);
memcached_clone(&memc, &mc.memc);
- returns = ReturnMatcher{&memc};
+ returns = &memc;
return *this;
}
Server::arg_pair_t{"-U", random_socket_or_port_string},
Server::arg_t{"-v"}
}
- }}};
+ }}, {
+ {MEMCACHED_BEHAVIOR_USE_UDP, 1}
+ }};
}
#if LIBMEMCACHED_WITH_SASL_SUPPORT
Server::arg_pair_t{"-p", random_socket_or_port_string},
Server::arg_t{"-S"}
}
- }}};
- mc.enableBinaryProto();
+ }}, {
+ {MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1},
+ }};
REQUIRE(MEMCACHED_SUCCESS == memcached_set_sasl_auth_data(&mc.memc,
"memcached", "memcached"));
return mc;
MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS, memcached_server_count(&memc) - 1));
}
-void MemcachedCluster::enableUdp(bool enable) {
- REQUIRE(MEMCACHED_SUCCESS == memcached_behavior_set(&memc,
- MEMCACHED_BEHAVIOR_USE_UDP, enable));
-}
-
-void MemcachedCluster::killOneServer() {
+void MemcachedCluster::killOneServer() const {
const auto &servers = cluster.getServers();
const auto &victim = servers[random_num(0UL, servers.size() - 1)];
::kill(victim.getPid(), SIGKILL);