diff options
| author | shishirng <shishirng@gluster.com> | 2012-01-18 15:29:15 +0530 | 
|---|---|---|
| committer | Vijay Bellur <vijay@gluster.com> | 2012-02-19 01:31:19 -0800 | 
| commit | 7ba1e1ed45cee56ef51b9c04df99c976546d5d04 (patch) | |
| tree | d3e4121729d51852a120ba5f067aa8a64f39b624 /xlators/cluster/dht/src/dht.c | |
| parent | 061d70e8195d082043b071118333b7e3173fa3ec (diff) | |
cluster/dht: Rebalance will be a new glusterfs process
rebalance will not use any maintainance clients. It is replaced by syncops,
with the volfile. Brickop (communication between glusterd<->glusterfs process)
is used for status and stop commands.
Dept-first traversal of dir is maintained, but data is migrated as and when
encounterd.
fix-layout (dir)
do
        Complete migrate-data of dir
        fix-layout (subdir)
done
Rebalance state is saved in the vol file, for restart-ability.
A disconnect event and pidfile state determine the defrag-status
Signed-off-by: shishirng <shishirng@gluster.com>
Change-Id: Iec6c80c84bbb2142d840242c28db3d5f5be94d01
BUG: 763844
Reviewed-on: http://review.gluster.com/2540
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Diffstat (limited to 'xlators/cluster/dht/src/dht.c')
| -rw-r--r-- | xlators/cluster/dht/src/dht.c | 46 | 
1 files changed, 40 insertions, 6 deletions
diff --git a/xlators/cluster/dht/src/dht.c b/xlators/cluster/dht/src/dht.c index 18fee7cd3c6..816bf868e88 100644 --- a/xlators/cluster/dht/src/dht.c +++ b/xlators/cluster/dht/src/dht.c @@ -182,11 +182,20 @@ out:  int  notify (xlator_t *this, int event, void *data, ...)  { -        int ret = -1; +        int              ret = -1; +        va_list          ap; +        dict_t          *output = NULL;          GF_VALIDATE_OR_GOTO ("dht", this, out); -        ret = dht_notify (this, event, data); + +        if (!data) +                goto out; + +        va_start (ap, data); +        output = va_arg (ap, dict_t*); + +        ret = dht_notify (this, event, data, output);  out:          return ret; @@ -343,10 +352,13 @@ out:  int  init (xlator_t *this)  { -        dht_conf_t    *conf = NULL; -        char          *temp_str = NULL; -        int            ret = -1; -        int            i = 0; +        dht_conf_t                      *conf           = NULL; +        char                            *temp_str       = NULL; +        int                              ret            = -1; +        int                              i              = 0; +        gf_defrag_info_t                *defrag         = NULL; +        int                              cmd            = 0; +          GF_VALIDATE_OR_GOTO ("dht", this, err); @@ -366,6 +378,24 @@ init (xlator_t *this)                  goto err;          } +        ret = dict_get_int32 (this->options, "rebalance-cmd", &cmd); + +        if (cmd) { +                defrag = GF_CALLOC (1, sizeof (gf_defrag_info_t), +                                    gf_defrag_info_mt); + +                GF_VALIDATE_OR_GOTO (this->name, defrag, err); + +                LOCK_INIT (&defrag->lock); + +                defrag->is_exiting = 0; + +                defrag->cmd = cmd; + +                conf->defrag = defrag; +        } + +          conf->search_unhashed = GF_DHT_LOOKUP_UNHASHED_ON;          if (dict_get_str (this->options, "lookup-unhashed", &temp_str) == 0) {                  /* If option is not "auto", other options _should_ be boolean */ @@ -550,5 +580,9 @@ struct volume_options options[] = {          { .key  = {"decommissioned-bricks"},            .type = GF_OPTION_TYPE_ANY,          }, +        { .key  = {"rebalance-cmd"}, +          .type = GF_OPTION_TYPE_INT, +        }, +          { .key  = {NULL} },  };  | 
