From 6d2085143a37b6f765ce2a260f0316f24b043a80 Mon Sep 17 00:00:00 2001 From: Raghavendra G Date: Wed, 1 Jul 2015 16:54:55 +0530 Subject: [PATCH 198/200] protocol/server: fail setvolume if any of xlators is not initialized yet We can only start recieving fops only when all xlators in graph are initialized. upstream-patch: http://review.gluster.org/#/c/11490/1 Change-Id: Id79100bab5878bb2518ed133c1118554fbb35229 BUG: 1235735 Signed-off-by: Raghavendra G Reviewed-on: https://code.engineering.redhat.com/gerrit/52206 --- xlators/protocol/server/src/server-handshake.c | 17 +++++++++++++++++ xlators/protocol/server/src/server.c | 11 +++++++++++ xlators/protocol/server/src/server.h | 2 ++ 3 files changed, 30 insertions(+), 0 deletions(-) diff --git a/xlators/protocol/server/src/server-handshake.c b/xlators/protocol/server/src/server-handshake.c index 556b0e2..4aaa933 100644 --- a/xlators/protocol/server/src/server-handshake.c +++ b/xlators/protocol/server/src/server-handshake.c @@ -372,6 +372,23 @@ server_setvolume (rpcsvc_request_t *req) config_params = dict_copy_with_ref (this->options, NULL); conf = this->private; + if (conf->parent_up == _gf_false) { + /* PARENT_UP indicates that all xlators in graph are inited + * successfully + */ + op_ret = -1; + op_errno = EAGAIN; + + ret = dict_set_str (reply, "ERROR", + "xlator graph in server is not initialised " + "yet. Try again later"); + if (ret < 0) + gf_msg_debug (this->name, 0, "failed to set error: " + "xlator graph in server is not " + "initialised yet. Try again later"); + goto fail; + } + buf = memdup (args.dict.dict_val, args.dict.dict_len); if (buf == NULL) { op_ret = -1; diff --git a/xlators/protocol/server/src/server.c b/xlators/protocol/server/src/server.c index 9e644df..9c10a50 100644 --- a/xlators/protocol/server/src/server.c +++ b/xlators/protocol/server/src/server.c @@ -1188,6 +1188,7 @@ notify (xlator_t *this, int32_t event, void *data, ...) int32_t val = 0; dict_t *dict = NULL; dict_t *output = NULL; + server_conf_t *conf = NULL; va_list ap; dict = data; @@ -1208,6 +1209,16 @@ notify (xlator_t *this, int32_t event, void *data, ...) } break; } + + case GF_EVENT_PARENT_UP: + { + conf = this->private; + + conf->parent_up = _gf_true; + + /* fall through and notify the event to children */ + } + default: default_notify (this, event, data); break; diff --git a/xlators/protocol/server/src/server.h b/xlators/protocol/server/src/server.h index dc64edd..6caf449 100644 --- a/xlators/protocol/server/src/server.h +++ b/xlators/protocol/server/src/server.h @@ -66,6 +66,8 @@ struct server_conf { int event_threads; /* # of event threads * configured */ + + gf_boolean_t parent_up; }; typedef struct server_conf server_conf_t; -- 1.7.1