Added MEMCACHED_BEHAVIOR_CACHE_LOOKUPS flag (you can now avoid multiple DNS
authorBrian Aker <brian@tangent.org>
Mon, 19 Nov 2007 17:47:20 +0000 (09:47 -0800)
committerBrian Aker <brian@tangent.org>
Mon, 19 Nov 2007 17:47:20 +0000 (09:47 -0800)
lookups).

ChangeLog
docs/memcached_behavior.pod
include/memcached.h
lib/common.h
lib/memcached_behavior.c
lib/memcached_connect.c

index 904dd8a5f96650c8b729efdcc48053382142363d..26c4b141f61f3d5a45ff0d7b1658c77dcbdb908f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 0.10
   * Added append binary test.
+  * Added MEMCACHED_BEHAVIOR_CACHE_LOOKUPS behavior so that you can save on
+    multiple DNS lookups.
 
 0.9 Thu Nov 15 07:44:00 PST 2007
   * fix for when no servers are definied.
index 296988e5ac6fd627b17a590d061a32c06bf7c833..4d7d114037fc7e6e57758b96eef80a89774f9eec 100755 (executable)
@@ -51,6 +51,9 @@ environments).
 
 Makes the default hashing algorithm for keys use MD5. The value can be set to either MEMCACHED_HASH_DEFAULT, MEMCACHED_HASH_MD5, MEMCACHED_HASH_CRC, MEMCACHED_HASH_FNV1_64, MEMCACHED_HASH_FNV1A_64, MEMCACHED_HASH_FNV1_32, MEMCACHED_HASH_FNV1A_32, MEMCACHED_HASH_KETAMA. The behavior for all hashes but MEMCACHED_HASH_DEFAULT is identitical to the Java driver written by Dustin Sallings.
 
+=item MEMCACHED_BEHAVIOR_CACHE_LOOKUPS
+
+Memcached can cache named lookups so that DNS lookups are made only once.
 
 =back
 
index 316f1f3fc2afdda24b831fac6105483fd353b5dc..53b51ea03ee94657c13aabb24b27e2902e579e7b 100644 (file)
@@ -73,6 +73,7 @@ typedef enum {
   MEMCACHED_BEHAVIOR_KETAMA,
   MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE,
   MEMCACHED_BEHAVIOR_SOCKET_RECV_SIZE,
+  MEMCACHED_BEHAVIOR_CACHE_LOOKUPS,
 } memcached_behavior;
 
 typedef enum {
index 3b8946a13ba1dac2afce36f857f79b4386a7cbf9..1e564cf5f894d5a00533916ee10bca6e9544b703 100644 (file)
@@ -43,6 +43,7 @@ typedef enum {
   MEM_USE_MD5= (1 << 3),
   MEM_USE_KETAMA= (1 << 4),
   MEM_USE_CRC= (1 << 5),
+  MEM_USE_CACHE_LOOKUPS= (1 << 6),
 } memcached_flags;
 
 /* Hashing algo */
index fb04d72212fd4ecb1f7ed62a730b08c2785c667a..67a52fa8ac212c18bc9a37cbced1f1abe728aa06 100644 (file)
@@ -35,6 +35,9 @@ memcached_return memcached_behavior_set(memcached_st *ptr,
   case MEMCACHED_BEHAVIOR_HASH:
     ptr->hash= *(memcached_hash *)(data);
     break;
+  case MEMCACHED_BEHAVIOR_CACHE_LOOKUPS:
+    set_behavior_flag(ptr, MEM_USE_CACHE_LOOKUPS, data);
+    break;
   case MEMCACHED_BEHAVIOR_KETAMA:
     set_behavior_flag(ptr, MEM_USE_KETAMA, data);
     break;
@@ -64,6 +67,9 @@ unsigned long long memcached_behavior_get(memcached_st *ptr,
 
   switch (flag)
   {
+  case MEMCACHED_BEHAVIOR_CACHE_LOOKUPS:
+    temp_flag= MEM_USE_CACHE_LOOKUPS;
+    break;
   case MEMCACHED_BEHAVIOR_NO_BLOCK:
     temp_flag= MEM_NO_BLOCK;
     break;
index 0c256b71e07c6b9853798135fa6f4688ecb42fcf..fffd2b88f34211101156545416cd35ef209997f1 100644 (file)
@@ -72,7 +72,12 @@ static memcached_return udp_connect(memcached_st *ptr, unsigned int server_key)
     /* Old connection junk still is in the structure */
     WATCHPOINT_ASSERT(ptr->hosts[server_key].stack_responses == 0);
 
-    if (ptr->hosts[server_key].sockaddr_inited == MEMCACHED_NOT_ALLOCATED)
+    /*
+      If we have not allocated the hosts object.
+      Or if the cache has not been set.
+    */
+    if (ptr->hosts[server_key].sockaddr_inited == MEMCACHED_NOT_ALLOCATED || 
+        (!(ptr->flags & MEM_USE_CACHE_LOOKUPS)))
     {
       memcached_return rc;