Merge lp:~mkoppanen/libmemcached/replication-miss-test into lp:~tangent-org/libmemcached/trunk

Proposed by mikko
Status: Needs review
Proposed branch: lp:~mkoppanen/libmemcached/replication-miss-test
Merge into: lp:~tangent-org/libmemcached/trunk
Diff against target: 78 lines (+61/-0)
1 file modified
tests/mem_functions.c (+61/-0)
To merge this branch: bzr merge lp:~mkoppanen/libmemcached/replication-miss-test
Reviewer Review Type Date Requested Status
Libmemcached-developers Pending
Review via email: mp+19058@code.launchpad.net
To post a comment you must log in.
Revision history for this message
mikko (mkoppanen) wrote :

Hi, here is a test for replication misses. The comments should explain it but if you have issues let me know

Unmerged revisions

778. By Mikko Koppanen <email address hidden>

added test

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'tests/mem_functions.c'
--- tests/mem_functions.c 2010-01-22 22:41:53 +0000
+++ tests/mem_functions.c 2010-02-10 21:56:15 +0000
@@ -4439,6 +4439,66 @@
4439 return TEST_SUCCESS;4439 return TEST_SUCCESS;
4440}4440}
44414441
4442/* Test that single miss does not cause replica reads to fail */
4443static test_return_t replication_miss_test(memcached_st *memc)
4444{
4445 memcached_return_t rc;
4446 memcached_st *memc_repl= memcached_clone(NULL, memc);
4447 memcached_st *memc_single= memcached_clone(NULL, memc);
4448
4449 char *v;
4450 const char *key = "hello_w_k";
4451 const char *value = "my_value";
4452 size_t vlen;
4453 uint32_t flags;
4454
4455 /* this test makes sense only with 2 or more servers */
4456 test_true(memcached_server_count(memc_repl) > 1);
4457
4458 /* Consistent hash */
4459 memcached_behavior_set(memc_repl, MEMCACHED_DISTRIBUTION_CONSISTENT, 1);
4460 memcached_behavior_set(memc_single, MEMCACHED_DISTRIBUTION_CONSISTENT, 1);
4461
4462 /* The first clone writes to all servers */
4463 memcached_behavior_set(memc_repl, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1);
4464 memcached_behavior_set(memc_repl, MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS,
4465 memcached_server_count(memc_repl));
4466
4467 /* Write to servers */
4468 rc= memcached_set(memc_repl, key, strlen(key),
4469 value, strlen(value),
4470 (time_t)1200, (uint32_t)0);
4471 test_true(rc == MEMCACHED_SUCCESS || rc == MEMCACHED_BUFFERED);
4472
4473 /* Use the second clone to remove the key from primary server.
4474 This should remove the key from only one server */
4475 rc= memcached_delete(memc_single, key, strlen(key), 0);
4476 test_true(rc == MEMCACHED_SUCCESS || rc == MEMCACHED_BUFFERED);
4477
4478 /* Remove the server where the key was deleted */
4479 memcached_server_st *instance= memcached_server_by_key(memc_single, key, strlen(key), &rc);
4480 test_true(rc == MEMCACHED_SUCCESS);
4481 rc= memcached_server_remove(instance);
4482 test_true(rc == MEMCACHED_SUCCESS);
4483
4484 /* Test that others still have it */
4485 v= memcached_get(memc_single, key, strlen(key), &vlen, &flags, &rc);
4486 test_true(rc == MEMCACHED_SUCCESS || rc == MEMCACHED_BUFFERED);
4487 test_true(v && strcmp(v, value) == 0);
4488 free(v);
4489
4490 /* This read should still return the value as we have it on other servers */
4491 v= memcached_get(memc_repl, key, strlen(key), &vlen, &flags, &rc);
4492 test_true(rc == MEMCACHED_SUCCESS || rc == MEMCACHED_BUFFERED);
4493 test_true(v && strcmp(v, value) == 0);
4494 free(v);
4495
4496 memcached_free(memc_repl);
4497 memcached_free(memc_single);
4498
4499 return TEST_SUCCESS;
4500}
4501
4442static test_return_t replication_delete_test(memcached_st *memc)4502static test_return_t replication_delete_test(memcached_st *memc)
4443{4503{
4444 memcached_return_t rc;4504 memcached_return_t rc;
@@ -5995,6 +6055,7 @@
5995 {"set", 1, (test_callback_fn)replication_set_test },6055 {"set", 1, (test_callback_fn)replication_set_test },
5996 {"get", 0, (test_callback_fn)replication_get_test },6056 {"get", 0, (test_callback_fn)replication_get_test },
5997 {"mget", 0, (test_callback_fn)replication_mget_test },6057 {"mget", 0, (test_callback_fn)replication_mget_test },
6058 {"miss", 0, (test_callback_fn)replication_miss_test},
5998 {"delete", 0, (test_callback_fn)replication_delete_test },6059 {"delete", 0, (test_callback_fn)replication_delete_test },
5999 {"rand_mget", 0, (test_callback_fn)replication_randomize_mget_test },6060 {"rand_mget", 0, (test_callback_fn)replication_randomize_mget_test },
6000 {0, 0, (test_callback_fn)0}6061 {0, 0, (test_callback_fn)0}

Subscribers

People subscribed via source and target branches

to all changes: