From: HaiTing Yao <wujue.yht at taobao.com> Initialize the recovery work, no need to read current nodes from disk. Signed-off-by: HaiTing Yao <wujue.yht at taobao.com> --- sheep/recovery.c | 17 ++++++++++++----- 1 files changed, 12 insertions(+), 5 deletions(-) difference from v1 use vnodes_info, not use sd_vnodes any more diff --git a/sheep/recovery.c b/sheep/recovery.c index d5408e3..8da03b1 100644 --- a/sheep/recovery.c +++ b/sheep/recovery.c @@ -643,10 +643,18 @@ static int init_rw(struct recovery_work *rw) { uint32_t epoch = rw->epoch; - rw->cur_nr_nodes = epoch_log_read_nr(epoch, (char *)rw->cur_nodes, - sizeof(rw->cur_nodes)); - qsort(rw->cur_nodes, rw->cur_nr_nodes, sizeof(struct sd_node), - node_cmp); + if (epoch == sys_epoch()) { + rw->cur_nr_nodes = sys->nr_nodes; + memcpy(rw->cur_nodes, sys->nodes, sizeof(rw->cur_nodes)); + rw->cur_vnodes = get_vnode_info(); + } else { + rw->cur_nr_nodes = epoch_log_read_nr(epoch, + (char *)rw->cur_nodes, sizeof(rw->cur_nodes)); + qsort(rw->cur_nodes, rw->cur_nr_nodes, sizeof(struct sd_node), + node_cmp); + rw->cur_vnodes = alloc_vnode_info(rw->cur_nodes, + rw->cur_nr_nodes); + } if (rw->cur_nr_nodes <= 0) { eprintf("failed to read epoch log for epoch %"PRIu32"\n", epoch); @@ -663,7 +671,6 @@ static int init_rw(struct recovery_work *rw) node_cmp); rw->old_vnodes = alloc_vnode_info(rw->old_nodes, rw->old_nr_nodes); - rw->cur_vnodes = alloc_vnode_info(rw->cur_nodes, rw->cur_nr_nodes); return 0; } -- 1.7.1 |