From: Liu Yuan <tailai.ly at taobao.com> Gateway-only node doesn't need backend at all, and we can restart it as gateway node (has backend) again. Signed-off-by: Liu Yuan <tailai.ly at taobao.com> --- sheep/group.c | 9 ++++++--- sheep/sheep.c | 2 ++ sheep/sheep_priv.h | 1 + sheep/store.c | 8 +++++--- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/sheep/group.c b/sheep/group.c index 4f9d196..f67600f 100644 --- a/sheep/group.c +++ b/sheep/group.c @@ -754,21 +754,24 @@ static void finish_join(struct join_message *msg, struct sd_node *joined, if (msg->cluster_status != SD_STATUS_OK) update_exceptional_node_list(get_latest_epoch(), msg); - if (!sd_store && strlen((char *)msg->store)) { + /* 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) { 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); + 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 (sd_store->purge_obj && + if (!sys->gateway_only && + sd_store->purge_obj && sd_store->purge_obj() != SD_RES_SUCCESS) panic("can't remove stale objects\n"); diff --git a/sheep/sheep.c b/sheep/sheep.c index b3a12e3..2e208de 100644 --- a/sheep/sheep.c +++ b/sheep/sheep.c @@ -243,6 +243,8 @@ int main(int argc, char **argv) break; } } + if (nr_vnodes == 0) + sys->gateway_only = 1; if (optind != argc) dir = argv[optind]; diff --git a/sheep/sheep_priv.h b/sheep/sheep_priv.h index 7e89d7b..116be97 100644 --- a/sheep/sheep_priv.h +++ b/sheep/sheep_priv.h @@ -115,6 +115,7 @@ struct cluster_info { uint32_t recovered_epoch; int use_directio; + uint8_t gateway_only; struct work_queue *gateway_wqueue; struct work_queue *io_wqueue; diff --git a/sheep/store.c b/sheep/store.c index 17c2933..a05822d 100644 --- a/sheep/store.c +++ b/sheep/store.c @@ -467,9 +467,11 @@ int init_store(const char *d, int enable_write_cache) if (ret) return ret; - ret = init_store_driver(); - if (ret) - return ret; + if (!sys->gateway_only) { + ret = init_store_driver(); + if (ret) + return ret; + } if (enable_write_cache) { sys->enable_write_cache = 1; -- 1.7.10.2 |