Extend pool API for fetch/release. Fix concurrency issue in test case.
[awesomized/libmemcached] / libmemcached / server.h
index 06142b9647e585b3689270f2d1f6d435b47476b5..3ca1df32eddec373f033ac71261bc78937031f29 100644 (file)
 
 #pragma once
 
+#ifndef WIN32
+#include <netdb.h>
+#endif
+
+#ifdef NI_MAXHOST
+#define MEMCACHED_NI_MAXHOST NI_MAXHOST
+#else
+#define MEMCACHED_NI_MAXHOST 1025
+#endif
+
+enum memcached_server_state_t {
+  MEMCACHED_SERVER_STATE_NEW, // fd == -1, no address lookup has been done
+  MEMCACHED_SERVER_STATE_ADDRINFO, // ADDRRESS information has been gathered
+  MEMCACHED_SERVER_STATE_IN_PROGRESS,
+  MEMCACHED_SERVER_STATE_CONNECTED,
+  MEMCACHED_SERVER_STATE_IN_TIMEOUT
+};
+
 struct memcached_server_st {
   struct {
     bool is_allocated:1;
@@ -48,11 +66,13 @@ struct memcached_server_st {
   uint32_t number_of_hosts;
   uint32_t cursor_active;
   in_port_t port;
-  int cached_errno;
   memcached_socket_t fd;
   uint32_t io_bytes_sent; /* # bytes sent since last read */
   uint32_t server_failure_counter;
+  uint64_t server_failure_counter_query_id;
   uint32_t weight;
+  uint32_t version;
+  enum memcached_server_state_t state;
   struct {
     uint32_t read;
     uint32_t write;
@@ -62,18 +82,18 @@ struct memcached_server_st {
   uint8_t minor_version; // ditto
   memcached_connection_t type;
   char *read_ptr;
-  char *cached_server_error;
   size_t read_buffer_length;
   size_t read_data_length;
   size_t write_buffer_offset;
   struct addrinfo *address_info;
   struct addrinfo *address_info_next;
   time_t next_retry;
-  const memcached_st *root;
+  memcached_st *root;
   uint64_t limit_maxbytes;
+  struct memcached_error_t *error_messages;
   char read_buffer[MEMCACHED_MAX_BUFFER];
   char write_buffer[MEMCACHED_MAX_BUFFER];
-  char hostname[NI_MAXHOST];
+  char hostname[MEMCACHED_NI_MAXHOST];
 };
 
 
@@ -101,7 +121,7 @@ void memcached_server_free(memcached_server_st *ptr);
 
 LIBMEMCACHED_LOCAL
 memcached_server_st *memcached_server_clone(memcached_server_st *destination,
-                                            const memcached_server_st *source);
+                                            memcached_server_st *source);
 
 LIBMEMCACHED_API
 memcached_server_instance_st memcached_server_get_last_disconnect(const memcached_st *ptr);
@@ -118,6 +138,13 @@ LIBMEMCACHED_API
 memcached_return_t memcached_server_add(memcached_st *ptr,
                                         const char *hostname, in_port_t port);
 
+LIBMEMCACHED_LOCAL
+  memcached_return_t memcached_server_add_parsed(memcached_st *ptr,
+                                                 const char *hostname,
+                                                 size_t hostname_length,
+                                                 in_port_t port,
+                                                 uint32_t weight);
+
 LIBMEMCACHED_API
 memcached_return_t memcached_server_add_udp_with_weight(memcached_st *ptr,
                                                         const char *hostname,
@@ -136,18 +163,20 @@ memcached_return_t memcached_server_add_with_weight(memcached_st *ptr, const cha
   Operations on Single Servers.
 */
 LIBMEMCACHED_API
-uint32_t memcached_server_response_count(memcached_server_instance_st self);
+uint32_t memcached_server_response_count(const memcached_server_instance_st self);
 
 LIBMEMCACHED_API
-const char *memcached_server_name(memcached_server_instance_st self);
+const char *memcached_server_name(const memcached_server_instance_st self);
 
 LIBMEMCACHED_API
-in_port_t memcached_server_port(memcached_server_instance_st self);
+in_port_t memcached_server_port(const memcached_server_instance_st self);
 
 LIBMEMCACHED_API
-const char *memcached_server_error(memcached_server_instance_st ptr);
+const char *memcached_server_type(const memcached_server_instance_st ptr);
 
 
+LIBMEMCACHED_LOCAL
+void __server_free(memcached_server_st *);
 
 #ifdef __cplusplus
 } // extern "C"