summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnand Avati <avati@gluster.com>2011-02-04 21:43:19 +0000
committerAnand V. Avati <avati@dev.gluster.com>2011-02-22 02:11:53 -0800
commita144f2ca40d43a6ee3a50802fe1e8d1eda7a53b7 (patch)
treea9905a711fc1c0efb706dce7838cf9f0e8af44ed
parent595e0df48bf387a87eb62a76d437a7ea79a0bc8a (diff)
downloadglusterfs-a144f2ca40d43a6ee3a50802fe1e8d1eda7a53b7.tar.gz
glusterfs-a144f2ca40d43a6ee3a50802fe1e8d1eda7a53b7.tar.xz
glusterfs-a144f2ca40d43a6ee3a50802fe1e8d1eda7a53b7.zip
core: have framework for GF_EVENT_CHILD_MODIFIED notifcation event
If anything changes anywhere in the graph, all xlators know that something has changed. Previously dht and afr would mask certain events from propagating up. Now they forward GF_EVENT_CHILD_MODIFIED event in those situations Signed-off-by: Anand Avati <avati@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2450 (scalability enhancements) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2450
-rw-r--r--libglusterfs/src/defaults.c1
-rw-r--r--libglusterfs/src/glusterfs.h1
-rw-r--r--xlators/cluster/afr/src/afr-common.c4
-rw-r--r--xlators/cluster/dht/src/dht-common.c9
4 files changed, 14 insertions, 1 deletions
diff --git a/libglusterfs/src/defaults.c b/libglusterfs/src/defaults.c
index 718afeb9ac..00f84694a0 100644
--- a/libglusterfs/src/defaults.c
+++ b/libglusterfs/src/defaults.c
@@ -1218,6 +1218,7 @@ default_notify (xlator_t *this, int32_t event, void *data, ...)
}
break;
case GF_EVENT_CHILD_CONNECTING:
+ case GF_EVENT_CHILD_MODIFIED:
case GF_EVENT_CHILD_UP:
{
xlator_list_t *parent = this->parents;
diff --git a/libglusterfs/src/glusterfs.h b/libglusterfs/src/glusterfs.h
index a995d4ebff..aaf00c3115 100644
--- a/libglusterfs/src/glusterfs.h
+++ b/libglusterfs/src/glusterfs.h
@@ -332,6 +332,7 @@ typedef enum {
GF_EVENT_CHILD_UP,
GF_EVENT_CHILD_DOWN,
GF_EVENT_CHILD_CONNECTING,
+ GF_EVENT_CHILD_MODIFIED,
GF_EVENT_TRANSPORT_CLEANUP,
GF_EVENT_TRANSPORT_CONNECTED,
GF_EVENT_VOLFILE_MODIFIED,
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c
index 4b59d26db3..ffd2200066 100644
--- a/xlators/cluster/afr/src/afr-common.c
+++ b/xlators/cluster/afr/src/afr-common.c
@@ -2552,6 +2552,8 @@ afr_notify (xlator_t *this, int32_t event,
"going online.", ((xlator_t *)data)->name);
default_notify (this, event, data);
+ } else {
+ default_notify (this, GF_EVENT_CHILD_MODIFIED, data);
}
break;
@@ -2582,6 +2584,8 @@ afr_notify (xlator_t *this, int32_t event,
"until atleast one of them comes back up.");
default_notify (this, event, data);
+ } else {
+ default_notify (this, GF_EVENT_CHILD_MODIFIED, data);
}
break;
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c
index 18f15696b1..ef8fb1a602 100644
--- a/xlators/cluster/dht/src/dht-common.c
+++ b/xlators/cluster/dht/src/dht-common.c
@@ -5046,6 +5046,13 @@ dht_notify (xlator_t *this, int event, void *data, ...)
break;
+ case GF_EVENT_CHILD_MODIFIED:
+ subvol = data;
+
+ conf->gen++;
+
+ break;
+
case GF_EVENT_CHILD_DOWN:
subvol = data;
@@ -5134,7 +5141,7 @@ dht_notify (xlator_t *this, int event, void *data, ...)
}
}
- if (propagate)
+ if (propagate || event == GF_EVENT_CHILD_MODIFIED)
ret = default_notify (this, event, data);
return ret;