static void update_cluster_info(struct join_message *msg, struct sd_node *joined, struct sd_node *nodes, size_t nr_nodes) { eprintf("status = %d, epoch = %d, %x, %d\n", msg->cluster_status, msg->epoch, msg->result, sys->join_finished); if (sys_stat_join_failed()) return; if (!sys->join_finished) finish_join(msg, joined, nodes, nr_nodes); sys->nodes[sys->nr_nodes++] = *joined; qsort(sys->nodes, sys->nr_nodes, sizeof(*sys->nodes), node_cmp); if (msg->cluster_status == SD_STATUS_OK || msg->cluster_status == SD_STATUS_HALT) { if (msg->inc_epoch) { sys->epoch++; update_epoch_log(sys->epoch); update_epoch_store(sys->epoch); } /* Fresh node */ if (!sys_stat_ok() && !sys_stat_halt()) { set_cluster_copies(sys->nr_copies); set_cluster_flags(sys->flags); set_cluster_ctime(msg->ctime); } } update_vnode_info(); sys_stat_set(msg->cluster_status); print_node_list(sys->nodes, sys->nr_nodes); }
static void update_cluster_info(struct join_message *msg, struct sd_node *joined, struct sd_node *nodes, size_t nr_nodes) { struct vnode_info *old_vnode_info = NULL; eprintf("status = %d, epoch = %d, finished: %d\n", msg->cluster_status, msg->epoch, sys->join_finished); sys->disable_recovery = msg->disable_recovery; if (!sys->join_finished) finish_join(msg, joined, nodes, nr_nodes); if (!sys->disable_recovery) { old_vnode_info = current_vnode_info; current_vnode_info = alloc_vnode_info(nodes, nr_nodes); } switch (msg->cluster_status) { case SD_STATUS_OK: case SD_STATUS_HALT: switch (sys->status) { case SD_STATUS_WAIT_FOR_FORMAT: sys->nr_copies = msg->nr_copies; sys->flags = msg->cluster_flags; set_cluster_copies(sys->nr_copies); set_cluster_flags(sys->flags); set_cluster_ctime(msg->ctime); /*FALLTHROUGH*/ case SD_STATUS_WAIT_FOR_JOIN: get_vdi_bitmap(nodes, nr_nodes); break; default: break; } sys->status = msg->cluster_status; if (msg->inc_epoch) { if (!sys->disable_recovery) { uatomic_inc(&sys->epoch); log_current_epoch(); clear_exceptional_node_lists(); if (!old_vnode_info) { old_vnode_info = alloc_old_vnode_info(joined, nodes, nr_nodes); } start_recovery(current_vnode_info, old_vnode_info); } else prepare_recovery(joined, nodes, nr_nodes); } if (have_enough_zones()) sys->status = SD_STATUS_OK; break; default: sys->status = msg->cluster_status; break; } put_vnode_info(old_vnode_info); sockfd_cache_add(&joined->nid); }