#include "MemcachedCluster.hpp"
#include "Retry.hpp"
+const memcached_st MemcachedCluster::empty_memc{};
+
void MemcachedCluster::init() {
REQUIRE(cluster.start());
}
MemcachedCluster::~MemcachedCluster() {
- memcached_free(&memc);
+ if (memcmp(&memc, &empty_memc, sizeof(memc))) {
+ memcached_free(&memc);
+ }
}
void MemcachedCluster::flush() {
}
MemcachedCluster::MemcachedCluster()
-: cluster{Server{getenv_else("MEMCACHED_BINARY", "memcached"), {random_socket_or_port_arg()}}}
+: cluster{Server{
+ MEMCACHED_BINARY,
+ {random_socket_or_port_arg()}
+}}
{
init();
}
MemcachedCluster::MemcachedCluster(Cluster &&cluster_)
-: cluster{forward<Cluster>(cluster_)}
+: cluster{move(cluster_)}
{
init();
}
+MemcachedCluster::MemcachedCluster(MemcachedCluster &&mc)
+ : cluster{Server{}}
+{
+ *this = move(mc);
+}
+
+MemcachedCluster &MemcachedCluster::operator=(MemcachedCluster &&mc) {
+ cluster = move(mc.cluster);
+ memcached_clone(&memc, &mc.memc);
+ returns = ReturnMatcher{&memc};
+ return *this;
+}
+
MemcachedCluster MemcachedCluster::mixed() {
return MemcachedCluster{};
}
-MemcachedCluster MemcachedCluster::net() {
- return MemcachedCluster{Cluster{Server{getenv_else("MEMCACHED_BINARY", "memcached"), {"-p", random_socket_or_port_string}}}};
+MemcachedCluster MemcachedCluster::network() {
+ return MemcachedCluster{Cluster{Server{
+ MEMCACHED_BINARY,
+ {"-p", random_socket_or_port_string}
+ }}};
}
MemcachedCluster MemcachedCluster::socket() {
- return MemcachedCluster{Cluster{Server{getenv_else("MEMCACHED_BINARY", "memcached"), {"-s", random_socket_or_port_string}}}};
+ return MemcachedCluster{Cluster{Server{
+ MEMCACHED_BINARY,
+ {"-s", random_socket_or_port_string}
+ }}};
+}
+
+void MemcachedCluster::enableBinaryProto(bool enable) {
+ REQUIRE(MEMCACHED_SUCCESS == memcached_behavior_set(&memc,
+ MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, enable));
}
-void MemcachedCluster::enableBinary(bool enable) {
- REQUIRE(MEMCACHED_SUCCESS == memcached_behavior_set(&memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, enable));
+void MemcachedCluster::enableBuffering(bool enable) {
+ REQUIRE(MEMCACHED_SUCCESS == memcached_behavior_set(&memc,
+ MEMCACHED_BEHAVIOR_BUFFER_REQUESTS, enable));
}
+
+void MemcachedCluster::enableReplication() {
+ REQUIRE(MEMCACHED_SUCCESS == memcached_behavior_set(&memc,
+ MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS, memcached_server_count(&memc)));
+}
+