diff options
| author | shishir gowda <sgowda@redhat.com> | 2013-04-04 11:23:08 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2013-04-11 10:41:01 -0700 | 
| commit | a8b6cf1b64de7e03652c05ecd8d63b73bbd2523e (patch) | |
| tree | e0fe3b029f40aec76d09c8e48ed10b67bd6649f0 /xlators/cluster/dht/src/dht-layout.c | |
| parent | 2a734f92c4f2797523aaf2ec2803ea88382ec1d6 (diff) | |
cluster/distribute: Ignore non-participating subvols for layout checks
Backporting fix http://review.gluster.org/#/c/4668/
When subvols-per-directory is < available subvols, then there are layouts
which are not populated. This leads to incorrect identification of holes or
overlaps. We need to ignore layouts, which have err == 0, and start == stop.
In the current scenario (start == stop == 0).
Additionally, in layout-merge, treat missing xattrs as err = 0. In case of
missing layouts, anomalies will reset them.
For any other valid subvoles, err != 0 in case of layouts being zeroed out.
Also reverted back dht_selfheal_dir_xattr, which does layout calculation only
on subvols which have errors.
BUG: 921408
Change-Id: I75a8edcb92af5b53b3253c9addd7a812e9242836
Signed-off-by: shishir gowda <sgowda@redhat.com>
Reviewed-on: http://review.gluster.org/4800
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Diffstat (limited to 'xlators/cluster/dht/src/dht-layout.c')
| -rw-r--r-- | xlators/cluster/dht/src/dht-layout.c | 40 | 
1 files changed, 23 insertions, 17 deletions
diff --git a/xlators/cluster/dht/src/dht-layout.c b/xlators/cluster/dht/src/dht-layout.c index 34a7475bdc3..3331db5c518 100644 --- a/xlators/cluster/dht/src/dht-layout.c +++ b/xlators/cluster/dht/src/dht-layout.c @@ -365,7 +365,7 @@ dht_layout_merge (xlator_t *this, dht_layout_t *layout, xlator_t *subvol,          }          if (ret != 0) { -                layout->list[i].err = -1; +                layout->list[i].err = 0;                  gf_log (this->name, GF_LOG_TRACE,                          "missing disk layout on %s. err = %d",                          subvol->name, err); @@ -529,23 +529,29 @@ dht_layout_anomalies (xlator_t *this, loc_t *loc, dht_layout_t *layout,          prev_stop = last_stop;          for (i = 0; i < layout->cnt; i++) { -                if (layout->list[i].err) { -                        switch (layout->list[i].err) { -                        case -1: -                        case ENOENT: -                                missing++; -                                break; -                        case ENOTCONN: -                                down++; -                                break; -                        case ENOSPC: -                                no_space++; -                                break; -                        default: -                                misc++; +                switch (layout->list[i].err) { +                case -1: +                case ENOENT: +                        missing++; +                        break; +                case ENOTCONN: +                        down++; +                        break; +                case ENOSPC: +                        no_space++; +                        break; +                case 0: +                        /* if err == 0 and start == stop, then it is a non misc++; +                         * participating subvolume(spread-cnt). Then, do not +                         * check for anomalies. If start != stop, then treat it +                         * as misc err */ +                        if (layout->list[i].start == layout->list[i].stop) { +                                continue;                          } -                        continue; -                } +                        break; +                default: +                        misc++; +                 }                  is_virgin = 0;  | 
