diff options
Diffstat (limited to 'xlators/protocol/client/src/client-callback.c')
-rw-r--r-- | xlators/protocol/client/src/client-callback.c | 447 |
1 files changed, 241 insertions, 206 deletions
diff --git a/xlators/protocol/client/src/client-callback.c b/xlators/protocol/client/src/client-callback.c index b2f9a225887..352a1130e14 100644 --- a/xlators/protocol/client/src/client-callback.c +++ b/xlators/protocol/client/src/client-callback.c @@ -14,277 +14,312 @@ #include "client-messages.h" int -client_cbk_null (struct rpc_clnt *rpc, void *mydata, void *data) +client_cbk_null(struct rpc_clnt *rpc, void *mydata, void *data) { - gf_msg (THIS->name, GF_LOG_WARNING, 0, PC_MSG_FUNCTION_CALL_ERROR, - "this function should not be called"); - return 0; + gf_msg(THIS->name, GF_LOG_WARNING, 0, PC_MSG_FUNCTION_CALL_ERROR, + "this function should not be called"); + return 0; } int -client_cbk_fetchspec (struct rpc_clnt *rpc, void *mydata, void *data) +client_cbk_fetchspec(struct rpc_clnt *rpc, void *mydata, void *data) { - gf_msg (THIS->name, GF_LOG_WARNING, 0, PC_MSG_FUNCTION_CALL_ERROR, - "this function should not be called"); - return 0; + gf_msg(THIS->name, GF_LOG_WARNING, 0, PC_MSG_FUNCTION_CALL_ERROR, + "this function should not be called"); + return 0; } int -client_cbk_ino_flush (struct rpc_clnt *rpc, void *mydata, void *data) +client_cbk_ino_flush(struct rpc_clnt *rpc, void *mydata, void *data) { - gf_msg (THIS->name, GF_LOG_WARNING, 0, PC_MSG_FUNCTION_CALL_ERROR, - "this function should not be called"); - return 0; + gf_msg(THIS->name, GF_LOG_WARNING, 0, PC_MSG_FUNCTION_CALL_ERROR, + "this function should not be called"); + return 0; } int -client_cbk_recall_lease (struct rpc_clnt *rpc, void *mydata, void *data) +client_cbk_recall_lease(struct rpc_clnt *rpc, void *mydata, void *data) { - int ret = -1; - struct iovec *iov = NULL; - struct gf_upcall upcall_data = {0,}; - struct gf_upcall_recall_lease rl_data = {0,}; - gfs3_recall_lease_req recall_lease = {{0,},}; - - GF_VALIDATE_OR_GOTO ("client-callback", rpc, out); - GF_VALIDATE_OR_GOTO ("client-callback", mydata, out); - GF_VALIDATE_OR_GOTO ("client-callback", data, out); - - iov = (struct iovec *)data; - ret = xdr_to_generic (*iov, &recall_lease, - (xdrproc_t)xdr_gfs3_recall_lease_req); - - if (ret < 0) { - gf_msg (THIS->name, GF_LOG_WARNING, -ret, - PC_MSG_RECALL_LEASE_FAIL, - "XDR decode of recall lease failed."); - goto out; - } - - upcall_data.data = &rl_data; - ret = gf_proto_recall_lease_to_upcall (&recall_lease, &upcall_data); - if (ret < 0) - goto out; - - upcall_data.event_type = GF_UPCALL_RECALL_LEASE; - - gf_msg_trace (THIS->name, 0, "Upcall gfid = %s, ret = %d", - recall_lease.gfid, ret); - - default_notify (THIS, GF_EVENT_UPCALL, &upcall_data); + int ret = -1; + struct iovec *iov = NULL; + struct gf_upcall upcall_data = { + 0, + }; + struct gf_upcall_recall_lease rl_data = { + 0, + }; + gfs3_recall_lease_req recall_lease = { + { + 0, + }, + }; + + GF_VALIDATE_OR_GOTO("client-callback", rpc, out); + GF_VALIDATE_OR_GOTO("client-callback", mydata, out); + GF_VALIDATE_OR_GOTO("client-callback", data, out); + + iov = (struct iovec *)data; + ret = xdr_to_generic(*iov, &recall_lease, + (xdrproc_t)xdr_gfs3_recall_lease_req); + + if (ret < 0) { + gf_msg(THIS->name, GF_LOG_WARNING, -ret, PC_MSG_RECALL_LEASE_FAIL, + "XDR decode of recall lease failed."); + goto out; + } + + upcall_data.data = &rl_data; + ret = gf_proto_recall_lease_to_upcall(&recall_lease, &upcall_data); + if (ret < 0) + goto out; + + upcall_data.event_type = GF_UPCALL_RECALL_LEASE; + + gf_msg_trace(THIS->name, 0, "Upcall gfid = %s, ret = %d", recall_lease.gfid, + ret); + + default_notify(THIS, GF_EVENT_UPCALL, &upcall_data); out: - if (recall_lease.xdata.xdata_val) - free (recall_lease.xdata.xdata_val); + if (recall_lease.xdata.xdata_val) + free(recall_lease.xdata.xdata_val); - if (rl_data.dict) - dict_unref (rl_data.dict); + if (rl_data.dict) + dict_unref(rl_data.dict); - return ret; + return ret; } - int -client_cbk_cache_invalidation (struct rpc_clnt *rpc, void *mydata, void *data) +client_cbk_cache_invalidation(struct rpc_clnt *rpc, void *mydata, void *data) { - int ret = -1; - struct iovec *iov = NULL; - struct gf_upcall upcall_data = {0,}; - struct gf_upcall_cache_invalidation ca_data = {0,}; - gfs3_cbk_cache_invalidation_req ca_req = {0,}; - - gf_msg_trace (THIS->name, 0, "Upcall callback is called"); - - if (!rpc || !mydata || !data) - goto out; - - iov = (struct iovec *)data; - ret = xdr_to_generic (*iov, &ca_req, - (xdrproc_t)xdr_gfs3_cbk_cache_invalidation_req); - - if (ret < 0) { - gf_msg (THIS->name, GF_LOG_WARNING, -ret, - PC_MSG_CACHE_INVALIDATION_FAIL, - "XDR decode of cache_invalidation failed."); - goto out; - } - - upcall_data.data = &ca_data; - ret = gf_proto_cache_invalidation_to_upcall (THIS, &ca_req, - &upcall_data); - if (ret < 0) - goto out; - - gf_msg_trace (THIS->name, 0, "Cache invalidation cbk received for gfid:" - " %s, ret = %d", ca_req.gfid, ret); - - default_notify (THIS, GF_EVENT_UPCALL, &upcall_data); + int ret = -1; + struct iovec *iov = NULL; + struct gf_upcall upcall_data = { + 0, + }; + struct gf_upcall_cache_invalidation ca_data = { + 0, + }; + gfs3_cbk_cache_invalidation_req ca_req = { + 0, + }; + + gf_msg_trace(THIS->name, 0, "Upcall callback is called"); + + if (!rpc || !mydata || !data) + goto out; + + iov = (struct iovec *)data; + ret = xdr_to_generic(*iov, &ca_req, + (xdrproc_t)xdr_gfs3_cbk_cache_invalidation_req); + + if (ret < 0) { + gf_msg(THIS->name, GF_LOG_WARNING, -ret, PC_MSG_CACHE_INVALIDATION_FAIL, + "XDR decode of cache_invalidation failed."); + goto out; + } + + upcall_data.data = &ca_data; + ret = gf_proto_cache_invalidation_to_upcall(THIS, &ca_req, &upcall_data); + if (ret < 0) + goto out; + + gf_msg_trace(THIS->name, 0, + "Cache invalidation cbk received for gfid:" + " %s, ret = %d", + ca_req.gfid, ret); + + default_notify(THIS, GF_EVENT_UPCALL, &upcall_data); out: - if (ca_req.gfid) - free (ca_req.gfid); + if (ca_req.gfid) + free(ca_req.gfid); - if (ca_req.xdata.xdata_val) - free (ca_req.xdata.xdata_val); + if (ca_req.xdata.xdata_val) + free(ca_req.xdata.xdata_val); - if (ca_data.dict) - dict_unref (ca_data.dict); + if (ca_data.dict) + dict_unref(ca_data.dict); - return 0; + return 0; } int -client_cbk_child_up (struct rpc_clnt *rpc, void *mydata, void *data) +client_cbk_child_up(struct rpc_clnt *rpc, void *mydata, void *data) { - clnt_conf_t *conf = NULL; - xlator_t *this = NULL; + clnt_conf_t *conf = NULL; + xlator_t *this = NULL; - this = THIS; - GF_VALIDATE_OR_GOTO ("client", this, out); - GF_VALIDATE_OR_GOTO (this->name, rpc, out); - conf = this->private; - GF_VALIDATE_OR_GOTO (this->name, conf, out); + this = THIS; + GF_VALIDATE_OR_GOTO("client", this, out); + GF_VALIDATE_OR_GOTO(this->name, rpc, out); + conf = this->private; + GF_VALIDATE_OR_GOTO(this->name, conf, out); - gf_msg_debug (this->name, 0, "Received CHILD_UP"); - conf->child_up = _gf_true; + gf_msg_debug(this->name, 0, "Received CHILD_UP"); + conf->child_up = _gf_true; - this->notify (this, GF_EVENT_CHILD_UP, NULL); + this->notify(this, GF_EVENT_CHILD_UP, NULL); out: - return 0; + return 0; } int -client_cbk_child_down (struct rpc_clnt *rpc, void *mydata, void *data) +client_cbk_child_down(struct rpc_clnt *rpc, void *mydata, void *data) { - clnt_conf_t *conf = NULL; - xlator_t *this = NULL; + clnt_conf_t *conf = NULL; + xlator_t *this = NULL; - this = THIS; - GF_VALIDATE_OR_GOTO ("client", this, out); - GF_VALIDATE_OR_GOTO (this->name, rpc, out); - conf = this->private; - GF_VALIDATE_OR_GOTO (this->name, conf, out); + this = THIS; + GF_VALIDATE_OR_GOTO("client", this, out); + GF_VALIDATE_OR_GOTO(this->name, rpc, out); + conf = this->private; + GF_VALIDATE_OR_GOTO(this->name, conf, out); - gf_msg_debug (this->name, 0, "Received CHILD_DOWN"); - conf->child_up = _gf_false; + gf_msg_debug(this->name, 0, "Received CHILD_DOWN"); + conf->child_up = _gf_false; - this->notify (this, GF_EVENT_CHILD_DOWN, NULL); + this->notify(this, GF_EVENT_CHILD_DOWN, NULL); out: - return 0; + return 0; } int -client_cbk_inodelk_contention (struct rpc_clnt *rpc, void *mydata, void *data) +client_cbk_inodelk_contention(struct rpc_clnt *rpc, void *mydata, void *data) { - int ret = -1; - struct iovec *iov = NULL; - struct gf_upcall upcall_data = {0,}; - struct gf_upcall_inodelk_contention lc = {{0,},}; - gfs4_inodelk_contention_req proto_lc = {{0,},}; - - GF_VALIDATE_OR_GOTO ("client-callback", rpc, out); - GF_VALIDATE_OR_GOTO ("client-callback", mydata, out); - GF_VALIDATE_OR_GOTO ("client-callback", data, out); - - iov = (struct iovec *)data; - ret = xdr_to_generic (*iov, &proto_lc, - (xdrproc_t)xdr_gfs4_inodelk_contention_req); - - if (ret < 0) { - gf_msg (THIS->name, GF_LOG_WARNING, -ret, - PC_MSG_INODELK_CONTENTION_FAIL, - "XDR decode of inodelk contention failed."); - goto out; - } - - upcall_data.data = &lc; - ret = gf_proto_inodelk_contention_to_upcall (&proto_lc, &upcall_data); - if (ret < 0) - goto out; - - upcall_data.event_type = GF_UPCALL_INODELK_CONTENTION; - - default_notify (THIS, GF_EVENT_UPCALL, &upcall_data); + int ret = -1; + struct iovec *iov = NULL; + struct gf_upcall upcall_data = { + 0, + }; + struct gf_upcall_inodelk_contention lc = { + { + 0, + }, + }; + gfs4_inodelk_contention_req proto_lc = { + { + 0, + }, + }; + + GF_VALIDATE_OR_GOTO("client-callback", rpc, out); + GF_VALIDATE_OR_GOTO("client-callback", mydata, out); + GF_VALIDATE_OR_GOTO("client-callback", data, out); + + iov = (struct iovec *)data; + ret = xdr_to_generic(*iov, &proto_lc, + (xdrproc_t)xdr_gfs4_inodelk_contention_req); + + if (ret < 0) { + gf_msg(THIS->name, GF_LOG_WARNING, -ret, PC_MSG_INODELK_CONTENTION_FAIL, + "XDR decode of inodelk contention failed."); + goto out; + } + + upcall_data.data = &lc; + ret = gf_proto_inodelk_contention_to_upcall(&proto_lc, &upcall_data); + if (ret < 0) + goto out; + + upcall_data.event_type = GF_UPCALL_INODELK_CONTENTION; + + default_notify(THIS, GF_EVENT_UPCALL, &upcall_data); out: - if (proto_lc.domain) - free (proto_lc.domain); + if (proto_lc.domain) + free(proto_lc.domain); - if (proto_lc.xdata.xdata_val) - free (proto_lc.xdata.xdata_val); + if (proto_lc.xdata.xdata_val) + free(proto_lc.xdata.xdata_val); - if (lc.xdata) - dict_unref (lc.xdata); + if (lc.xdata) + dict_unref(lc.xdata); - return ret; + return ret; } int -client_cbk_entrylk_contention (struct rpc_clnt *rpc, void *mydata, void *data) +client_cbk_entrylk_contention(struct rpc_clnt *rpc, void *mydata, void *data) { - int ret = -1; - struct iovec *iov = NULL; - struct gf_upcall upcall_data = {0,}; - struct gf_upcall_entrylk_contention lc = {0,}; - gfs4_entrylk_contention_req proto_lc = {{0,},}; - - GF_VALIDATE_OR_GOTO ("client-callback", rpc, out); - GF_VALIDATE_OR_GOTO ("client-callback", mydata, out); - GF_VALIDATE_OR_GOTO ("client-callback", data, out); - - iov = (struct iovec *)data; - ret = xdr_to_generic (*iov, &proto_lc, - (xdrproc_t)xdr_gfs4_entrylk_contention_req); - - if (ret < 0) { - gf_msg (THIS->name, GF_LOG_WARNING, -ret, - PC_MSG_ENTRYLK_CONTENTION_FAIL, - "XDR decode of entrylk contention failed."); - goto out; - } - - upcall_data.data = &lc; - ret = gf_proto_entrylk_contention_to_upcall (&proto_lc, &upcall_data); - if (ret < 0) - goto out; - - upcall_data.event_type = GF_UPCALL_ENTRYLK_CONTENTION; - - default_notify (THIS, GF_EVENT_UPCALL, &upcall_data); + int ret = -1; + struct iovec *iov = NULL; + struct gf_upcall upcall_data = { + 0, + }; + struct gf_upcall_entrylk_contention lc = { + 0, + }; + gfs4_entrylk_contention_req proto_lc = { + { + 0, + }, + }; + + GF_VALIDATE_OR_GOTO("client-callback", rpc, out); + GF_VALIDATE_OR_GOTO("client-callback", mydata, out); + GF_VALIDATE_OR_GOTO("client-callback", data, out); + + iov = (struct iovec *)data; + ret = xdr_to_generic(*iov, &proto_lc, + (xdrproc_t)xdr_gfs4_entrylk_contention_req); + + if (ret < 0) { + gf_msg(THIS->name, GF_LOG_WARNING, -ret, PC_MSG_ENTRYLK_CONTENTION_FAIL, + "XDR decode of entrylk contention failed."); + goto out; + } + + upcall_data.data = &lc; + ret = gf_proto_entrylk_contention_to_upcall(&proto_lc, &upcall_data); + if (ret < 0) + goto out; + + upcall_data.event_type = GF_UPCALL_ENTRYLK_CONTENTION; + + default_notify(THIS, GF_EVENT_UPCALL, &upcall_data); out: - if (proto_lc.name) - free (proto_lc.name); + if (proto_lc.name) + free(proto_lc.name); - if (proto_lc.domain) - free (proto_lc.domain); + if (proto_lc.domain) + free(proto_lc.domain); - if (proto_lc.xdata.xdata_val) - free (proto_lc.xdata.xdata_val); + if (proto_lc.xdata.xdata_val) + free(proto_lc.xdata.xdata_val); - if (lc.xdata) - dict_unref (lc.xdata); + if (lc.xdata) + dict_unref(lc.xdata); - return ret; + return ret; } rpcclnt_cb_actor_t gluster_cbk_actors[GF_CBK_MAXVALUE] = { - [GF_CBK_NULL] = {"NULL", GF_CBK_NULL, client_cbk_null }, - [GF_CBK_FETCHSPEC] = {"FETCHSPEC", GF_CBK_FETCHSPEC, client_cbk_fetchspec }, - [GF_CBK_INO_FLUSH] = {"INO_FLUSH", GF_CBK_INO_FLUSH, client_cbk_ino_flush }, - [GF_CBK_CACHE_INVALIDATION] = {"CACHE_INVALIDATION", GF_CBK_CACHE_INVALIDATION, client_cbk_cache_invalidation }, - [GF_CBK_CHILD_UP] = {"CHILD_UP", GF_CBK_CHILD_UP, client_cbk_child_up }, - [GF_CBK_CHILD_DOWN] = {"CHILD_DOWN", GF_CBK_CHILD_DOWN, client_cbk_child_down }, - [GF_CBK_RECALL_LEASE] = {"RECALL_LEASE", GF_CBK_RECALL_LEASE, client_cbk_recall_lease }, - [GF_CBK_INODELK_CONTENTION] = {"INODELK_CONTENTION", GF_CBK_INODELK_CONTENTION, client_cbk_inodelk_contention }, - [GF_CBK_ENTRYLK_CONTENTION] = {"ENTRYLK_CONTENTION", GF_CBK_ENTRYLK_CONTENTION, client_cbk_entrylk_contention }, + [GF_CBK_NULL] = {"NULL", GF_CBK_NULL, client_cbk_null}, + [GF_CBK_FETCHSPEC] = {"FETCHSPEC", GF_CBK_FETCHSPEC, client_cbk_fetchspec}, + [GF_CBK_INO_FLUSH] = {"INO_FLUSH", GF_CBK_INO_FLUSH, client_cbk_ino_flush}, + [GF_CBK_CACHE_INVALIDATION] = {"CACHE_INVALIDATION", + GF_CBK_CACHE_INVALIDATION, + client_cbk_cache_invalidation}, + [GF_CBK_CHILD_UP] = {"CHILD_UP", GF_CBK_CHILD_UP, client_cbk_child_up}, + [GF_CBK_CHILD_DOWN] = {"CHILD_DOWN", GF_CBK_CHILD_DOWN, + client_cbk_child_down}, + [GF_CBK_RECALL_LEASE] = {"RECALL_LEASE", GF_CBK_RECALL_LEASE, + client_cbk_recall_lease}, + [GF_CBK_INODELK_CONTENTION] = {"INODELK_CONTENTION", + GF_CBK_INODELK_CONTENTION, + client_cbk_inodelk_contention}, + [GF_CBK_ENTRYLK_CONTENTION] = {"ENTRYLK_CONTENTION", + GF_CBK_ENTRYLK_CONTENTION, + client_cbk_entrylk_contention}, }; - struct rpcclnt_cb_program gluster_cbk_prog = { - .progname = "GlusterFS Callback", - .prognum = GLUSTER_CBK_PROGRAM, - .progver = GLUSTER_CBK_VERSION, - .actors = gluster_cbk_actors, - .numactors = GF_CBK_MAXVALUE, + .progname = "GlusterFS Callback", + .prognum = GLUSTER_CBK_PROGRAM, + .progver = GLUSTER_CBK_VERSION, + .actors = gluster_cbk_actors, + .numactors = GF_CBK_MAXVALUE, }; |