cluster/tier: fix loading tier.so into glusterd
glusterd occasionally loads shared libraries of translators. This failed for tiering due to a reference to dht_methods which is defined as a global variable which is not necessary. The global variable has been removed and this is now a member of dht_conf and is now initialised in the *_init calls. Change-Id: Ifa0a21e3962b5cd8d9b927ef1d087d3b25312953 BUG: 1287842 Signed-off-by: N Balachandran <nbalacha@redhat.com> Reviewed-on: http://review.gluster.org/12863 Tested-by: NetBSD Build System <jenkins@build.gluster.org> Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Dan Lambright <dlambrig@redhat.com> Tested-by: Dan Lambright <dlambrig@redhat.com>
This commit is contained in:
parent
cae9512d60
commit
96fc7f64da
@ -26,8 +26,8 @@ function create_dist_tier_vol () {
|
||||
TEST $CLI volume attach-tier $V0 $H0:$B0/hot/${V0}{0..$1}
|
||||
TEST $CLI volume set $V0 cluster.tier-demote-frequency $DEMOTE_FREQ
|
||||
TEST $CLI volume set $V0 cluster.tier-promote-frequency $PROMOTE_FREQ
|
||||
TEST $CLI volume set $V0 cluster.read-freq-threshold 50
|
||||
TEST $CLI volume set $V0 cluster.write-freq-threshold 50
|
||||
TEST $CLI volume set $V0 cluster.read-freq-threshold 0
|
||||
TEST $CLI volume set $V0 cluster.write-freq-threshold 0
|
||||
TEST $CLI volume set $V0 cluster.tier-mode test
|
||||
}
|
||||
|
||||
|
@ -3704,8 +3704,7 @@ dht_setxattr (call_frame_t *frame, xlator_t *this,
|
||||
conf = this->private;
|
||||
GF_VALIDATE_OR_GOTO (this->name, conf, err);
|
||||
|
||||
methods = conf->methods;
|
||||
GF_VALIDATE_OR_GOTO (this->name, conf->methods, err);
|
||||
methods = &(conf->methods);
|
||||
|
||||
/* Rebalance daemon is allowed to set internal keys */
|
||||
if (!conf->defrag)
|
||||
@ -4591,8 +4590,7 @@ dht_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,
|
||||
conf = this->private;
|
||||
GF_VALIDATE_OR_GOTO(this->name, conf, unwind);
|
||||
|
||||
methods = conf->methods;
|
||||
GF_VALIDATE_OR_GOTO(this->name, conf->methods, done);
|
||||
methods = &(conf->methods);
|
||||
|
||||
if (op_ret < 0)
|
||||
goto done;
|
||||
@ -4812,8 +4810,7 @@ dht_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
|
||||
conf = this->private;
|
||||
GF_VALIDATE_OR_GOTO (this->name, conf, done);
|
||||
|
||||
methods = conf->methods;
|
||||
GF_VALIDATE_OR_GOTO (this->name, conf->methods, done);
|
||||
methods = &(conf->methods);
|
||||
|
||||
if (op_ret < 0)
|
||||
goto done;
|
||||
@ -5279,9 +5276,7 @@ dht_mknod_do (call_frame_t *frame)
|
||||
|
||||
GF_VALIDATE_OR_GOTO (this->name, conf, err);
|
||||
|
||||
methods = conf->methods;
|
||||
|
||||
GF_VALIDATE_OR_GOTO (this->name, conf->methods, err);
|
||||
methods = &(conf->methods);
|
||||
|
||||
/* We don't need parent_loc anymore */
|
||||
loc_wipe (&local->loc);
|
||||
@ -6229,9 +6224,7 @@ dht_create_do (call_frame_t *frame)
|
||||
|
||||
GF_VALIDATE_OR_GOTO (this->name, conf, err);
|
||||
|
||||
methods = conf->methods;
|
||||
|
||||
GF_VALIDATE_OR_GOTO (this->name, conf->methods, err);
|
||||
methods = &(conf->methods);
|
||||
|
||||
/* We don't need parent_loc anymore */
|
||||
loc_wipe (&local->loc);
|
||||
@ -7663,8 +7656,7 @@ dht_notify (xlator_t *this, int event, void *data, ...)
|
||||
conf = this->private;
|
||||
GF_VALIDATE_OR_GOTO (this->name, conf, out);
|
||||
|
||||
methods = conf->methods;
|
||||
GF_VALIDATE_OR_GOTO (this->name, methods, out);
|
||||
methods = &(conf->methods);
|
||||
|
||||
/* had all subvolumes reported status once till now? */
|
||||
had_heard_from_all = 1;
|
||||
|
@ -482,7 +482,7 @@ struct dht_conf {
|
||||
gf_boolean_t randomize_by_gfid;
|
||||
char *dthrottle;
|
||||
|
||||
dht_methods_t *methods;
|
||||
dht_methods_t methods;
|
||||
|
||||
struct mem_pool *lock_pool;
|
||||
|
||||
|
@ -582,8 +582,7 @@ dht_subvol_get_hashed (xlator_t *this, loc_t *loc)
|
||||
conf = this->private;
|
||||
GF_VALIDATE_OR_GOTO (this->name, conf, out);
|
||||
|
||||
methods = conf->methods;
|
||||
GF_VALIDATE_OR_GOTO (this->name, conf->methods, out);
|
||||
methods = &(conf->methods);
|
||||
|
||||
if (__is_root_gfid (loc->gfid)) {
|
||||
subvol = dht_first_up_subvol (this);
|
||||
|
@ -3361,15 +3361,8 @@ gf_defrag_start_crawl (void *data)
|
||||
}
|
||||
|
||||
if (defrag->cmd == GF_DEFRAG_CMD_START_TIER) {
|
||||
methods = conf->methods;
|
||||
if (!methods) {
|
||||
gf_msg (this->name, GF_LOG_ERROR, 0,
|
||||
DHT_MSG_LOG_TIER_ERROR,
|
||||
"Methods invalid for translator.");
|
||||
defrag->defrag_status = GF_DEFRAG_STATUS_FAILED;
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
methods = &(conf->methods);
|
||||
|
||||
methods->migration_other(this, defrag);
|
||||
if (defrag->cmd == GF_DEFRAG_CMD_START_DETACH_TIER) {
|
||||
|
||||
|
@ -564,6 +564,32 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int
|
||||
dht_init_methods (xlator_t *this)
|
||||
{
|
||||
int ret = -1;
|
||||
dht_conf_t *conf = NULL;
|
||||
dht_methods_t *methods = NULL;
|
||||
|
||||
GF_VALIDATE_OR_GOTO ("dht", this, err);
|
||||
|
||||
conf = this->private;
|
||||
methods = &(conf->methods);
|
||||
|
||||
methods->migration_get_dst_subvol = dht_migration_get_dst_subvol;
|
||||
methods->migration_needed = dht_migration_needed;
|
||||
methods->migration_other = NULL;
|
||||
methods->layout_search = dht_layout_search;
|
||||
|
||||
ret = 0;
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int
|
||||
dht_init (xlator_t *this)
|
||||
{
|
||||
@ -803,7 +829,8 @@ dht_init (xlator_t *this)
|
||||
if (dht_set_subvol_range(this))
|
||||
goto err;
|
||||
|
||||
conf->methods = &dht_methods;
|
||||
if (dht_init_methods (this))
|
||||
goto err;
|
||||
|
||||
return 0;
|
||||
|
||||
|
@ -12,12 +12,6 @@
|
||||
#include "statedump.h"
|
||||
#include "dht-common.h"
|
||||
|
||||
dht_methods_t dht_methods = {
|
||||
.migration_get_dst_subvol = dht_migration_get_dst_subvol,
|
||||
.migration_needed = dht_migration_needed,
|
||||
.layout_search = dht_layout_search,
|
||||
};
|
||||
|
||||
class_methods_t class_methods = {
|
||||
.init = dht_init,
|
||||
.fini = dht_fini,
|
||||
|
@ -1571,12 +1571,6 @@ tier_search (xlator_t *this, dht_layout_t *layout, const char *name)
|
||||
return subvol;
|
||||
}
|
||||
|
||||
dht_methods_t tier_methods = {
|
||||
.migration_get_dst_subvol = tier_migration_get_dst,
|
||||
.migration_other = tier_start,
|
||||
.migration_needed = tier_migration_needed,
|
||||
.layout_search = tier_search,
|
||||
};
|
||||
|
||||
static int
|
||||
tier_load_externals (xlator_t *this)
|
||||
@ -1630,6 +1624,32 @@ int tier_validate_mode (char *mode)
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
tier_init_methods (xlator_t *this)
|
||||
{
|
||||
int ret = -1;
|
||||
dht_conf_t *conf = NULL;
|
||||
dht_methods_t *methods = NULL;
|
||||
|
||||
GF_VALIDATE_OR_GOTO ("tier", this, err);
|
||||
|
||||
conf = this->private;
|
||||
|
||||
methods = &(conf->methods);
|
||||
|
||||
methods->migration_get_dst_subvol = tier_migration_get_dst;
|
||||
methods->migration_other = tier_start;
|
||||
methods->migration_needed = tier_migration_needed;
|
||||
methods->layout_search = tier_search;
|
||||
|
||||
ret = 0;
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int
|
||||
tier_init (xlator_t *this)
|
||||
{
|
||||
@ -1645,13 +1665,19 @@ tier_init (xlator_t *this)
|
||||
if (ret) {
|
||||
gf_msg (this->name, GF_LOG_ERROR, 0,
|
||||
DHT_MSG_LOG_TIER_ERROR,
|
||||
"dht_init failed");
|
||||
"tier_init failed");
|
||||
goto out;
|
||||
}
|
||||
|
||||
conf = this->private;
|
||||
|
||||
conf->methods = &tier_methods;
|
||||
ret = tier_init_methods (this);
|
||||
if (ret) {
|
||||
gf_msg (this->name, GF_LOG_ERROR, 0,
|
||||
DHT_MSG_LOG_TIER_ERROR,
|
||||
"tier_init_methods failed");
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (conf->subvolume_cnt != 2) {
|
||||
gf_msg (this->name, GF_LOG_ERROR, 0,
|
||||
|
Loading…
x
Reference in New Issue
Block a user