From f8f16595d8dd8c8a869630bb77b7fd1b42b97e08 Mon Sep 17 00:00:00 2001 From: Avra Sengupta Date: Tue, 10 May 2016 12:13:18 +0530 Subject: jbr: Making fop functions more modular to reuse more code Putting bigger chunks of re-usable code like leader checks and init into functions thereby reducing the size of the 'fop' call. Introduced 'perform_local_op' in the 'fop' call, where regular functions as of now just call dispatch, but fops like 'lk' can do their fop specific operations. Introduced selective_generate to allow certain functions for a particular fop to be generated. The rest of the functions can be customised and added in jbr.c Change-Id: I3754ed68983e763329e14a2faef911428e36e4f0 BUG: 1336328 Signed-off-by: Avra Sengupta Reviewed-on: http://review.gluster.org/14355 Smoke: Gluster Build System NetBSD-regression: NetBSD Build System CentOS-regression: Gluster Build System Reviewed-by: Jeff Darcy --- xlators/experimental/jbr-server/src/gen-fops.py | 52 ++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 6 deletions(-) (limited to 'xlators/experimental/jbr-server/src/gen-fops.py') diff --git a/xlators/experimental/jbr-server/src/gen-fops.py b/xlators/experimental/jbr-server/src/gen-fops.py index 64cbe4f760e..36bf1e35d27 100755 --- a/xlators/experimental/jbr-server/src/gen-fops.py +++ b/xlators/experimental/jbr-server/src/gen-fops.py @@ -78,7 +78,7 @@ fop_table = { "getxattr": "read", # "inodelk": "read", "link": "write", -# "lk": "read", +# "lk": "write", # "lookup": "read", "mkdir": "write", "mknod": "write", @@ -103,6 +103,13 @@ fop_table = { "xattrop": "write", } +# Mention those fops in the selective_generate table, for which +# only a few common functions will be generated, and mention those +# functions. Rest of the functions can be customized +selective_generate = { +# "lk": "fop,dispatch,call_dispatch", +} + # Stolen from gen_fdl.py def gen_server (templates): fops_done = [] @@ -110,15 +117,48 @@ def gen_server (templates): info = fop_table[name].split(",") kind = info[0] flags = info[1:] + + # generate all functions for the fops in fop_table + # except for the ones in selective_generate for which + # generate only the functions mentioned in the + # selective_generate table + gen_funcs = "fop,complete,continue,fan-in,dispatch, \ + call_dispatch,perform_local_op" + if name in selective_generate: + gen_funcs = selective_generate[name].split(",") + if ("fsync" in flags) or ("queue" in flags): flags.append("need_fd") for fname in flags: print "#define JBR_CG_%s" % fname.upper() - print generate(templates[kind+"-complete"],name,cbk_subs) - print generate(templates[kind+"-continue"],name,fop_subs) - print generate(templates[kind+"-fan-in"],name,cbk_subs) - print generate(templates[kind+"-dispatch"],name,fop_subs) - print generate(templates[kind+"-fop"],name,fop_subs) + + if 'complete' in gen_funcs: + print generate(templates[kind+"-complete"], + name,cbk_subs) + + if 'continue' in gen_funcs: + print generate(templates[kind+"-continue"], + name,fop_subs) + + if 'fan-in' in gen_funcs: + print generate(templates[kind+"-fan-in"], + name,cbk_subs) + + if 'dispatch' in gen_funcs: + print generate(templates[kind+"-dispatch"], + name,fop_subs) + + if 'call_dispatch' in gen_funcs: + print generate(templates[kind+"-call_dispatch"], + name,fop_subs) + + if 'perform_local_op' in gen_funcs: + print generate(templates[kind+"-perform_local_op"], + name, fop_subs) + + if 'fop' in gen_funcs: + print generate(templates[kind+"-fop"],name,fop_subs) + for fname in flags: print "#undef JBR_CG_%s" % fname.upper() fops_done.append(name) -- cgit