summaryrefslogtreecommitdiffstats
path: root/xlators/cluster
diff options
context:
space:
mode:
authorDan Lambright <dlambrig@redhat.com>2015-06-23 16:35:03 -0400
committerDan Lambright <dlambrig@redhat.com>2015-06-26 17:10:56 -0700
commit875aa01ec80e56d85d0bc6028c6f1417f6ab140f (patch)
treee5d57c306ba51ec0596f83fbab82364274ecdd1d /xlators/cluster
parent26ef697318a7fec5ed82b000e3be4e30cfb16b50 (diff)
cluster/tier: stop tier migration after graph switch
On a graph switch, a new xlator and private structures are created. The tier migration daemon must stop using the old xlator and private structures and begin using the new ones. Otherwise, when RPCs arrive (such as counter queries from glusterd), the new xlator will be consulted but it will not have up to date information. The fix detects a graph switch and exits the daemon in this case. Typical graph switches for the tier case would be turning off performance translators. Change-Id: Ibfbd4720dc82ea179b77c81b8f534abced21e3c8 BUG: 1226005 Signed-off-by: Dan Lambright <dlambrig@redhat.com> Reviewed-on: http://review.gluster.org/11372
Diffstat (limited to 'xlators/cluster')
-rw-r--r--xlators/cluster/dht/src/tier.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/xlators/cluster/dht/src/tier.c b/xlators/cluster/dht/src/tier.c
index c8c6ad94c7e..650414c50d9 100644
--- a/xlators/cluster/dht/src/tier.c
+++ b/xlators/cluster/dht/src/tier.c
@@ -776,6 +776,8 @@ tier_start (xlator_t *this, gf_defrag_info_t *defrag)
pthread_t demote_thread;
gf_boolean_t is_promotion_triggered = _gf_false;
gf_boolean_t is_demotion_triggered = _gf_false;
+ xlator_t *any = NULL;
+ xlator_t *xlator = NULL;
conf = this->private;
@@ -798,6 +800,20 @@ tier_start (xlator_t *this, gf_defrag_info_t *defrag)
while (1) {
+ /*
+ * Check if a graph switch occured. If so, stop migration
+ * thread. It will need to be restarted manually.
+ */
+ any = THIS->ctx->active->first;
+ xlator = xlator_search_by_name(any, this->name);
+
+ if (xlator != this) {
+ gf_msg (this->name, GF_LOG_INFO, 0,
+ DHT_MSG_LOG_TIER_STATUS,
+ "Detected graph switch. Exiting migration daemon.");
+ goto out;
+ }
+
sleep(1);
if (defrag->defrag_status != GF_DEFRAG_STATUS_STARTED) {