#endif
struct memcached_st {
+ /**
+ @note these are static and should not change without a call to behavior.
+ */
struct {
- bool is_allocated:1;
- bool is_initialized:1;
bool is_purging:1;
- } options;
- memcached_server_distribution_t distribution;
- memcached_hash_t hash;
- uint32_t continuum_points_counter;
- memcached_server_st *hosts;
- memcached_server_st *last_disconnected_server;
- int32_t snd_timeout;
- int32_t rcv_timeout;
- uint32_t server_failure_limit;
- uint32_t io_msg_watermark;
- uint32_t io_bytes_watermark;
- uint32_t io_key_prefetch;
- uint32_t number_of_hosts;
- uint32_t cursor_server;
- int cached_errno;
- struct {
+ bool is_processing_input:1;
+ // Everything below here is pretty static.
bool auto_eject_hosts:1;
bool binary_protocol:1;
bool buffer_requests:1;
bool use_sort_hosts:1;
bool use_udp:1;
bool verify_key:1;
+ bool cork:1;
} flags;
+ memcached_server_distribution_t distribution;
+ memcached_hash_t hash;
+ uint32_t continuum_points_counter; // Ketama
+ memcached_server_st *servers;
+ memcached_server_st *last_disconnected_server;
+ int32_t snd_timeout;
+ int32_t rcv_timeout;
+ uint32_t server_failure_limit;
+ uint32_t io_msg_watermark;
+ uint32_t io_bytes_watermark;
+ uint32_t io_key_prefetch;
+ uint32_t number_of_hosts;
+ int cached_errno;
int32_t poll_timeout;
int32_t connect_timeout;
int32_t retry_timeout;
- uint32_t continuum_count;
+ uint32_t continuum_count; // Ketama
int send_size;
int recv_size;
void *user_data;
- time_t next_distribution_rebuild;
+ time_t next_distribution_rebuild; // Ketama
size_t prefix_key_length;
uint32_t number_of_replicas;
memcached_hash_t distribution_hash;
memcached_result_st result;
- memcached_continuum_item_st *continuum;
+ memcached_continuum_item_st *continuum; // Ketama
memcached_clone_fn on_clone;
memcached_cleanup_fn on_cleanup;
memcached_free_fn call_free;
memcached_trigger_delete_key_fn delete_trigger;
memcached_callback_st *callbacks;
char prefix_key[MEMCACHED_PREFIX_KEY_MAX_SIZE];
+ struct {
+ bool is_allocated:1;
+ } options;
};
LIBMEMCACHED_API
LIBMEMCACHED_API
void memcached_servers_reset(memcached_st *ptr);
+// Local Only Inline
+static inline memcached_server_st *memcached_server_instance_fetch(memcached_st *ptr, uint32_t server_key)
+{
+ return &ptr->servers[server_key];
+}
+
/* Public API */
LIBMEMCACHED_API
LIBMEMCACHED_LOCAL
memcached_return_t run_distribution(memcached_st *ptr);
+// These are private
#define memcached_is_allocated(__object) ((__object)->options.is_allocated)
#define memcached_is_initialized(__object) ((__object)->options.is_initialized)
+#define memcached_is_purging(__object) ((__object)->flags.is_purging)
+#define memcached_is_processing_input(__object) ((__object)->flags.is_processing_input)
+#define memcached_set_purging(__object, __value) ((__object)->flags.is_purging= (__value))
+#define memcached_set_processing_input(__object, __value) ((__object)->flags.is_processing_input= (__value))
#ifdef __cplusplus
}