From 31e81065edc26378eabdd4785f5dd689719cd126 Mon Sep 17 00:00:00 2001 From: shishir gowda Date: Fri, 22 Jun 2012 13:28:31 +0530 Subject: cluster/dht: Remove dht dependency on glusterfsd-mgmt glusterfs_ctx->notify can be used by any xlator to talk to glusterfsd-mgmt. Note- This is for any rpc communication initiated by the xlator, and not from glusterd. Change-Id: Ic0e4af106fe1e98d797ca621facda8839b87598a BUG: 835757 Signed-off-by: shishir gowda Reviewed-on: http://review.gluster.com/3610 Tested-by: Gluster Build System Reviewed-by: Jeff Darcy Reviewed-by: Vijay Bellur --- glusterfsd/src/glusterfsd-mgmt.c | 21 +++++++++++++++++++++ libglusterfs/src/glusterfs.h | 4 ++++ libglusterfs/src/xlator.h | 5 ++++- rpc/rpc-lib/src/protocol-common.h | 5 ----- xlators/cluster/dht/src/dht-rebalance.c | 8 +++++++- 5 files changed, 36 insertions(+), 7 deletions(-) diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c index d8582aa7013..f313fa4c630 100644 --- a/glusterfsd/src/glusterfsd-mgmt.c +++ b/glusterfsd/src/glusterfsd-mgmt.c @@ -47,6 +47,7 @@ #include "cli1-xdr.h" #include "statedump.h" #include "syncop.h" +#include "xlator.h" static char is_mgmt_rpc_reconnect; @@ -1927,6 +1928,24 @@ glusterfs_listener_stop (glusterfs_ctx_t *ctx) return ret; } +int +glusterfs_mgmt_notify (int32_t op, void *data, ...) +{ + int ret = 0; + switch (op) + { + case GF_EN_DEFRAG_STATUS: + ret = glusterfs_rebalance_event_notify ((dict_t*) data); + break; + + default: + gf_log ("", GF_LOG_ERROR, "Invalid op"); + break; + } + + return ret; +} + int glusterfs_mgmt_init (glusterfs_ctx_t *ctx) { @@ -1972,6 +1991,8 @@ glusterfs_mgmt_init (glusterfs_ctx_t *ctx) goto out; } + ctx->notify = glusterfs_mgmt_notify; + /* This value should be set before doing the 'rpc_clnt_start()' as the notify function uses this variable */ ctx->mgmt = rpc; diff --git a/libglusterfs/src/glusterfs.h b/libglusterfs/src/glusterfs.h index cdfb64dea84..98c901b9eea 100644 --- a/libglusterfs/src/glusterfs.h +++ b/libglusterfs/src/glusterfs.h @@ -334,6 +334,8 @@ struct _glusterfs_graph { typedef struct _glusterfs_graph glusterfs_graph_t; +typedef int32_t (*glusterfsd_mgmt_event_notify_fn_t) (int32_t event, void *data, + ...); struct _glusterfs_ctx { cmd_args_t cmd_args; char *process_uuid; @@ -373,6 +375,8 @@ struct _glusterfs_ctx { int mem_accounting; /* if value is other than 0, it will be set */ + glusterfsd_mgmt_event_notify_fn_t notify; /* Used for xlators to make + call to fsd-mgmt */ }; typedef struct _glusterfs_ctx glusterfs_ctx_t; diff --git a/libglusterfs/src/xlator.h b/libglusterfs/src/xlator.h index b7b59fac956..2fce7dc474a 100644 --- a/libglusterfs/src/xlator.h +++ b/libglusterfs/src/xlator.h @@ -873,5 +873,8 @@ int is_gf_log_command (xlator_t *trans, const char *name, char *value); int glusterd_check_log_level (const char *value); int xlator_volopt_dynload (char *xlator_type, void **dl_handle, volume_opt_list_t *vol_opt_handle); -int32_t glusterfs_rebalance_event_notify (dict_t *dict); +enum gf_hdsk_event_notify_op { + GF_EN_DEFRAG_STATUS, + GF_EN_MAX, +}; #endif /* _XLATOR_H */ diff --git a/rpc/rpc-lib/src/protocol-common.h b/rpc/rpc-lib/src/protocol-common.h index e2815d8c129..dc93f07dc2d 100644 --- a/rpc/rpc-lib/src/protocol-common.h +++ b/rpc/rpc-lib/src/protocol-common.h @@ -194,11 +194,6 @@ typedef enum { GF_AFR_OP_SPLIT_BRAIN_FILES } gf_xl_afr_op_t ; -enum gf_hdsk_event_notify_op { - GF_EN_DEFRAG_STATUS, - GF_EN_MAX, -}; - #define GLUSTER_HNDSK_PROGRAM 14398633 /* Completely random */ #define GLUSTER_HNDSK_VERSION 2 /* 0.0.1 */ diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c index d348a7fb5ab..ba2df528a2e 100644 --- a/xlators/cluster/dht/src/dht-rebalance.c +++ b/xlators/cluster/dht/src/dht-rebalance.c @@ -1404,11 +1404,16 @@ gf_defrag_start_crawl (void *data) dict_t *fix_layout = NULL; dict_t *migrate_data = NULL; dict_t *status = NULL; + glusterfs_ctx_t *ctx = NULL; this = data; if (!this) goto out; + ctx = glusterfs_ctx_get (); + if (!ctx) + goto out; + conf = this->private; if (!conf) goto out; @@ -1480,7 +1485,8 @@ out: { status = dict_new (); gf_defrag_status_get (defrag, status); - glusterfs_rebalance_event_notify (status); + if (ctx->notify) + ctx->notify (GF_EN_DEFRAG_STATUS, status); if (status) dict_unref (status); defrag->is_exiting = 1; -- cgit