summaryrefslogtreecommitdiffstats
path: root/xlators/cluster
diff options
context:
space:
mode:
authorPoornima G <pgurusid@redhat.com>2016-10-28 15:27:15 +0530
committerRajesh Joseph <rjoseph@redhat.com>2016-11-21 01:32:05 -0800
commitf7ab6c45963fa0da68acedfb14281cd2456abc68 (patch)
tree167679317da1c60ab5f61c2f444412e17e55339d /xlators/cluster
parent6b2c40d337bd30eea3ce56a71db8864e61a9a411 (diff)
afr,dht,ec: Replace GF_EVENT_CHILD_MODIFIED with event SOME_DESCENDENT_DOWN/UP
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 Change-Id: I704140b6598f7ec705493251d2dbc4191c965a58 BUG: 1396038 Signed-off-by: Poornima G <pgurusid@redhat.com> 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>
Diffstat (limited to 'xlators/cluster')
-rw-r--r--xlators/cluster/afr/src/afr-common.c38
-rw-r--r--xlators/cluster/dht/src/dht-common.c7
-rw-r--r--xlators/cluster/ec/src/ec.c6
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 d503609e8a2..dd6c1dfac5c 100644
--- a/xlators/cluster/afr/src/afr-common.c
+++ b/xlators/cluster/afr/src/afr-common.c
@@ -4374,27 +4374,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;
}
@@ -4563,7 +4557,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;
@@ -4587,7 +4581,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;
@@ -4599,7 +4593,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 ab3b893d151..a85627a683e 100644
--- a/xlators/cluster/dht/src/dht-common.c
+++ b/xlators/cluster/dht/src/dht-common.c
@@ -8915,15 +8915,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;
@@ -8968,7 +8967,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;