MEMCACHED_BEHAVIOR_USER_DATA work. This allows a client application to store
authorBrian Aker <brian@tangent.org>
Fri, 11 Jan 2008 21:43:36 +0000 (13:43 -0800)
committerBrian Aker <brian@tangent.org>
Fri, 11 Jan 2008 21:43:36 +0000 (13:43 -0800)
a pointer set of data into the library.

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

index ed7a8148beb6e42f946bd778e4093dc038ef0db9..46f277c55793e0ef07278cecaf6cd3264102386c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,5 @@
 0.13
+  * MEMCACHED_BEHAVIOR_USER_DATA added to store user pointer.
   * Fix for failure to connect to invalidate socket.
   * Patch from Marc Rossi to add --hash option for memcp, memrm, and memcat.
   * Kevin's patch for fixing EOF issues during a read.
index b76ae05426c8b590c8327dd4e95b4bccc9b35088..bd8c85a72334d56bc9688f3e66f83779f9543d32 100755 (executable)
@@ -73,7 +73,13 @@ Support CAS operations (this is not enabled by default at this point in the serv
 
 Modify the timeout value that is used by poll(). The default value is -1. An signed int pointer must be passed to memcached_behavior_set() to change this value. For memcached_behavior_get() a signed int value will be cast and returned as the unsigned long long.
 
-=item MEMCACHED_BUFFERED
+=item MEMCACHED_BEHAVIOR_USER_DATA
+
+This allows you to store a pointer to a specifc piece of data. This can be
+retrieved from inside of memcached_fetch_exectue(). Cloning a memcached_st
+will copy the pointer to the clone.
+
+=item MEMCACHED_BEHAVIOR_BUFFER_REQUESTS
 
 Enabling buffered IO causes commands to "buffer" instead of being sent. Any
 action that gets data causes this buffer to be be sent to the remote
index fb836284c324f9a8fd747b06fc0be0d6f38ee4b7..d73a16be805cef9e972538d980893ed68b041ad9 100644 (file)
@@ -90,6 +90,7 @@ typedef enum {
   MEMCACHED_BEHAVIOR_POLL_TIMEOUT,
   MEMCACHED_BEHAVIOR_DISTRIBUTION,
   MEMCACHED_BEHAVIOR_BUFFER_REQUESTS,
+  MEMCACHED_BEHAVIOR_USER_DATA,
 } memcached_behavior;
 
 typedef enum {
@@ -199,6 +200,7 @@ struct memcached_st {
   memcached_result_st result;
   memcached_hash hash;
   memcached_server_distribution distribution;
+  void *user_data;
   unsigned int wheel[MEMCACHED_WHEEL_SIZE];
 #ifdef NOT_USED /* Future Use */
   uint8_t replicas;
index 24c3b8bc4048198c60e10e581f371461490a3563..25a287ad2c8834cbfba220a5dcbb2e1d8b5a6a48 100644 (file)
@@ -82,6 +82,7 @@ memcached_st *memcached_clone(memcached_st *clone, memcached_st *ptr)
   new_clone->poll_timeout= ptr->poll_timeout;
   new_clone->distribution= ptr->distribution;
   new_clone->hash= ptr->hash;
+  new_clone->user_data= ptr->user_data;
 
   return new_clone;
 }
index 31d8f0525c7fe6e8983aa19052bec8805097478d..55b9da670d75a184be9430faaf2a4d31876d0795 100644 (file)
@@ -49,6 +49,9 @@ memcached_return memcached_behavior_set(memcached_st *ptr,
   case MEMCACHED_BEHAVIOR_KETAMA:
     set_behavior_flag(ptr, MEM_USE_KETAMA, data);
     break;
+  case MEMCACHED_BEHAVIOR_USER_DATA:
+    ptr->user_data= data;
+    break;
   case MEMCACHED_BEHAVIOR_POLL_TIMEOUT:
     {
       int32_t timeout= (*((int32_t *)data));
@@ -104,6 +107,8 @@ unsigned long long memcached_behavior_get(memcached_st *ptr,
   case MEMCACHED_BEHAVIOR_KETAMA:
     temp_flag= MEM_USE_KETAMA;
     break;
+  case MEMCACHED_BEHAVIOR_USER_DATA:
+    return (unsigned long long)ptr->user_data;
   case MEMCACHED_BEHAVIOR_POLL_TIMEOUT:
     {
       return (unsigned long long)ptr->poll_timeout;