From: Liu Yuan <[email protected]>

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 <[email protected]>
---
 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

-- 
sheepdog mailing list
[email protected]
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to