[Sheepdog] [PATCH] sheep: remove unregister_event from process_event_queue()
Christoph Hellwig
hch at infradead.org
Tue May 15 21:55:22 CEST 2012
On Wed, May 16, 2012 at 01:54:06AM +0800, Yunkai Zhang wrote:
> +static void get_vdi_bitmap_from_sd_list(struct sd_node *nodes, size_t nr_nodes)
> {
> int i;
> /* fixme: we need this until starting up. */
>
> - for (i = 0; i < sys->nr_nodes; i++)
> - get_vdi_bitmap_from(sys->nodes + i);
> + for (i = 0; i < nr_nodes; i++)
> + get_vdi_bitmap_from(nodes + i);
> }
I'd suggest to simply kill get_vdi_bitmap_from_sd_list and opencode it
in __sd_join to make the code cleaner.
> /*
> + * w->member_list contains joining node, we should
> + * exclude it in following operation.
> + */
> + for (i = 0, nr_nodes = 0; i < w->member_list_entries; i++) {
> + if (node_eq(w->member_list + i, &w->joined))
> + continue;
> + nodes[nr_nodes++] = w->member_list[i];
> + }
> +
> + /*
> * If a new comer try to join the running cluster, it only need read
> * one copy of bitmap from the first member.
> */
> if (sys_stat_wait_format())
> - get_vdi_bitmap_from(w->member_list);
> + get_vdi_bitmap_from(nodes);
> else {
> - get_vdi_bitmap_from_sd_list();
> + get_vdi_bitmap_from_sd_list(nodes, nr_nodes);
> for (i = 0; i < w->member_list_entries; i++)
> get_vdi_bitmap_from(w->member_list + i);
The else clause here iterates over member_list_entries twice, also
why create the local nodes array if we could simplify skip it in
the for loop. E.g. why not:
for (i = 0; i < w->member_list_entries; i++) {
if (node_eq(&w->member_list[i], &w->joined))
continue;
get_vdi_bitmap_from(&w->member_list[i]);
/*
* A newly joining node only needs to read a copy of the
* bitmap from one single member node.
*/
if (sys_stat_wait_format())
break;
}
> + if (result == CJ_RES_SUCCESS || result == CJ_RES_MASTER_TRANSFER)
> + update_cluster_info(jm, joined, members, nr_members);
> +
Previously we would only queue up an event for the CJ_RES_SUCCESS case,
while the CJ_RES_MASTER_TRANSFER case handles the updates itself already,
I think with your patch CJ_RES_MASTER_TRANSFER is handled twice now.
More information about the sheepdog
mailing list