diff options
author | Pranith Kumar K <pkarampu@redhat.com> | 2018-04-13 08:52:06 +0530 |
---|---|---|
committer | Pranith Kumar Karampuri <pkarampu@redhat.com> | 2018-04-25 05:47:48 +0000 |
commit | 971b386fb575f0a216983ea6cad09c42f9b0fb2f (patch) | |
tree | 08df2fa930207a37337ec5ae9042f79af8b37453 /xlators/cluster/afr/src/afr.c | |
parent | 93464ffd6dcbe2a2f91c0e35f933f814f523e9be (diff) |
cluster/afr: Keep child-up until ping-event
Problem:
If we have 2 bricks, brick-A and brick-B with brick-A within halo-max-latency
and brick-B more than halo-max-latency. If we set both halo-min, halo-max replicas
as '1'. In this case, brick-A comes online and then ping-latency will be updated for it.
When brick-B comes online, we have 2 up-bricks, so the code tries to find the brick with
worst latency to mark it down. Since Brick-B just came online it always had '0' latency
so brick-B used to be marked offline and Brick-B would eventually be the one to be
online even when brick-A is more suited.
Fix:
Consider latency of just-up child as HALO_MAX_LATENCY so that worst-child until
ping-latency is found as the just-up brick. Also keep ping-latency as -1 until
child-up during initialization.
BUG: 1567881
fixes bz#1567881
Change-Id: I148262fe505468190f0eb99225d0f6d57cdb6f04
Signed-off-by: Pranith Kumar K <pkarampu@redhat.com>
Diffstat (limited to 'xlators/cluster/afr/src/afr.c')
-rw-r--r-- | xlators/cluster/afr/src/afr.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/xlators/cluster/afr/src/afr.c b/xlators/cluster/afr/src/afr.c index ad5446191ec..cb4b1537984 100644 --- a/xlators/cluster/afr/src/afr.c +++ b/xlators/cluster/afr/src/afr.c @@ -534,6 +534,10 @@ init (xlator_t *this) ret = -ENOMEM; goto out; } + /*Initialize to -ve ping timeout so that they are not considered + * in child-up events until ping-event comes*/ + for (i = 0; i < child_count; i++) + priv->child_latency[i] = -1; priv->children = GF_CALLOC (sizeof (xlator_t *), child_count, gf_afr_mt_xlator_t); @@ -773,7 +777,7 @@ struct volume_options options[] = { { .key = {"halo-max-latency"}, .type = GF_OPTION_TYPE_INT, .min = 1, - .max = 99999, + .max = AFR_HALO_MAX_LATENCY, .default_value = "5", .op_version = {GD_OP_VERSION_3_11_0}, .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC, |