[Sheepdog] [PATCH] sheep: fix cluster_info update
MORITA Kazutaka
morita.kazutaka at lab.ntt.co.jp
Fri May 21 10:26:32 CEST 2010
What we want to do here are:
1. When sheepdog is already running
- increment epoch
- write node list information to the local store
2. Otherwise
- get vdi bitmap from other nodes
- update cluster information in the local store
Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
---
sheep/group.c | 32 +++++++++++++++++---------------
1 files changed, 17 insertions(+), 15 deletions(-)
diff --git a/sheep/group.c b/sheep/group.c
index 752baff..dbe3141 100644
--- a/sheep/group.c
+++ b/sheep/group.c
@@ -629,21 +629,23 @@ out:
msg->header.nodeid, msg->header.pid);
if (msg->cluster_status == SD_STATUS_OK) {
- nr_nodes = get_ordered_sd_node_list(entry);
-
- dprintf("update epoch, %d, %d\n", sys->epoch + 1, nr_nodes);
- ret = epoch_log_write(sys->epoch + 1, (char *)entry,
- nr_nodes * sizeof(struct sheepdog_node_list_entry));
- if (ret < 0)
- eprintf("can't write epoch %u\n", sys->epoch + 1);
+ if (sys->status == SD_STATUS_OK) {
+ nr_nodes = get_ordered_sd_node_list(entry);
- sys->epoch++;
+ dprintf("update epoch, %d, %d\n", sys->epoch + 1, nr_nodes);
+ ret = epoch_log_write(sys->epoch + 1, (char *)entry,
+ nr_nodes * sizeof(struct sheepdog_node_list_entry));
+ if (ret < 0)
+ eprintf("can't write epoch %u\n", sys->epoch + 1);
- update_epoch_store(sys->epoch);
+ sys->epoch++;
- get_vdi_bitmap_from_all();
- set_global_nr_copies(sys->nr_sobjs);
- set_cluster_ctime(msg->ctime);
+ update_epoch_store(sys->epoch);
+ } else {
+ get_vdi_bitmap_from_all();
+ set_global_nr_copies(sys->nr_sobjs);
+ set_cluster_ctime(msg->ctime);
+ }
}
print_node_list(&sys->sd_node_list);
--
1.5.6.5
More information about the sheepdog
mailing list