diff options
author | Poornima G <pgurusid@redhat.com> | 2016-10-28 15:27:15 +0530 |
---|---|---|
committer | Pranith Kumar Karampuri <pkarampu@redhat.com> | 2016-12-13 01:46:14 -0800 |
commit | c35cb76498749d7d34ebb8134f5780fe060d789d (patch) | |
tree | adba10877a4b861093f347d43f3838b7fd66690c /xlators/cluster | |
parent | 7e35f4c1a8bc5db145aba54b88daf16611de803b (diff) |
afr,dht,ec: Replace GF_EVENT_CHILD_MODIFIED with event SOME_DESCENDENT_DOWN/UP
Backport of http://review.gluster.org/#/c/15764/
Currently these are few events related to child_up/down:
GF_EVENT_CHILD_UP : Issued when any of the protocol client
connects.
GF_EVENT_CHILD_MODIFIED : Issued by afr/dht/ec
GF_EVENT_CHILD_DOWN : Issued when any of the protocol client
disconnects.
These events get modified at the dht/afr/ec layers. Here is a
brief on the same.
DHT:
- All the subvolumes reported once, and atleast one child came
up, then GF_EVENT_CHILD_UP is issued
- connect GF_EVENT_CHILD_UP is issued
- disconnect GF_EVENT_CHILD_MODIFIED is issued
- All the subvolumes disconnected, GF_EVENT_CHILD_DOWN is issued
AFR:
- First subvolume came up, then GF_EVENT_CHILD_UP is issued
- Subsequent subvolumes coming up, results in GF_EVENT_CHILD_MODIFIED
- Any of the subvolumes go down, then GF_EVENT_SOME_CHILD_DOWN is issued
- Last up subvolume goes down, then GF_EVENT_CHILD_DOWN is issued
Until the patch [1] introduced GF_EVENT_SOME_CHILD_UP,
GF_EVENT_CHILD_MODIFIED was issued by afr/dht when any of the subvolumes
go up or down.
Now with md-cache changes, there is a necessity to differentiate between
child up and down. Hence, introducing GF_EVENT_SOME_DESCENDENT_DOWN/UP and
getting rid of GF_EVENT_CHILD_MODIFIED.
[1] http://review.gluster.org/12573
>Reviewed-on: http://review.gluster.org/15764
>CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
>NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
>Smoke: Gluster Build System <jenkins@build.gluster.org>
>Reviewed-by: N Balachandran <nbalacha@redhat.com>
>Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
>Reviewed-by: Rajesh Joseph <rjoseph@redhat.com>
(cherry picked from commit f7ab6c45963fa0da68acedfb14281cd2456abc68)
Change-Id: I704140b6598f7ec705493251d2dbc4191c965a58
BUG: 1396880
Signed-off-by: Poornima G <pgurusid@redhat.com>
Reviewed-on: http://review.gluster.org/15890
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Smoke: Gluster Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
Diffstat (limited to 'xlators/cluster')
-rw-r--r-- | xlators/cluster/afr/src/afr-common.c | 38 | ||||
-rw-r--r-- | xlators/cluster/dht/src/dht-common.c | 7 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec.c | 6 |
3 files changed, 24 insertions, 27 deletions
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c index a406e43e9f1..e1ed4fc5b44 100644 --- a/xlators/cluster/afr/src/afr-common.c +++ b/xlators/cluster/afr/src/afr-common.c @@ -4570,27 +4570,21 @@ __afr_transform_event_from_state (afr_private_t *priv) return GF_EVENT_MAXVAL; up_children = __afr_get_up_children_count (priv); - if (up_children) { - /* We received at least one child up and there are pending - * notifications from some children. Treat these children as - * having sent a GF_EVENT_CHILD_DOWN. i.e. set the event as - * GF_EVENT_CHILD_MODIFIED, as done in afr_notify() */ - for (i = 0; i < priv->child_count; i++) { - if (priv->last_event[i]) - continue; - priv->last_event[i] = GF_EVENT_CHILD_MODIFIED; - priv->child_up[i] = 0; - } + /* Treat the children with pending notification, as having sent a + * GF_EVENT_CHILD_DOWN. i.e. set the event as GF_EVENT_SOME_DESCENDENT_DOWN, + * as done in afr_notify() */ + for (i = 0; i < priv->child_count; i++) { + if (priv->last_event[i]) + continue; + priv->last_event[i] = GF_EVENT_SOME_DESCENDENT_DOWN; + priv->child_up[i] = 0; + } + + if (up_children) + /* We received at least one child up */ return GF_EVENT_CHILD_UP; - } else { - for (i = 0; i < priv->child_count; i++) { - if (priv->last_event[i]) - continue; - priv->last_event[i] = GF_EVENT_SOME_CHILD_DOWN; - priv->child_up[i] = 0; - } + else return GF_EVENT_CHILD_DOWN; - } return GF_EVENT_MAXVAL; } @@ -4759,7 +4753,7 @@ afr_notify (xlator_t *this, int32_t event, "subvol=%s", this->name); } else { - event = GF_EVENT_CHILD_MODIFIED; + event = GF_EVENT_SOME_DESCENDENT_UP; } priv->last_event[idx] = event; @@ -4783,7 +4777,7 @@ afr_notify (xlator_t *this, int32_t event, gf_event (EVENT_AFR_SUBVOLS_DOWN, "subvol=%s", this->name); } else { - event = GF_EVENT_SOME_CHILD_DOWN; + event = GF_EVENT_SOME_DESCENDENT_DOWN; } priv->last_event[idx] = event; @@ -4795,7 +4789,7 @@ afr_notify (xlator_t *this, int32_t event, break; - case GF_EVENT_SOME_CHILD_DOWN: + case GF_EVENT_SOME_DESCENDENT_DOWN: priv->last_event[idx] = event; break; case GF_EVENT_UPCALL: diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index 29061b8f0de..7710fbd2286 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -8682,15 +8682,14 @@ dht_notify (xlator_t *this, int event, void *data, ...) break; - case GF_EVENT_CHILD_MODIFIED: + case GF_EVENT_SOME_DESCENDENT_UP: subvol = data; - conf->gen++; propagate = 1; break; - case GF_EVENT_SOME_CHILD_DOWN: + case GF_EVENT_SOME_DESCENDENT_DOWN: subvol = data; propagate = 1; @@ -8735,7 +8734,7 @@ dht_notify (xlator_t *this, int event, void *data, ...) for (i = 0; i < conf->subvolume_cnt; i++) if (conf->last_event[i] != event) - event = GF_EVENT_CHILD_MODIFIED; + event = GF_EVENT_SOME_DESCENDENT_DOWN; break; case GF_EVENT_CHILD_CONNECTING: diff --git a/xlators/cluster/ec/src/ec.c b/xlators/cluster/ec/src/ec.c index e10de4e38aa..97786657071 100644 --- a/xlators/cluster/ec/src/ec.c +++ b/xlators/cluster/ec/src/ec.c @@ -471,6 +471,7 @@ ec_notify (xlator_t *this, int32_t event, void *data, void *data2) dict_t *input = NULL; dict_t *output = NULL; gf_boolean_t propagate = _gf_true; + int32_t orig_event = event; gf_msg_trace (this->name, 0, "NOTIFY(%d): %p, %p", event, data, data2); @@ -529,7 +530,10 @@ ec_notify (xlator_t *this, int32_t event, void *data, void *data2) if (event != GF_EVENT_MAXVAL) { if (event == old_event) { - event = GF_EVENT_CHILD_MODIFIED; + if (orig_event == GF_EVENT_CHILD_UP) + event = GF_EVENT_SOME_DESCENDENT_UP; + else /* orig_event has to be GF_EVENT_CHILD_DOWN */ + event = GF_EVENT_SOME_DESCENDENT_DOWN; } } else { propagate = _gf_false; |