Added a new test called output_ketama_weighted_keys. It prints the hashing result
authormike tsai <mtsai@mtsai>
Thu, 22 Oct 2009 22:53:58 +0000 (15:53 -0700)
committermike tsai <mtsai@mtsai>
Thu, 22 Oct 2009 22:53:58 +0000 (15:53 -0700)
for hashing keys 0-9999 and outputs a file called ketama_keys.test.

We can then use this file to test ketama hashing in other libraries like spymemcached.
With a new class I just checked in called KetamaKeysTest (must download source from github).

javac -cp target/classes src/test/manual/net/spy/memcached/test/KetamaKeysTest.java
java -cp target/test/classes:target/classes:src/test/manual net.spy.memcached.test.KetamaKeysTest > ketama_keys.txt

To test the ketama hashing is working the same for both libraries, I ran this command:

$ cmp ketama_keys.txt /sandbox/b-server-3-4/srcroot/svr/import/common/java/java-memcached-client/ketama_keys.txt

tests/function.c
tests/ketama_test_cases.h

index 2bc0192b3f0cf39f510eefcb729ae4b2852e2ce2..affa176ff80653c488b25eabdc230438a0c3770e 100644 (file)
@@ -2756,6 +2756,57 @@ static test_return_t auto_eject_hosts(memcached_st *trash)
   return TEST_SUCCESS;
 }
 
+static test_return_t output_ketama_weighted_keys(memcached_st *trash)
+{
+  (void) trash;
+
+  memcached_return rc;
+  memcached_st *memc= memcached_create(NULL);
+  assert(memc);
+
+  rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED, 1);
+  assert(rc == MEMCACHED_SUCCESS);
+
+  uint64_t value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED);
+  assert(value == 1);
+
+  rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_HASH, MEMCACHED_HASH_MD5);
+  assert(rc == MEMCACHED_SUCCESS);
+
+  value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_HASH);
+  assert(value == MEMCACHED_HASH_MD5);
+
+  memcached_server_st *server_pool;
+  server_pool = memcached_servers_parse("10.0.1.1:11211,10.0.1.2:11211,10.0.1.3:11211,10.0.1.4:11211,10.0.1.5:11211,10.0.1.6:11211,10.0.1.7:11211,10.0.1.8:11211,192.168.1.1:11211,192.168.100.1:11211");
+  memcached_server_push(memc, server_pool);
+
+  FILE *fp;
+  if ((fp = fopen("ketama_keys.txt", "w")))
+  {
+    // noop
+  } else {
+    printf("cannot write to file ketama_keys.txt");
+    return TEST_FAILURE;
+  }
+
+  for (int x= 0; x < 10000; x++)
+  {
+    char key[10];
+    sprintf(key, "%d", x);
+      
+    uint32_t server_idx = memcached_generate_hash(memc, key, strlen(key));
+    char *hostname = memc->hosts[server_idx].hostname;
+    unsigned int port = memc->hosts[server_idx].port;
+    fprintf(fp, "key %s is on host /%s:%u\n", key, hostname, port);
+  }
+  fclose(fp);
+  memcached_server_list_free(server_pool);
+  memcached_free(memc);
+
+  return TEST_SUCCESS;
+}
+
+
 static test_return_t  result_static(memcached_st *memc)
 {
   memcached_result_st result;
@@ -5217,6 +5268,7 @@ test_st hsieh_availability[] ={
 
 test_st ketama_auto_eject_hosts[] ={
   {"auto_eject_hosts", 1, auto_eject_hosts },
+  {"output_ketama_weighted_keys", 1, output_ketama_weighted_keys },
   {0, 0, 0}
 };
 
index a0d72b083b3ff3b1099fc801077a29d364ed7d3b..fb6f03d82e1dc3b0869e75b4e0512c7ee5b7b68e 100644 (file)
@@ -6,103 +6,103 @@ typedef struct {
 } TestCase;
 
 static TestCase test_cases[99] = {
-  { "SVa_]_V41)", 443691461UL, 445379617UL, "10.0.1.7" },
-  { "*/Z;?V(.\\8", 1422915503UL, 1428303028UL, "10.0.1.1" },
+  { "SVa_]_V41)", 443691461UL, 445379617UL, "10.0.1.2" },
+  { "*/Z;?V(.\\8", 1422915503UL, 1428303028UL, "10.0.1.4" },
   { "30C1*Z*S/_", 1473165754UL, 1480075959UL, "10.0.1.2" },
   { "ERR:EC58G>", 2148406511UL, 2168579133UL, "10.0.1.7" },
-  { "1I=cTMNTKF", 2882686667UL, 2885206587UL, "10.0.1.5" },
+  { "1I=cTMNTKF", 2882686667UL, 2885206587UL, "10.0.1.4" },
   { "]VG<`I*Z8)", 1103544263UL, 1104827657UL, "10.0.1.5" },
-  { "UUTC`-V159", 3716288206UL, 3727224240UL, "10.0.1.5" },
-  { "@7RU6C6T+Z", 3862737685UL, 3871917949UL, "10.0.1.5" },
-  { "/XLN0@+36;", 1623269830UL, 1627683651UL, "10.0.1.1" },
-  { "4(`X;\\V.^c", 373546328UL, 383925769UL, "10.0.1.1" },
-  { "726bW=9*a4", 4213440020UL, 4213950705UL, "10.0.1.7" },
-  { "\\`)<B)UE,c", 951096736UL, 955226069UL, "10.0.1.1" },
-  { "P1[Ma3=K1/", 1989324036UL, 1994028240UL, "10.0.1.8" },
-  { "C89I.-V?cT", 1604239957UL, 1606398093UL, "10.0.1.8" },
-  { "D[HE+cFXDK", 2117036136UL, 2117124014UL, "10.0.1.3" },
-  { "P1L?NAB[)K", 2129972569UL, 2132542634UL, "10.0.1.1" },
-  { "cDT0)Z5P6,", 176485284UL, 178675413UL, "10.0.1.5" },
-  { "@JW`+[WAO8", 2720940826UL, 2743975456UL, "10.0.1.5" },
-  { "\\39DKW^)N_", 3548879868UL, 3550704865UL, "10.0.1.3" },
-  { "EM75N0+[X1", 1558531507UL, 1559308507UL, "10.0.1.4" },
+  { "UUTC`-V159", 3716288206UL, 3727224240UL, "10.0.1.7" },
+  { "@7RU6C6T+Z", 3862737685UL, 3871917949UL, "10.0.1.6" },
+  { "/XLN0@+36;", 1623269830UL, 1627683651UL, "10.0.1.7" },
+  { "4(`X;\\V.^c", 373546328UL, 383925769UL, "10.0.1.6" },
+  { "726bW=9*a4", 4213440020UL, 4213950705UL, "10.0.1.3" },
+  { "\\`)<B)UE,c", 951096736UL, 955226069UL, "10.0.1.8" },
+  { "P1[Ma3=K1/", 1989324036UL, 1994028240UL, "10.0.1.1" },
+  { "C89I.-V?cT", 1604239957UL, 1606398093UL, "10.0.1.5" },
+  { "D[HE+cFXDK", 2117036136UL, 2117124014UL, "10.0.1.5" },
+  { "P1L?NAB[)K", 2129972569UL, 2132542634UL, "10.0.1.7" },
+  { "cDT0)Z5P6,", 176485284UL, 178675413UL, "10.0.1.1" },
+  { "@JW`+[WAO8", 2720940826UL, 2743975456UL, "10.0.1.2" },
+  { "\\39DKW^)N_", 3548879868UL, 3550704865UL, "10.0.1.6" },
+  { "EM75N0+[X1", 1558531507UL, 1559308507UL, "10.0.1.5" },
   { "`,SS]NBP,b", 1883545960UL, 1884847278UL, "10.0.1.1" },
-  { "XX1a9LT+F?", 653487707UL, 656410408UL, "10.0.1.5" },
-  { "Zc\\-,F-c6V", 1160802451UL, 1171575728UL, "10.0.1.5" },
-  { "1*RTMC7,03", 1602398012UL, 1606398093UL, "10.0.1.8" },
+  { "XX1a9LT+F?", 653487707UL, 656410408UL, "10.0.1.6" },
+  { "Zc\\-,F-c6V", 1160802451UL, 1171575728UL, "10.0.1.6" },
+  { "1*RTMC7,03", 1602398012UL, 1606398093UL, "10.0.1.5" },
   { "*Xc+V0P>32", 536016577UL, 539988520UL, "10.0.1.7" },
   { "U))Fb-(`,.", 4128682289UL, 4136854163UL, "10.0.1.7" },
   { "R-08RNTaRT", 3718170086UL, 3727224240UL, "10.0.1.5" },
-  { "(LHcO203I3", 1007779411UL, 1014643570UL, "10.0.1.5" },
-  { "=256P+;Qc8", 3976201210UL, 3976304873UL, "10.0.1.5" },
-  { "OI5XZ_BBT(", 2155922164UL, 2168579133UL, "10.0.1.7" },
-  { "2TLRL/UL;:", 1086800909UL, 1095659802UL, "10.0.1.7" },
-  { "WHD\\O1`ZRW", 3087923411UL, 3095471560UL, "10.0.1.5" },
-  { ".=54)_c;=T", 2497691631UL, 2502731301UL, "10.0.1.1" },
-  { ";G<W-XWZ@b", 2888169733UL, 2888728739UL, "10.0.1.5" },
-  { "(,>E`)FT\\4", 580747448UL, 581063326UL, "10.0.1.2" },
-  { "HZAU*;P*N]", 2564670474UL, 2565697267UL, "10.0.1.7" },
+  { "(LHcO203I3", 1007779411UL, 1014643570UL, "10.0.1.1" },
+  { "=256P+;Qc8", 3976201210UL, 3976304873UL, "10.0.1.3" },
+  { "OI5XZ_BBT(", 2155922164UL, 2168579133UL, "10.0.1.5" },
+  { "2TLRL/UL;:", 1086800909UL, 1095659802UL, "10.0.1.2" },
+  { "WHD\\O1`ZRW", 3087923411UL, 3095471560UL, "10.0.1.1" },
+  { ".=54)_c;=T", 2497691631UL, 2502731301UL, "10.0.1.6" },
+  { ";G<W-XWZ@b", 2888169733UL, 2888728739UL, "10.0.1.7" },
+  { "(,>E`)FT\\4", 580747448UL, 581063326UL, "10.0.1.5" },
+  { "HZAU*;P*N]", 2564670474UL, 2565697267UL, "10.0.1.1" },
   { "NZ@ZE=O84_", 533335275UL, 539988520UL, "10.0.1.7" },
-  { "6,cEI`F_P>", 3972869246UL, 3974773167UL, "10.0.1.6" },
-  { "c,5AQ/T5)6", 2835605783UL, 2847870057UL, "10.0.1.8" },
-  { ".O,>>BT)RX", 3857978174UL, 3871917949UL, "10.0.1.5" },
-  { "XY\\X::LX50", 1749241099UL, 1752196488UL, "10.0.1.6" },
-  { "+550F^/.01", 3781824099UL, 3783248219UL, "10.0.1.6" },
+  { "6,cEI`F_P>", 3972869246UL, 3974773167UL, "10.0.1.3" },
+  { "c,5AQ/T5)6", 2835605783UL, 2847870057UL, "10.0.1.7" },
+  { ".O,>>BT)RX", 3857978174UL, 3871917949UL, "10.0.1.7" },
+  { "XY\\X::LX50", 1749241099UL, 1752196488UL, "10.0.1.7" },
+  { "+550F^/.01", 3781824099UL, 3783248219UL, "10.0.1.2" },
   { "<.X9E2S5+9", 3232479481UL, 3234387706UL, "10.0.1.7" },
-  { "]\\.UH8_0a1", 2419699252UL, 2423002920UL, "10.0.1.4" },
-  { "8(6=(T0/Z0", 728266737UL, 729026070UL, "10.0.1.7" },
-  { "8*6a;Sc*X+", 4223431086UL, 4230156966UL, "10.0.1.2" },
-  { "<QW:;3K6;H", 2731158143UL, 2743975456UL, "10.0.1.5" },
+  { "]\\.UH8_0a1", 2419699252UL, 2423002920UL, "10.0.1.6" },
+  { "8(6=(T0/Z0", 728266737UL, 729026070UL, "10.0.1.6" },
+  { "8*6a;Sc*X+", 4223431086UL, 4230156966UL, "10.0.1.5" },
+  { "<QW:;3K6;H", 2731158143UL, 2743975456UL, "10.0.1.7" },
   { "7C@EY@-Y?_", 760770733UL, 761576669UL, "10.0.1.5" },
-  { "aPb3E1WD4K", 2500489218UL, 2502731301UL, "10.0.1.1" },
-  { "?@12R<=1BH", 1494795329UL, 1502505505UL, "10.0.1.8" },
-  { "QR(a+Q=1FU", 3238535074UL, 3238996435UL, "10.0.1.6" },
-  { "`C9^FV,960", 2628553463UL, 2628733766UL, "10.0.1.6" },
-  { "UNHVP..^8H", 977096483UL, 977319837UL, "10.0.1.4" },
-  { ":Y.2W2[(35", 2777083668UL, 2784182515UL, "10.0.1.7" },
-  { "M/HV^_HZ4O", 3623390946UL, 3624445007UL, "10.0.1.7" },
-  { "ZY16KQ<ICD", 1831153193UL, 1838563516UL, "10.0.1.4" },
-  { "bV2,`a.PY9", 1962228869UL, 1962648654UL, "10.0.1.1" },
-  { "U;9:-+5N]9", 269504649UL, 277560877UL, "10.0.1.1" },
-  { "1S/:aJ[1(;", 578069729UL, 581063326UL, "10.0.1.2" },
-  { "Nb-X^]M)I:", 330865696UL, 331009896UL, "10.0.1.6" },
-  { "2;M;ES>J5/", 2776949824UL, 2784182515UL, "10.0.1.7" },
-  { "[>RZHG97Q9", 71954686UL, 72034069UL, "10.0.1.6" },
-  { "J3/G[)9<^Z", 2799896459UL, 2805183696UL, "10.0.1.7" },
-  { "N-)88>[O`,", 50404102UL, 51792557UL, "10.0.1.5" },
+  { "aPb3E1WD4K", 2500489218UL, 2502731301UL, "10.0.1.2" },
+  { "?@12R<=1BH", 1494795329UL, 1502505505UL, "10.0.1.1" },
+  { "QR(a+Q=1FU", 3238535074UL, 3238996435UL, "10.0.1.5" },
+  { "`C9^FV,960", 2628553463UL, 2628733766UL, "10.0.1.3" },
+  { "UNHVP..^8H", 977096483UL, 977319837UL, "10.0.1.6" },
+  { ":Y.2W2[(35", 2777083668UL, 2784182515UL, "10.0.1.6" },
+  { "M/HV^_HZ4O", 3623390946UL, 3624445007UL, "10.0.1.4" },
+  { "ZY16KQ<ICD", 1831153193UL, 1838563516UL, "10.0.1.7" },
+  { "bV2,`a.PY9", 1962228869UL, 1962648654UL, "10.0.1.7" },
+  { "U;9:-+5N]9", 269504649UL, 277560877UL, "10.0.1.2" },
+  { "1S/:aJ[1(;", 578069729UL, 581063326UL, "10.0.1.5" },
+  { "Nb-X^]M)I:", 330865696UL, 331009896UL, "10.0.1.3" },
+  { "2;M;ES>J5/", 2776949824UL, 2784182515UL, "10.0.1.6" },
+  { "[>RZHG97Q9", 71954686UL, 72034069UL, "10.0.1.4" },
+  { "J3/G[)9<^Z", 2799896459UL, 2805183696UL, "10.0.1.6" },
+  { "N-)88>[O`,", 50404102UL, 51792557UL, "10.0.1.2" },
   { "NP:=FR\\OaA", 3837333776UL, 3837792034UL, "10.0.1.7" },
-  { "`@L+W;a,O[", 1512157148UL, 1522285852UL, "10.0.1.6" },
-  { "W2`P:-+1T[", 2945171975UL, 2946196424UL, "10.0.1.5" },
-  { "-6G7K^YDIN", 3168617340UL, 3170513015UL, "10.0.1.7" },
-  { "U>*>9ZI6V5", 668514946UL, 674097631UL, "10.0.1.6" },
+  { "`@L+W;a,O[", 1512157148UL, 1522285852UL, "10.0.1.5" },
+  { "W2`P:-+1T[", 2945171975UL, 2946196424UL, "10.0.1.7" },
+  { "-6G7K^YDIN", 3168617340UL, 3170513015UL, "10.0.1.5" },
+  { "U>*>9ZI6V5", 668514946UL, 674097631UL, "10.0.1.5" },
   { ".I?^6Ic9RK", 938419020UL, 942832691UL, "10.0.1.6" },
-  { "0OZH^9BKM[", 3682518606UL, 3686781297UL, "10.0.1.8" },
-  { "5?50UGZ:ML", 868610882UL, 869425986UL, "10.0.1.5" },
-  { "?K2NF@3=IU", 381218851UL, 383925769UL, "10.0.1.1" },
-  { "YI@G-2X?UB", 3688706179UL, 3693197681UL, "10.0.1.5" },
-  { "7cY</BSaL=", 3976870223UL, 3978903843UL, "10.0.1.6" },
+  { "0OZH^9BKM[", 3682518606UL, 3686781297UL, "10.0.1.2" },
+  { "5?50UGZ:ML", 868610882UL, 869425986UL, "10.0.1.6" },
+  { "?K2NF@3=IU", 381218851UL, 383925769UL, "10.0.1.6" },
+  { "YI@G-2X?UB", 3688706179UL, 3693197681UL, "10.0.1.6" },
+  { "7cY</BSaL=", 3976870223UL, 3978903843UL, "10.0.1.7" },
   { "A(`KF:[RH8", 3292979676UL, 3294849139UL, "10.0.1.6" },
-  { ";=ZT\\W^P+H", 1401102653UL, 1416290674UL, "10.0.1.4" },
-  { "b2?WFF56;R", 480494704UL, 486971192UL, "10.0.1.4" },
-  { "CTR74,J+N.", 137446045UL, 146633907UL, "10.0.1.8" },
+  { ";=ZT\\W^P+H", 1401102653UL, 1416290674UL, "10.0.1.6" },
+  { "b2?WFF56;R", 480494704UL, 486971192UL, "10.0.1.7" },
+  { "CTR74,J+N.", 137446045UL, 146633907UL, "10.0.1.7" },
   { "<b;*R+QDST", 1304985302UL, 1308223778UL, "10.0.1.5" },
-  { "\\R^7=9UCG`", 126218373UL, 129199837UL, "10.0.1.5" },
-  { "1bQS5]WOXB", 1853470245UL, 1855329369UL, "10.0.1.4" },
-  { "M(@X^b[L:K", 3019630308UL, 3022260113UL, "10.0.1.1" },
-  { "431cBF8,YO", 1679726993UL, 1685224295UL, "10.0.1.7" },
-  { "(bEIQJ:E./", 2922607787UL, 2925521819UL, "10.0.1.6" },
-  { "WS/3H*)7F;", 419488232UL, 422140585UL, "10.0.1.5" },
-  { "ZJF[Ia6Q)+", 3960568056UL, 3962489998UL, "10.0.1.7" },
-  { "<]*QCK8U,>", 2590140172UL, 2598117636UL, "10.0.1.7" },
-  { "\\[a\\^=V_M0", 689410119UL, 698690782UL, "10.0.1.6" },
+  { "\\R^7=9UCG`", 126218373UL, 129199837UL, "10.0.1.6" },
+  { "1bQS5]WOXB", 1853470245UL, 1855329369UL, "10.0.1.7" },
+  { "M(@X^b[L:K", 3019630308UL, 3022260113UL, "10.0.1.4" },
+  { "431cBF8,YO", 1679726993UL, 1685224295UL, "10.0.1.1" },
+  { "(bEIQJ:E./", 2922607787UL, 2925521819UL, "10.0.1.7" },
+  { "WS/3H*)7F;", 419488232UL, 422140585UL, "10.0.1.3" },
+  { "ZJF[Ia6Q)+", 3960568056UL, 3962489998UL, "10.0.1.5" },
+  { "<]*QCK8U,>", 2590140172UL, 2598117636UL, "10.0.1.5" },
+  { "\\[a\\^=V_M0", 689410119UL, 698690782UL, "10.0.1.7" },
   { "7;RM+8J9YC", 1530175299UL, 1531107082UL, "10.0.1.7" },
-  { "4*=.SPR[AV", 3928582722UL, 3928853792UL, "10.0.1.1" },
+  { "4*=.SPR[AV", 3928582722UL, 3928853792UL, "10.0.1.3" },
   { "-2F+^88P4U", 3023552752UL, 3025823613UL, "10.0.1.7" },
-  { "X;-F`(N?9D", 570465234UL, 572485994UL, "10.0.1.7" },
-  { "R=F_D-K2a]", 1287750228UL, 1290935562UL, "10.0.1.7" },
-  { "X*+2aaC.EG", 3200948713UL, 3201088518UL, "10.0.1.5" },
-  { "[1ZXONX2]a", 4108881567UL, 4109865744UL, "10.0.1.4" },
-  { "FL;\\GWacaV", 458449508UL, 467374054UL, "10.0.1.4" },
-  { "\\MQ_XNT7L-", 1259349383UL, 1259509450UL, "10.0.1.7" },
-  { "VD6D0]ba_\\", 3842502950UL, 3842588691UL, "10.0.1.1" },
+  { "X;-F`(N?9D", 570465234UL, 572485994UL, "10.0.1.5" },
+  { "R=F_D-K2a]", 1287750228UL, 1290935562UL, "10.0.1.1" },
+  { "X*+2aaC.EG", 3200948713UL, 3201088518UL, "10.0.1.3" },
+  { "[1ZXONX2]a", 4108881567UL, 4109865744UL, "10.0.1.7" },
+  { "FL;\\GWacaV", 458449508UL, 467374054UL, "10.0.1.7" },
+  { "\\MQ_XNT7L-", 1259349383UL, 1259509450UL, "10.0.1.5" },
+  { "VD6D0]ba_\\", 3842502950UL, 3842588691UL, "10.0.1.7" },
 };