diff options
-rw-r--r-- | xlators/cluster/dht/src/dht-layout.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/xlators/cluster/dht/src/dht-layout.c b/xlators/cluster/dht/src/dht-layout.c index 1e38d6be15a..31d85a5060b 100644 --- a/xlators/cluster/dht/src/dht-layout.c +++ b/xlators/cluster/dht/src/dht-layout.c @@ -465,11 +465,8 @@ dht_layout_entry_cmp (dht_layout_t *layout, int i, int j) - (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; + diff = (int64_t) layout->list[i].start + - (int64_t) layout->list[j].start; out: return diff; @@ -536,8 +533,20 @@ dht_layout_anomalies (xlator_t *this, loc_t *loc, dht_layout_t *layout, char is_virgin = 1; uint32_t no_space = 0; - /* TODO: explain what is happening */ - + /* This funtion scans through the layout spread of a directory to + check if there are any anomalies. Prior to calling this function + the layout entries should be sorted in the ascending order. + + If the layout entry has err != 0 + then increment the corresponding anomaly. + else + if (start of the current layout entry > stop + 1 of previous + non erroneous layout entry) + then it indicates a hole in the layout + if (start of the current layout entry < stop + 1 of previous + non erroneous layout entry) + then it indicates an overlap in the layout + */ last_stop = layout->list[0].start - 1; prev_stop = last_stop; |