Skip to content

Instantly share code, notes, and snippets.

@kazeburo
Created June 1, 2009 07:16
Show Gist options
  • Save kazeburo/121283 to your computer and use it in GitHub Desktop.
Save kazeburo/121283 to your computer and use it in GitHub Desktop.
diff -ur Cache-Memcached-Fast-0.14.orig/Fast.xs Cache-Memcached-Fast-0.14/Fast.xs
--- Cache-Memcached-Fast-0.14.orig/Fast.xs 2009-02-07 20:34:57.000000000 +0900
+++ Cache-Memcached-Fast-0.14/Fast.xs 2009-05-14 15:12:35.000000000 +0900
@@ -207,6 +207,10 @@
memd->servers = newAV();
+ ps = hv_fetch(conf, "old_ketama_algo", 15, 0);
+ if (ps && SvOK(*ps))
+ client_set_old_ketama_algo(c, SvTRUE(*ps));
+
ps = hv_fetch(conf, "ketama_points", 13, 0);
if (ps && SvOK(*ps))
{
diff -ur Cache-Memcached-Fast-0.14.orig/lib/Cache/Memcached/Fast.pm Cache-Memcached-Fast-0.14/lib/Cache/Memcached/Fast.pm
--- Cache-Memcached-Fast-0.14.orig/lib/Cache/Memcached/Fast.pm 2009-02-07 20:34:56.000000000 +0900
+++ Cache-Memcached-Fast-0.14/lib/Cache/Memcached/Fast.pm 2009-05-14 13:35:40.000000000 +0900
@@ -508,6 +508,7 @@
max_failures => 1,
failure_timeout => 1,
ketama_points => 1,
+ old_ketama_algo => 1,
serialize_methods => 1,
utf8 => 1,
max_size => 1,
diff -ur Cache-Memcached-Fast-0.14.orig/src/client.c Cache-Memcached-Fast-0.14/src/client.c
--- Cache-Memcached-Fast-0.14.orig/src/client.c 2009-02-07 20:34:57.000000000 +0900
+++ Cache-Memcached-Fast-0.14/src/client.c 2009-05-14 15:13:12.000000000 +0900
@@ -293,6 +293,7 @@
int failure_timeout; /* 1 sec. */
int close_on_error;
int nowait;
+ int old_ketama_algo;
int hash_namespace;
struct array index_list;
@@ -398,6 +399,7 @@
c->failure_timeout = 10;
c->close_on_error = 1;
c->nowait = 0;
+ c->old_ketama_algo = 0;
c->hash_namespace = 0;
c->generation = 1; /* Different from initial command state. */
@@ -512,6 +514,11 @@
c->nowait = enable;
}
+void
+client_set_old_ketama_algo(struct client *c, int enable)
+{
+ c->old_ketama_algo = enable;
+}
void
client_set_hash_namespace(struct client *c, int enable)
@@ -542,7 +549,7 @@
return res;
res = dispatch_add_server(&c->dispatch, host, host_len, port, port_len,
- weight, array_size(c->servers));
+ weight, array_size(c->servers), c->old_ketama_algo);
if (res == -1)
return MEMCACHED_FAILURE;
diff -ur Cache-Memcached-Fast-0.14.orig/src/client.h Cache-Memcached-Fast-0.14/src/client.h
--- Cache-Memcached-Fast-0.14.orig/src/client.h 2009-02-07 20:34:57.000000000 +0900
+++ Cache-Memcached-Fast-0.14/src/client.h 2009-05-14 16:22:08.000000000 +0900
@@ -155,6 +155,10 @@
extern
void
+client_set_old_ketama_algo(struct client *c, int enable);
+
+extern
+void
client_reset(struct client *c, struct result_object *o, int noreply);
extern
diff -ur Cache-Memcached-Fast-0.14.orig/src/dispatch_key.c Cache-Memcached-Fast-0.14/src/dispatch_key.c
--- Cache-Memcached-Fast-0.14.orig/src/dispatch_key.c 2009-02-07 20:34:57.000000000 +0900
+++ Cache-Memcached-Fast-0.14/src/dispatch_key.c 2009-05-14 15:29:36.000000000 +0900
@@ -158,7 +158,7 @@
ketama_crc32_add_server(struct dispatch_state *state,
const char *host, size_t host_len,
const char *port, size_t port_len,
- double weight, int index)
+ double weight, int index, int old_ketama_algo)
{
static const char delim = '\0';
unsigned int crc32, point;
@@ -184,10 +184,19 @@
We want the same result on all platforms, so we hardcode size
of int as 4 8-bit bytes.
*/
- buf[0] = point & 0xff;
- buf[1] = (point >> 8) & 0xff;
- buf[2] = (point >> 16) & 0xff;
- buf[3] = (point >> 24) & 0xff;
+ if ( old_ketama_algo ) {
+ point = 0;
+ buf[0] = i & 0xff;
+ buf[1] = (i >> 8) & 0xff;
+ buf[2] = (i >> 16) & 0xff;
+ buf[3] = (i >> 24) & 0xff;
+ }
+ else {
+ buf[0] = point & 0xff;
+ buf[1] = (point >> 8) & 0xff;
+ buf[2] = (point >> 16) & 0xff;
+ buf[3] = (point >> 24) & 0xff;
+ }
point = compute_crc32_add(crc32, buf, 4);
@@ -284,11 +293,11 @@
dispatch_add_server(struct dispatch_state *state,
const char *host, size_t host_len,
const char *port, size_t port_len,
- double weight, int index)
+ double weight, int index, int old_ketama_algo)
{
if (state->ketama_points > 0)
return ketama_crc32_add_server(state, host, host_len, port, port_len,
- weight, index);
+ weight, index, old_ketama_algo);
else
return compatible_add_server(state, weight, index);
}
diff -ur Cache-Memcached-Fast-0.14.orig/src/dispatch_key.h Cache-Memcached-Fast-0.14/src/dispatch_key.h
--- Cache-Memcached-Fast-0.14.orig/src/dispatch_key.h 2009-02-07 20:34:57.000000000 +0900
+++ Cache-Memcached-Fast-0.14/src/dispatch_key.h 2009-05-14 13:45:45.000000000 +0900
@@ -60,7 +60,7 @@
dispatch_add_server(struct dispatch_state *state,
const char *host, size_t host_len,
const char *port, size_t port_len,
- double weight, int index);
+ double weight, int index, int old_ketama_algo);
extern
int
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment