diff options
author | Milind Changire <mchangir@redhat.com> | 2017-10-19 11:49:42 +0530 |
---|---|---|
committer | Jeff Darcy <jeff@pl.atyp.us> | 2017-11-06 16:46:33 +0000 |
commit | 6707eddaa5d7fdce16d39c19963911868a2c7fee (patch) | |
tree | 42bfa718a33a13007d967e4a70242afc7f986c1b | |
parent | ed5e7b48f9255a57e0a691c102a207eb2445e8b7 (diff) | |
download | glusterfs-6707eddaa5d7fdce16d39c19963911868a2c7fee.tar.gz glusterfs-6707eddaa5d7fdce16d39c19963911868a2c7fee.tar.xz glusterfs-6707eddaa5d7fdce16d39c19963911868a2c7fee.zip |
rpc: optimize fop program lookup
Ensure that the fop program is the first in the program list
so that there's minimum amount of time spent to search the
program for the most frequently needed use case.
Change-Id: I45c3dcdbf39ec90ba39d914432d13a2ace00a5ee
BUG: 1509647
Signed-off-by: Milind Changire <mchangir@redhat.com>
-rw-r--r-- | glusterfsd/src/glusterfsd-mgmt.c | 2 | ||||
-rw-r--r-- | rpc/rpc-lib/src/rpcsvc.c | 10 | ||||
-rw-r--r-- | rpc/rpc-lib/src/rpcsvc.h | 3 | ||||
-rw-r--r-- | xlators/features/changelog/src/changelog-rpc-common.c | 2 | ||||
-rw-r--r-- | xlators/features/quota/src/quotad-aggregator.c | 3 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.c | 2 | ||||
-rw-r--r-- | xlators/nfs/server/src/nfs.c | 4 | ||||
-rw-r--r-- | xlators/protocol/server/src/server.c | 9 |
8 files changed, 23 insertions, 12 deletions
diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c index 46d4e918bc..415c26d68d 100644 --- a/glusterfsd/src/glusterfsd-mgmt.c +++ b/glusterfsd/src/glusterfsd-mgmt.c @@ -2344,7 +2344,7 @@ glusterfs_listener_init (glusterfs_ctx_t *ctx) goto out; } - ret = rpcsvc_program_register (rpc, &glusterfs_mop_prog); + ret = rpcsvc_program_register (rpc, &glusterfs_mop_prog, _gf_false); if (ret) { goto out; } diff --git a/rpc/rpc-lib/src/rpcsvc.c b/rpc/rpc-lib/src/rpcsvc.c index d62abde47c..ffc6b76359 100644 --- a/rpc/rpc-lib/src/rpcsvc.c +++ b/rpc/rpc-lib/src/rpcsvc.c @@ -1995,7 +1995,8 @@ rpcsvc_request_handler (void *arg) } int -rpcsvc_program_register (rpcsvc_t *svc, rpcsvc_program_t *program) +rpcsvc_program_register (rpcsvc_t *svc, rpcsvc_program_t *program, + gf_boolean_t add_to_head) { int ret = -1; rpcsvc_program_t *newprog = NULL; @@ -2052,7 +2053,10 @@ rpcsvc_program_register (rpcsvc_t *svc, rpcsvc_program_t *program) pthread_rwlock_wrlock (&svc->rpclock); { - list_add_tail (&newprog->program, &svc->programs); + if (add_to_head) + list_add (&newprog->program, &svc->programs); + else + list_add_tail (&newprog->program, &svc->programs); } pthread_rwlock_unlock (&svc->rpclock); @@ -2513,7 +2517,7 @@ rpcsvc_init (xlator_t *xl, glusterfs_ctx_t *ctx, dict_t *options, gluster_dump_prog.options = options; - ret = rpcsvc_program_register (svc, &gluster_dump_prog); + ret = rpcsvc_program_register (svc, &gluster_dump_prog, _gf_false); if (ret) { gf_log (GF_RPCSVC, GF_LOG_ERROR, "failed to register DUMP program"); diff --git a/rpc/rpc-lib/src/rpcsvc.h b/rpc/rpc-lib/src/rpcsvc.h index 37244be536..1fdbc69c7a 100644 --- a/rpc/rpc-lib/src/rpcsvc.h +++ b/rpc/rpc-lib/src/rpcsvc.h @@ -423,7 +423,8 @@ typedef struct rpcsvc_cbk_program { * procedure handlers. */ extern int -rpcsvc_program_register (rpcsvc_t *svc, rpcsvc_program_t *program); +rpcsvc_program_register (rpcsvc_t *svc, rpcsvc_program_t *program, + gf_boolean_t add_to_head); extern int rpcsvc_program_unregister (rpcsvc_t *svc, rpcsvc_program_t *program); diff --git a/xlators/features/changelog/src/changelog-rpc-common.c b/xlators/features/changelog/src/changelog-rpc-common.c index 08cd41e4f1..7bd5b688fa 100644 --- a/xlators/features/changelog/src/changelog-rpc-common.c +++ b/xlators/features/changelog/src/changelog-rpc-common.c @@ -324,7 +324,7 @@ changelog_rpc_server_init (xlator_t *this, char *sockfile, void *cbkdata, while (*progs) { prog = *progs; - ret = rpcsvc_program_register (rpc, prog); + ret = rpcsvc_program_register (rpc, prog, _gf_false); if (ret) { gf_msg (this->name, GF_LOG_ERROR, 0, CHANGELOG_MSG_PROGRAM_NAME_REG_FAILED, diff --git a/xlators/features/quota/src/quotad-aggregator.c b/xlators/features/quota/src/quotad-aggregator.c index 428153fa2b..c27b67136a 100644 --- a/xlators/features/quota/src/quotad-aggregator.c +++ b/xlators/features/quota/src/quotad-aggregator.c @@ -416,7 +416,8 @@ quotad_aggregator_init (xlator_t *this) priv->quotad_aggregator = "ad_aggregator_prog; quotad_aggregator_prog.options = this->options; - ret = rpcsvc_program_register (priv->rpcsvc, "ad_aggregator_prog); + ret = rpcsvc_program_register (priv->rpcsvc, "ad_aggregator_prog, + _gf_false); if (ret) { gf_msg (this->name, GF_LOG_WARNING, 0, Q_MSG_RPCSVC_REGISTER_FAILED, diff --git a/xlators/mgmt/glusterd/src/glusterd.c b/xlators/mgmt/glusterd/src/glusterd.c index 85ae51ba9f..f380583701 100644 --- a/xlators/mgmt/glusterd/src/glusterd.c +++ b/xlators/mgmt/glusterd/src/glusterd.c @@ -444,7 +444,7 @@ glusterd_program_register (xlator_t *this, rpcsvc_t *svc, { int32_t ret = -1; - ret = rpcsvc_program_register (svc, prog); + ret = rpcsvc_program_register (svc, prog, _gf_false); if (ret) { gf_msg_debug (this->name, 0, "cannot register program (name: %s, prognum:%d, " diff --git a/xlators/nfs/server/src/nfs.c b/xlators/nfs/server/src/nfs.c index daa8366f19..1f637fd609 100644 --- a/xlators/nfs/server/src/nfs.c +++ b/xlators/nfs/server/src/nfs.c @@ -98,7 +98,7 @@ nfs_init_version (xlator_t *this, nfs_version_initer_t init, gf_msg_debug (GF_NFS, 0, "Starting program: %s", prog->progname); - ret = rpcsvc_program_register (nfs->rpcsvc, prog); + ret = rpcsvc_program_register (nfs->rpcsvc, prog, _gf_false); if (ret == -1) { gf_msg (GF_NFS, GF_LOG_ERROR, 0, NFS_MSG_PGM_INIT_FAIL, "Program: %s init failed", prog->progname); @@ -321,7 +321,7 @@ nfs_init_versions (struct nfs_state *nfs, xlator_t *this) gf_msg_debug (GF_NFS, 0, "Starting program: %s", prog->progname); - ret = rpcsvc_program_register (nfs->rpcsvc, prog); + ret = rpcsvc_program_register (nfs->rpcsvc, prog, _gf_false); if (ret == -1) { gf_msg (GF_NFS, GF_LOG_ERROR, 0, NFS_MSG_PGM_INIT_FAIL, diff --git a/xlators/protocol/server/src/server.c b/xlators/protocol/server/src/server.c index 344046aabe..b408c10b0a 100644 --- a/xlators/protocol/server/src/server.c +++ b/xlators/protocol/server/src/server.c @@ -1187,7 +1187,11 @@ init (xlator_t *this) } glusterfs3_3_fop_prog.options = this->options; - ret = rpcsvc_program_register (conf->rpc, &glusterfs3_3_fop_prog); + /* make sure we register the fop prgram at the head to optimize + * lookup + */ + ret = rpcsvc_program_register (conf->rpc, &glusterfs3_3_fop_prog, + _gf_true); if (ret) { gf_msg (this->name, GF_LOG_WARNING, 0, PS_MSG_PGM_REG_FAILED, "registration of program (name:%s, prognum:%d, " @@ -1198,7 +1202,8 @@ init (xlator_t *this) } gluster_handshake_prog.options = this->options; - ret = rpcsvc_program_register (conf->rpc, &gluster_handshake_prog); + ret = rpcsvc_program_register (conf->rpc, &gluster_handshake_prog, + _gf_false); if (ret) { gf_msg (this->name, GF_LOG_WARNING, 0, PS_MSG_PGM_REG_FAILED, "registration of program (name:%s, prognum:%d, " |