diff options
| author | Kotresh HR <khiremat@redhat.com> | 2018-05-28 03:05:26 -0400 | 
|---|---|---|
| committer | Kotresh HR <khiremat@redhat.com> | 2018-06-24 11:47:59 -0400 | 
| commit | f9f1d26f93d10c41c40f13ccf9b751acb03f43bd (patch) | |
| tree | 235c2e7a55a220a0fe6d6f5135f673d8765bf504 /xlators/cluster | |
| parent | 69b8ade6168d1b5a96323e3b656273375d2aff7b (diff) | |
cluster/dht: Fix rename journal in changelog
With patch [1], renames are journalled only
on cached subvolume. The dht sends the special
key on the cached subvolume so that the changelog
journals the rename. With single distribute
sub-volume, the key is not being set. This patch
fixes the same.
[1] https://review.gluster.org/10410
fixes: bz#1583018
Change-Id: Ic2e35b40535916fa506a714f257ba325e22d0961
Signed-off-by: Kotresh HR <khiremat@redhat.com>
Diffstat (limited to 'xlators/cluster')
| -rw-r--r-- | xlators/cluster/dht/src/dht-rename.c | 11 | 
1 files changed, 11 insertions, 0 deletions
diff --git a/xlators/cluster/dht/src/dht-rename.c b/xlators/cluster/dht/src/dht-rename.c index d311ac633e3..1d0c2bbc7ed 100644 --- a/xlators/cluster/dht/src/dht-rename.c +++ b/xlators/cluster/dht/src/dht-rename.c @@ -1948,6 +1948,7 @@ dht_rename (call_frame_t *frame, xlator_t *this,          dht_conf_t  *conf                   = NULL;          char         gfid[GF_UUID_BUF_SIZE] = {0};          char         newgfid[GF_UUID_BUF_SIZE] = {0}; +        gf_boolean_t free_xdata             = _gf_false;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err); @@ -1957,7 +1958,17 @@ dht_rename (call_frame_t *frame, xlator_t *this,          conf = this->private;          if (conf->subvolume_cnt == 1) { +                if (!IA_ISDIR (oldloc->inode->ia_type)) { +                        if (!xdata) { +                                free_xdata = _gf_true; +                        } +                        DHT_CHANGELOG_TRACK_AS_RENAME(xdata, oldloc, newloc); +                }                  default_rename (frame, this, oldloc, newloc, xdata); +                if (free_xdata && xdata) { +                        dict_unref(xdata); +                        xdata = NULL; +                }                  return 0;          }  | 
