summaryrefslogtreecommitdiffstats
path: root/xlators/features/changelog/src/changelog.c
diff options
context:
space:
mode:
authorKotresh HR <khiremat@redhat.com>2014-12-24 21:26:28 +0530
committerVenky Shankar <vshankar@redhat.com>2014-12-29 09:08:05 -0800
commit5e7e12694e3898ef7bb5425827122c434a465ce8 (patch)
tree2e77770f4b7d3d8e6d62545b66e0a9bdb30da2c1 /xlators/features/changelog/src/changelog.c
parent41e0e325aa7733285733fb00230fdaafdc80c25a (diff)
feature/changelog: Virtual xattr to trigger explicit sync in geo-rep.
A virtual xattr "glusterfs.geo-rep.trigger-sync" is provided in glusterfs through changelog translator. Geo-rep triggers a explicit data sync on setting this xattr on a file. Changelog captures a DATA entry on file's gfid on setting this virtual xattr on a file. This is supported only for files. It doesn't support directories. Usage: setfattr -n glusterfs.geo-rep.trigger-sync <file-path> Change-Id: Ia689326ac2dcb31035ffbecad2c548eda4eb9245 BUG: 1176934 Signed-off-by: Kotresh HR <khiremat@redhat.com> Reviewed-on: http://review.gluster.org/9337 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Venky Shankar <vshankar@redhat.com> Tested-by: Venky Shankar <vshankar@redhat.com>
Diffstat (limited to 'xlators/features/changelog/src/changelog.c')
-rw-r--r--xlators/features/changelog/src/changelog.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/xlators/features/changelog/src/changelog.c b/xlators/features/changelog/src/changelog.c
index d2e30f7f001..e047288d43d 100644
--- a/xlators/features/changelog/src/changelog.c
+++ b/xlators/features/changelog/src/changelog.c
@@ -1326,6 +1326,17 @@ changelog_setxattr (call_frame_t *frame,
CHANGELOG_INIT (this, frame->local,
loc->inode, loc->inode->gfid, 1);
+ /* On setting this virtual xattr on a file, an explicit data
+ sync is triggered from geo-rep as DATA entry is recorded
+ in changelog. */
+ if (dict_get (dict, GF_XATTR_TRIGGER_SYNC)
+ && loc->inode->ia_type != IA_IFDIR) {
+ changelog_update (this, priv, frame->local,
+ CHANGELOG_TYPE_DATA);
+ CHANGELOG_STACK_UNWIND (setxattr, frame, 0, 0, xdata);
+ return 0;
+ }
+
co = changelog_get_usable_buffer (frame->local);
if (!co)
goto wind;