libglusterfs: replace default functions with generated versions
authorJeff Darcy <jdarcy@redhat.com>
Tue, 6 Oct 2015 17:19:01 +0000 (13:19 -0400)
committerVijay Bellur <vbellur@redhat.com>
Fri, 23 Oct 2015 05:51:44 +0000 (22:51 -0700)
commitfb2a511493868a9ff0c2926537a4d1d23821ce38
tree2e99e23b42cc48915d6bf19cc8e235879f2925c9
parent594a03b030577bf0ed6960199e920cc5fa7e7afc
libglusterfs: replace default functions with generated versions

Replacing repetitive code like this with code generated from a more
compact "canonical" definition carries several advantages.

 * Ease the process of adding new fops (e.g. GF_FOP_IPC).

 * Ease the process of making global changes to existing fops (e.g.
   adding "xdata").

 * Ensure strict consistency between all of the pieces that must be
   compatible with each other, through both kinds of changes.

What we have right now is just a start.  The above benefits will only
truly be realized when we use the same definitions to generate stubs,
syncops, and perhaps even parts of gfapi or glupy.

This same infrastructure can also be used to reduce code duplication and
potential for error in many of our translators.  NSR already uses a
similar technique, using a few hundred lines of templates to generate a
few *thousand* lines of code.  The ability to make a global "aspect"
change (e.g. to quorum checking) in one place instead of seventy has
already been demonstrated there.

Other candidates for code generation include the AFR/EC transaction
infrastructure, or stub creation/resumption in io-threads.

Change-Id: If7d59de7a088848b557f5aea00741b4fe19017c1
BUG: 1271325
Signed-off-by: Jeff Darcy <jdarcy@redhat.com>
Reviewed-on: http://review.gluster.org/9411
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: Shyamsundar Ranganathan <srangana@redhat.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
12 files changed:
libglusterfs/src/Makefile.am
libglusterfs/src/call-stub.h
libglusterfs/src/cluster-syncop.h
libglusterfs/src/default-args.c [new file with mode: 0644]
libglusterfs/src/default-args.h [new file with mode: 0644]
libglusterfs/src/defaults-tmpl.c [new file with mode: 0644]
libglusterfs/src/defaults.c [deleted file]
libglusterfs/src/defaults.h
libglusterfs/src/gen-defaults.py [new file with mode: 0644]
libglusterfs/src/generator.py [new file with mode: 0644]
xlators/cluster/afr/src/pump.c
xlators/mgmt/glusterd/src/glusterd-handler.c