diff options
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/cluster/afr/src/afr-self-heal-data.c | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/xlators/cluster/afr/src/afr-self-heal-data.c b/xlators/cluster/afr/src/afr-self-heal-data.c index 2ac6e475bb..f468fc8ad6 100644 --- a/xlators/cluster/afr/src/afr-self-heal-data.c +++ b/xlators/cluster/afr/src/afr-self-heal-data.c @@ -399,17 +399,18 @@ __afr_selfheal_truncate_sinks (call_frame_t *frame, xlator_t *this, { afr_local_t *local = NULL; afr_private_t *priv = NULL; - unsigned char arbiter_sink_status = 0; int i = 0; local = frame->local; priv = this->private; - if (priv->arbiter_count) { - arbiter_sink_status = healed_sinks[ARBITER_BRICK_INDEX]; - healed_sinks[ARBITER_BRICK_INDEX] = 0; - } - + /* This will send truncate on the arbiter brick as well if it is marked + * as sink. If changelog is enabled on the volume it captures truncate + * as a data transactions on the arbiter brick. This will help geo-rep + * to properly sync the data from master to slave if arbiter is the + * ACTIVE brick during syncing and which had got some entries healed for + * data as part of self heal. + */ AFR_ONLIST (healed_sinks, frame, afr_sh_generic_fop_cbk, ftruncate, fd, size, NULL); @@ -420,8 +421,6 @@ __afr_selfheal_truncate_sinks (call_frame_t *frame, xlator_t *this, */ healed_sinks[i] = 0; - if (arbiter_sink_status) - healed_sinks[ARBITER_BRICK_INDEX] = arbiter_sink_status; return 0; } @@ -733,18 +732,17 @@ __afr_selfheal_data (call_frame_t *frame, xlator_t *this, fd_t *fd, goto unlock; } + ret = __afr_selfheal_truncate_sinks (frame, this, fd, healed_sinks, + locked_replies[source].poststat.ia_size); + if (ret < 0) + goto unlock; + if (priv->arbiter_count && AFR_COUNT (healed_sinks, priv->child_count) == 1 && healed_sinks[ARBITER_BRICK_INDEX]) { is_arbiter_the_only_sink = _gf_true; goto restore_time; } - - ret = __afr_selfheal_truncate_sinks (frame, this, fd, healed_sinks, - locked_replies[source].poststat.ia_size); - if (ret < 0) - goto unlock; - ret = 0; } |