[Sheepdog] [zookeeper][PATCH v2 02/11] Optimize the size of buffer send to zookeeper
Yunkai Zhang
yunkai.me at gmail.com
Thu Apr 26 17:21:21 CEST 2012
From: Yunkai Zhang <qiushu.zyk at taobao.com>
We send the whole buf[MAX_EVENT_BUF_SIZE] to zookeeper regardless the
real content is so small.
Now, we only send the real content in the buffer, not waste anymore.
Signed-off-by: Yunkai Zhang <qiushu.zyk at taobao.com>
---
sheep/cluster/zookeeper.c | 22 ++++++++++++----------
1 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/sheep/cluster/zookeeper.c b/sheep/cluster/zookeeper.c
index cd1e15f..f6823aa 100644
--- a/sheep/cluster/zookeeper.c
+++ b/sheep/cluster/zookeeper.c
@@ -54,9 +54,6 @@ struct zk_event {
enum zk_event_type type;
struct zk_node sender;
- size_t buf_len;
- uint8_t buf[MAX_EVENT_BUF_SIZE];
-
enum cluster_join_result join_result;
void (*block_cb)(void *arg);
@@ -65,6 +62,9 @@ struct zk_event {
int callbacked; /* set non-zero if sheep already called block_cb() */
struct list_head list; /* only used for leave event */
+
+ size_t buf_len;
+ uint8_t buf[MAX_EVENT_BUF_SIZE];
};
/* leave event list */
@@ -129,16 +129,17 @@ static int zk_queue_empty(zhandle_t *zh)
static int zk_queue_push(zhandle_t *zh, struct zk_event *ev)
{
- int rc, seq;
+ int rc, seq, len;
char path[256], buf[256];
eventfd_t value = 1;
+ len = (char *)(ev->buf) - (char *)ev + ev->buf_len;
sprintf(path, "%s/", QUEUE_ZNODE);
do{
dprintf("zoo_create ...\n");
- rc = zoo_create(zh, path, (char *)ev, sizeof(*ev),
+ rc = zoo_create(zh, path, (char *)ev, len,
&ZOO_OPEN_ACL_UNSAFE, ZOO_SEQUENCE, buf, sizeof(buf));
- dprintf("create path:%s, nr_nodes:%ld, queue_pos:%d, rc:%d\n", buf, nr_zk_nodes, queue_pos, rc);
+ dprintf("create path:%s, nr_nodes:%ld, queue_pos:%d, len:%d, rc:%d\n", buf, nr_zk_nodes, queue_pos, len, rc);
}while (rc == ZOPERATIONTIMEOUT);
if (rc != ZOK)
panic("failed to zoo_create path:%s, rc:%d\n", path, rc);
@@ -163,7 +164,7 @@ static int zk_queue_push(zhandle_t *zh, struct zk_event *ev)
static int zk_queue_push_back(zhandle_t *zh, struct zk_event *ev)
{
- int rc;
+ int rc, len;
char path[256];
queue_pos--;
@@ -172,9 +173,10 @@ static int zk_queue_push_back(zhandle_t *zh, struct zk_event *ev)
if (ev) {
/* update the last popped data */
+ len = (char *)(ev->buf) - (char *)ev + ev->buf_len;
sprintf(path, QUEUE_ZNODE "/%010d", queue_pos);
- rc = zoo_set(zh, path, (char *)ev, sizeof(*ev), -1);
- dprintf("update path:%s, queue_pos:%d, rc:%d\n", path, queue_pos, rc);
+ rc = zoo_set(zh, path, (char *)ev, len, -1);
+ dprintf("update path:%s, queue_pos:%d, len:%d, rc:%d\n", path, queue_pos, len, rc);
if (rc != ZOK)
panic("failed to zk_set path:%s, rc:%d\n", path, rc);
@@ -207,7 +209,7 @@ static int zk_queue_pop(zhandle_t *zh, struct zk_event *ev)
sprintf(path, QUEUE_ZNODE "/%010d", queue_pos);
do {
rc = zoo_get(zh, path, 1, (char *)ev, &len, NULL);
- dprintf("read path:%s, nr_nodes:%ld, type:%d, rc:%d\n", path, nr_zk_nodes, ev->type, rc);
+ dprintf("read path:%s, nr_nodes:%ld, type:%d, len:%d, rc:%d\n", path, nr_zk_nodes, ev->type, len, rc);
}while(rc == ZOPERATIONTIMEOUT);
if (rc != ZOK)
panic("failed to zk_set path:%s, rc:%d\n", path, rc);
--
1.7.7.6
More information about the sheepdog
mailing list