From: Sage Weil Date: Tue, 2 Dec 2014 22:49:42 +0000 (-0800) Subject: crush/builder: break out new version 1 of crush_calc_straw X-Git-Tag: v0.80.9~11^2~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e02574ef5d3b66e73424a16460366de2d36eded3;p=ceph.git crush/builder: break out new version 1 of crush_calc_straw No change, yet. Signed-off-by: Sage Weil (cherry picked from commit 7c1203635f2b5911f281ce3a441905df6e9bd103) --- diff --git a/src/crush/builder.c b/src/crush/builder.c index 12f18b550988..64137dab4f18 100644 --- a/src/crush/builder.c +++ b/src/crush/builder.c @@ -441,43 +441,91 @@ int crush_calc_straw(struct crush_map *map, struct crush_bucket_straw *bucket) i=0; while (i < size) { - /* zero weight items get 0 length straws! */ - if (weights[reverse[i]] == 0) { - bucket->straws[reverse[i]] = 0; + if (map->straw_calc_version == 0) { + /* zero weight items get 0 length straws! */ + if (weights[reverse[i]] == 0) { + bucket->straws[reverse[i]] = 0; + i++; + continue; + } + + /* set this item's straw */ + bucket->straws[reverse[i]] = straw * 0x10000; + dprintk("item %d at %d weight %d straw %d (%lf)\n", + bucket->h.items[reverse[i]], + reverse[i], weights[reverse[i]], + bucket->straws[reverse[i]], straw); i++; - continue; - } + if (i == size) + break; - /* set this item's straw */ - bucket->straws[reverse[i]] = straw * 0x10000; - dprintk("item %d at %d weight %d straw %d (%lf)\n", - bucket->h.items[reverse[i]], - reverse[i], weights[reverse[i]], - bucket->straws[reverse[i]], straw); - i++; - if (i == size) break; - - /* same weight as previous? */ - if (weights[reverse[i]] == weights[reverse[i-1]]) { - /*dprintk("same as previous\n");*/ - continue; - } + /* same weight as previous? */ + if (weights[reverse[i]] == weights[reverse[i-1]]) { + dprintk("same as previous\n"); + continue; + } - /* adjust straw for next guy */ - wbelow += ((double)weights[reverse[i-1]] - lastw) * numleft; - for (j=i; jstraw_calc_version >= 1) { + /* zero weight items get 0 length straws! */ + if (weights[reverse[i]] == 0) { + bucket->straws[reverse[i]] = 0; + i++; + continue; + } + + /* set this item's straw */ + bucket->straws[reverse[i]] = straw * 0x10000; + dprintk("item %d at %d weight %d straw %d (%lf)\n", + bucket->h.items[reverse[i]], + reverse[i], weights[reverse[i]], + bucket->straws[reverse[i]], straw); + i++; + if (i == size) break; - wnext = numleft * (weights[reverse[i]] - weights[reverse[i-1]]); - pbelow = wbelow / (wbelow + wnext); - dprintk("wbelow %lf wnext %lf pbelow %lf numleft %d\n", - wbelow, wnext, pbelow, numleft); - straw *= pow((double)1.0 / pbelow, (double)1.0 / (double)numleft); + /* same weight as previous? */ + if (weights[reverse[i]] == weights[reverse[i-1]]) { + dprintk("same as previous\n"); + continue; + } - lastw = weights[reverse[i-1]]; + /* adjust straw for next guy */ + wbelow += ((double)weights[reverse[i-1]] - lastw) * + numleft; + for (j=i; j