diff options
| author | shishir gowda <sgowda@redhat.com> | 2013-09-03 09:13:21 +0000 | 
|---|---|---|
| committer | Vijay Bellur <vbellur@redhat.com> | 2013-12-14 06:25:21 -0800 | 
| commit | 790c2813ef4898b28ebae8545c8d891ac4114bf1 (patch) | |
| tree | 5763f18d66c884d6fd700e7cce9bfc9f24682a98 /xlators/cluster | |
| parent | 6677b97f2d17699c74779922cf310adf8bff5558 (diff) | |
cluster/dht: Fix anomaly checkv3.4.2qa3
We were wrongly detecting holes/overlaps for already accounted
errors. Additionally, sort should also handle zero'ed out layout
Change-Id: Ic3d13e1d735b914f9acc01fe919bc90656baea48
BUG: 1003851
Signed-off-by: shishir gowda <sgowda@redhat.com>
Reviewed-on: http://review.gluster.org/5762
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Reviewed-on: http://review.gluster.org/6469
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'xlators/cluster')
| -rw-r--r-- | xlators/cluster/dht/src/dht-layout.c | 14 | 
1 files changed, 11 insertions, 3 deletions
diff --git a/xlators/cluster/dht/src/dht-layout.c b/xlators/cluster/dht/src/dht-layout.c index ca6f10d7a92..0a90a0a6cbf 100644 --- a/xlators/cluster/dht/src/dht-layout.c +++ b/xlators/cluster/dht/src/dht-layout.c @@ -453,12 +453,19 @@ dht_layout_entry_cmp (dht_layout_t *layout, int i, int j)  {          int64_t diff = 0; +        /* swap zero'ed out layouts to front, if needed */ +        if (!layout->list[j].start && !layout->list[j].stop) { +                diff = (int64_t) layout->list[i].stop +                       - (int64_t) layout->list[j].stop; +                       goto out; +        }          if (layout->list[i].err || layout->list[j].err)                  diff = layout->list[i].err - layout->list[j].err;          else                  diff = (int64_t) layout->list[i].start                          - (int64_t) layout->list[j].start; +out:          return diff;  } @@ -534,13 +541,13 @@ dht_layout_anomalies (xlator_t *this, loc_t *loc, dht_layout_t *layout,                  case ENOENT:  		case ESTALE:                          missing++; -                        break; +                        continue;                  case ENOTCONN:                          down++; -                        break; +                        continue;                  case ENOSPC:                          no_space++; -                        break; +                        continue;                  case 0:                          /* if err == 0 and start == stop, then it is a non misc++;                           * participating subvolume(spread-cnt). Then, do not @@ -552,6 +559,7 @@ dht_layout_anomalies (xlator_t *this, loc_t *loc, dht_layout_t *layout,                          break;                  default:                          misc++; +                        continue;                   }                  is_virgin = 0;  | 
