From: Liu Yuan <tailai...@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...@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

-- 
sheepdog mailing list
sheepdog@lists.wpkg.org
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to