static void finish_join(struct join_message *msg, struct sd_node *joined, struct sd_node *nodes, size_t nr_nodes) { sys->join_finished = 1; sys->epoch = msg->epoch; if (msg->cluster_status != SD_STATUS_OK) update_exceptional_node_list(get_latest_epoch(), msg); /* We don't need backend for gateway-only node */ if (!sys->gateway_only && !sd_store && strlen((char *)msg->store)) { sd_store = find_store_driver((char *)msg->store); if (sd_store) { if (sd_store->init(obj_path) != SD_RES_SUCCESS) panic("failed to initialize store\n"); if (set_cluster_store(sd_store->name) != SD_RES_SUCCESS) panic("failed to store into config file\n"); } else panic("backend store %s not supported\n", msg->store); } /* We need to purge the stale objects for sheep joining back * after crash */ if (msg->inc_epoch) if (!sys->gateway_only && sd_store->purge_obj && sd_store->purge_obj() != SD_RES_SUCCESS) panic("can't remove stale objects\n"); sockfd_cache_add_group(nodes, nr_nodes); }
static int farm_format(struct siocb *iocb) { char path[PATH_MAX]; unsigned ret; const uint8_t name[] = "farm"; dprintf("try get a clean store\n"); snprintf(path, sizeof(path), "%s", obj_path); ret = rmdir_r(path); if (ret && ret != -ENOENT) { eprintf("failed to remove %s: %s\n", path, strerror(-ret)); return SD_RES_EIO; } if (mkdir(path, def_dmode) < 0) { eprintf("%m\n"); return SD_RES_EIO; } if (set_cluster_store(name) < 0) return SD_RES_EIO; trunk_reset(); return SD_RES_SUCCESS; }
static void finish_join(struct join_message *msg, struct sd_node *joined, struct sd_node *nodes, size_t nr_nodes) { int i; sys->nr_copies = msg->nr_copies; sys->epoch = msg->epoch; /* add nodes execept for newly joined one */ for (i = 0; i < nr_nodes; i++) { if (node_eq(nodes + i, joined)) continue; sys->nodes[sys->nr_nodes++] = nodes[i]; } qsort(sys->nodes, sys->nr_nodes, sizeof(*sys->nodes), node_cmp); if (msg->cluster_status != SD_STATUS_OK) { int nr_leave_nodes; uint32_t le; nr_leave_nodes = msg->nr_leave_nodes; le = get_latest_epoch(); for (i = 0; i < nr_leave_nodes; i++) { struct node *n; if (find_entry_list(&msg->leave_nodes[i], &sys->leave_list) || !find_entry_epoch(&msg->leave_nodes[i], le)) { continue; } n = zalloc(sizeof(*n)); if (!n) panic("failed to allocate memory\n"); n->ent = msg->leave_nodes[i]; list_add_tail(&n->list, &sys->leave_list); } } sys->join_finished = 1; if ((msg->cluster_status == SD_STATUS_OK || msg->cluster_status == SD_STATUS_HALT) && msg->inc_epoch) update_epoch_log(sys->epoch); if (!sd_store && strlen((char *)msg->store)) { sd_store = find_store_driver((char *)msg->store); if (sd_store) { sd_store->init(obj_path); if (set_cluster_store(sd_store->name) != SD_RES_SUCCESS) panic("failed to store into config file\n"); } else panic("backend store %s not supported\n", msg->store); } }