[Sheepdog] [PATCH 1/2] sheep: avoid extra log reading if system status is not okay
Liu Yuan
namei.unix at gmail.com
Fri Sep 23 08:36:10 CEST 2011
From: Liu Yuan <tailai.ly at taobao.com>
When we query the cluster info, we don't have to do extra log reading
if system status is not okay. This patch fixes it.
Signed-off-by: Liu Yuan <tailai.ly at taobao.com>
---
sheep/group.c | 43 +++++++++++++++++++++----------------------
1 files changed, 21 insertions(+), 22 deletions(-)
diff --git a/sheep/group.c b/sheep/group.c
index 9d05fdd..1d02971 100644
--- a/sheep/group.c
+++ b/sheep/group.c
@@ -294,30 +294,29 @@ void cluster_queue_request(struct work *work, int idx)
(struct sd_node_rsp *)rsp, req->data);
break;
case SD_OP_STAT_CLUSTER:
- max_logs = rsp->data_length / sizeof(*log);
- epoch = get_latest_epoch();
- rsp->data_length = 0;
- for (i = 0; i < max_logs; i++) {
- if (epoch <= 0)
- break;
-
- log = (struct epoch_log *)req->data + i;
- log->epoch = epoch;
- log->ctime = get_cluster_ctime();
- log->nr_nodes = epoch_log_read(epoch, (char *)log->nodes,
- sizeof(log->nodes));
- if (log->nr_nodes == -1)
- log->nr_nodes = epoch_log_read_remote(epoch,
- (char *)log->nodes,
- sizeof(log->nodes));
-
- rsp->data_length += sizeof(*log);
- log->nr_nodes /= sizeof(log->nodes[0]);
- epoch--;
- }
-
switch (sys->status) {
case SD_STATUS_OK:
+ max_logs = rsp->data_length / sizeof(*log);
+ epoch = get_latest_epoch();
+ rsp->data_length = 0;
+ for (i = 0; i < max_logs; i++) {
+ if (epoch <= 0)
+ break;
+
+ log = (struct epoch_log *)req->data + i;
+ log->epoch = epoch;
+ log->ctime = get_cluster_ctime();
+ log->nr_nodes = epoch_log_read(epoch, (char *)log->nodes,
+ sizeof(log->nodes));
+ if (log->nr_nodes == -1)
+ log->nr_nodes = epoch_log_read_remote(epoch,
+ (char *)log->nodes,
+ sizeof(log->nodes));
+
+ rsp->data_length += sizeof(*log);
+ log->nr_nodes /= sizeof(log->nodes[0]);
+ epoch--;
+ }
ret = SD_RES_SUCCESS;
break;
case SD_STATUS_WAIT_FOR_FORMAT:
--
1.7.6.1
More information about the sheepdog
mailing list