From: levin li <xingke.lwp at taobao.com> We can sort the old node list before recovery start, then we can use binary search in newly_joined() to make it faster. Signed-off-by: levin li <xingke.lwp at taobao.com> --- sheep/recovery.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/sheep/recovery.c b/sheep/recovery.c index 3fb34c0..6c00738 100644 --- a/sheep/recovery.c +++ b/sheep/recovery.c @@ -596,14 +596,10 @@ static int newly_joined(struct sd_node *node, struct recovery_work *rw) { struct sd_node *old = rw->old_nodes; int old_nr = rw->old_nr_nodes; - int i; - for (i = 0; i < old_nr; i++) - if (node_cmp(node, old + i) == 0) - break; - if (i == old_nr) - return 1; - return 0; + if (bsearch(node, old, old_nr, sizeof(struct sd_node), node_cmp)) + return 0; + return 1; } static int fill_obj_list(struct recovery_work *rw) @@ -689,6 +685,9 @@ static int init_rw(struct recovery_work *rw) eprintf("failed to read epoch log for epoch %"PRIu32"\n", epoch - 1); return -1; } + qsort(rw->old_nodes, rw->old_nr_nodes, sizeof(struct sd_node), + node_cmp); + rw->old_nr_vnodes = nodes_to_vnodes(rw->old_nodes, rw->old_nr_nodes, rw->old_vnodes); rw->cur_nr_vnodes = nodes_to_vnodes(rw->cur_nodes, rw->cur_nr_nodes, -- 1.7.10 |