summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilind Changire <mchangir@redhat.com>2017-10-19 11:49:42 +0530
committerJeff Darcy <jeff@pl.atyp.us>2017-11-06 16:46:33 +0000
commit6707eddaa5d7fdce16d39c19963911868a2c7fee (patch)
tree42bfa718a33a13007d967e4a70242afc7f986c1b
parented5e7b48f9255a57e0a691c102a207eb2445e8b7 (diff)
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.c2
-rw-r--r--rpc/rpc-lib/src/rpcsvc.c10
-rw-r--r--rpc/rpc-lib/src/rpcsvc.h3
-rw-r--r--xlators/features/changelog/src/changelog-rpc-common.c2
-rw-r--r--xlators/features/quota/src/quotad-aggregator.c3
-rw-r--r--xlators/mgmt/glusterd/src/glusterd.c2
-rw-r--r--xlators/nfs/server/src/nfs.c4
-rw-r--r--xlators/protocol/server/src/server.c9
8 files changed, 23 insertions, 12 deletions
diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c
index 46d4e918bc6..415c26d68d0 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 d62abde47c5..ffc6b763590 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 37244be5361..1fdbc69c7ad 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 08cd41e4f17..7bd5b688fa5 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 428153fa2bd..c27b67136a3 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 = &quotad_aggregator_prog;
quotad_aggregator_prog.options = this->options;
- ret = rpcsvc_program_register (priv->rpcsvc, &quotad_aggregator_prog);
+ ret = rpcsvc_program_register (priv->rpcsvc, &quotad_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 85ae51ba9fc..f380583701c 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 daa8366f19a..1f637fd6091 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 344046aabec..b408c10b0a0 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, "