path: root/xlators/cluster/afr/src/afr-common.c
diff options
authorKrutika Dhananjay <>2016-12-08 22:49:48 +0530
committerPranith Kumar Karampuri <>2016-12-12 08:38:49 -0800
commit2b76520ca3e41cbac8f9318dce87e0b8d670c0ee (patch)
tree2fa49392edfbd2ee205874e0c0fd6352d6c49c3f /xlators/cluster/afr/src/afr-common.c
parent9c769c6ee1d125b6bab513073767b628b60abeeb (diff)
cluster/afr: Fix per-txn optimistic changelog initialisation
Incorrect initialisation of local->optimistic_change_log was leading to skipped pre-op and post-op even when a brick didn't participate in the txn because it was down. The result - missing granular name index resulting in some entries never getting healed. FIX: Initialise local->optimistic_change_log just before pre-op. Also fixed granular entry heal to create the granular name index in pre-op as opposed to post-op. This is to prevent loss of granular information when during an entry txn, the good (src) brick goes offline before the post-op is done. This would cause self-heal to do conservative merge (since dirty xattr is the only information available), which when granular-entry-heal is enabled, expects granular indices, the lack of which can lead to loss of data in the worst case. Change-Id: Ia3ad716d6fb1821555f02180e86e8711a79f958d BUG: 1402730 Signed-off-by: Krutika Dhananjay <> Reviewed-on: Smoke: Gluster Build System <> Reviewed-by: Pranith Kumar Karampuri <> NetBSD-regression: NetBSD Build System <> CentOS-regression: Gluster Build System <>
Diffstat (limited to 'xlators/cluster/afr/src/afr-common.c')
1 files changed, 0 insertions, 5 deletions
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c
index fcbfe9b..57745c3 100644
--- a/xlators/cluster/afr/src/afr-common.c
+++ b/xlators/cluster/afr/src/afr-common.c
@@ -5046,7 +5046,6 @@ out:
afr_transaction_local_init (afr_local_t *local, xlator_t *this)
- int child_up_count = 0;
int ret = -ENOMEM;
afr_private_t *priv = NULL;
@@ -5065,10 +5064,6 @@ afr_transaction_local_init (afr_local_t *local, xlator_t *this)
ret = -ENOMEM;
- child_up_count = AFR_COUNT (local->child_up, priv->child_count);
- if (priv->optimistic_change_log && child_up_count == priv->child_count)
- local->optimistic_change_log = 1;
local->pre_op_compat = priv->pre_op_compat;
local->transaction.eager_lock =