[PATCH] Fix binary protocol set() to return extra data as described
in the documentation. (fwd)
Todd Lipcon
todd at amiestreet.com
Thu Apr 3 09:09:37 UTC 2008
Take two at getting this through to the list... email on my laptop seems
uncooperative.
=========
Tests: binary.t still passes. Should probably add binary.t test which exposes earlier bug.
---
server/memcached.c | 15 ++++++++++++++-
1 files changed, 14 insertions(+), 1 deletions(-)
diff --git a/server/memcached.c b/server/memcached.c
index b8d4968..2fb2572 100644
--- a/server/memcached.c
+++ b/server/memcached.c
@@ -1037,6 +1037,8 @@ static void complete_update_bin(conn *c) {
assert(c != NULL);
item *it = c->item;
+ uint64_t *identifier;
+ uint8_t *response_buf = c->wbuf + MIN_BIN_PKT_LENGTH;
STATS_LOCK();
stats.set_cmds++;
@@ -1050,7 +1052,18 @@ static void complete_update_bin(conn *c) {
switch (store_item(it, c->item_comm)) {
case 1:
/* Stored */
- write_bin_response(c, NULL, BIN_SET_HDR_LEN, 0);
+ add_bin_header(c, 0, BIN_SET_HDR_LEN, BIN_SET_HDR_LEN);
+
+ /* copy requested flags and expiration */
+ memcpy(response_buf + 8, c->rbuf + 8, BIN_SET_HDR_LEN - 8);
+
+ /* replace cas with new cas */
+ identifier = (uint64_t *)(response_buf);
+ *identifier = swap64(it->cas_id);
+
+ add_iov(c, response_buf, BIN_SET_HDR_LEN);
+ conn_set_state(c, conn_mwrite);
+ c->write_and_go = conn_new_cmd;
break;
case 2:
write_bin_error(c, ERR_EXISTS, 0);
--
1.5.3.2
More information about the memcached
mailing list