[PATCH] Add test_bucket() function.

Tomash Brechko tomash.brechko at gmail.com
Tue Nov 13 13:28:38 UTC 2007


---
 trunk/server/memcached.c |   74 ++++++++++++++++-----------------------------
 1 files changed, 26 insertions(+), 48 deletions(-)

diff --git a/trunk/server/memcached.c b/trunk/server/memcached.c
index 999fcb6..9e4271f 100644
--- a/trunk/server/memcached.c
+++ b/trunk/server/memcached.c
@@ -1097,6 +1097,24 @@ static void process_stat(conn *c, token_t *tokens, const size_t ntokens) {
     out_string(c, "ERROR");
 }
 
+static inline
+bool
+test_bucket(conn *c)
+{
+    int bucket = c->bucket;
+    if (bucket == -1) {
+        out_string(c, "CLIENT_ERROR no BG data in managed mode");
+        return false;
+    }
+    c->bucket = -1;
+    if (buckets[bucket] != c->gen) {
+        out_string(c, "ERROR_NOT_OWNER");
+        return false;
+    }
+
+    return true;
+}
+
 /* ntokens is overwritten here... shrug.. */
 static inline void process_get_command(conn *c, token_t *tokens, size_t ntokens, bool return_key_ptr) {
     char *key;
@@ -1110,18 +1128,8 @@ static inline void process_get_command(conn *c, token_t *tokens, size_t ntokens,
 
     assert(c != NULL);
 
-    if (settings.managed) {
-        int bucket = c->bucket;
-        if (bucket == -1) {
-            out_string(c, "CLIENT_ERROR no BG data in managed mode");
-            return;
-        }
-        c->bucket = -1;
-        if (buckets[bucket] != c->gen) {
-            out_string(c, "ERROR_NOT_OWNER");
-            return;
-        }
-    }
+    if (settings.managed && !test_bucket(c))
+        return;
 
     do {
         while(key_token->length != 0) {
@@ -1274,18 +1282,8 @@ static void process_update_command(conn *c, token_t *tokens, const size_t ntoken
         stats_prefix_record_set(key);
     }
 
-    if (settings.managed) {
-        int bucket = c->bucket;
-        if (bucket == -1) {
-            out_string(c, "CLIENT_ERROR no BG data in managed mode");
-            return;
-        }
-        c->bucket = -1;
-        if (buckets[bucket] != c->gen) {
-            out_string(c, "ERROR_NOT_OWNER");
-            return;
-        }
-    }
+    if (settings.managed && !test_bucket(c))
+        return;
 
     it = item_alloc(key, nkey, flags, realtime(exptime), vlen+2);
 
@@ -1358,18 +1356,8 @@ static void process_arithmetic_command(conn *c, token_t *tokens, const size_t nt
     key = tokens[KEY_TOKEN].value;
     nkey = tokens[KEY_TOKEN].length;
 
-    if (settings.managed) {
-        int bucket = c->bucket;
-        if (bucket == -1) {
-            out_string(c, "CLIENT_ERROR no BG data in managed mode");
-            return;
-        }
-        c->bucket = -1;
-        if (buckets[bucket] != c->gen) {
-            out_string(c, "ERROR_NOT_OWNER");
-            return;
-        }
-    }
+    if (settings.managed && !test_bucket(c))
+        return;
 
     delta = strtoll(tokens[2].value, NULL, 10);
 
@@ -1448,18 +1436,8 @@ static void process_delete_command(conn *c, token_t *tokens, const size_t ntoken
 
     set_noreply_maybe(c, tokens, ntokens);
 
-    if (settings.managed) {
-        int bucket = c->bucket;
-        if (bucket == -1) {
-            out_string(c, "CLIENT_ERROR no BG data in managed mode");
-            return;
-        }
-        c->bucket = -1;
-        if (buckets[bucket] != c->gen) {
-            out_string(c, "ERROR_NOT_OWNER");
-            return;
-        }
-    }
+    if (settings.managed && !test_bucket(c))
+        return;
 
     key = tokens[KEY_TOKEN].value;
     nkey = tokens[KEY_TOKEN].length;
-- 
1.5.3.5.529.ge3d6d


More information about the memcached mailing list