crush: remove forcefeed functionality

Remove forcefeed functionality from CRUSH.  This is an ugly misfeature that
is mostly useless and unused.  Remove it.

Reflects ceph.git commit ed974b5000f2851207d860a651809af4a1867942.

Reviewed-by: Alex Elder <elder@inktank.com>
Signed-off-by: Sage Weil <sage@inktank.com>

Conflicts:

	net/ceph/crush/mapper.c
This commit is contained in:
Sage Weil 2012-05-07 15:39:29 -07:00
parent 0668216efe
commit 41ebcc0907
3 changed files with 2 additions and 49 deletions

View File

@ -14,7 +14,6 @@ extern int crush_find_rule(const struct crush_map *map, int ruleset, int type, i
extern int crush_do_rule(const struct crush_map *map, extern int crush_do_rule(const struct crush_map *map,
int ruleno, int ruleno,
int x, int *result, int result_max, int x, int *result, int result_max,
int forcefeed, /* -1 for none */
const __u32 *weights); const __u32 *weights);
#endif #endif

View File

@ -463,15 +463,12 @@ reject:
* @x: hash input * @x: hash input
* @result: pointer to result vector * @result: pointer to result vector
* @result_max: maximum result size * @result_max: maximum result size
* @force: force initial replica choice; -1 for none
*/ */
int crush_do_rule(const struct crush_map *map, int crush_do_rule(const struct crush_map *map,
int ruleno, int x, int *result, int result_max, int ruleno, int x, int *result, int result_max,
int force, const __u32 *weight) const __u32 *weight)
{ {
int result_len; int result_len;
int force_context[CRUSH_MAX_DEPTH];
int force_pos = -1;
int a[CRUSH_MAX_SET]; int a[CRUSH_MAX_SET];
int b[CRUSH_MAX_SET]; int b[CRUSH_MAX_SET];
int c[CRUSH_MAX_SET]; int c[CRUSH_MAX_SET];
@ -497,27 +494,6 @@ int crush_do_rule(const struct crush_map *map,
w = a; w = a;
o = b; o = b;
/*
* determine hierarchical context of force, if any. note
* that this may or may not correspond to the specific types
* referenced by the crush rule. it will also only affect
* the first descent (TAKE).
*/
if (force >= 0 &&
force < map->max_devices &&
map->device_parents[force] != 0 &&
!is_out(map, weight, force, x)) {
while (1) {
force_context[++force_pos] = force;
if (force >= 0)
force = map->device_parents[force];
else
force = map->bucket_parents[-1-force];
if (force == 0)
break;
}
}
for (step = 0; step < rule->len; step++) { for (step = 0; step < rule->len; step++) {
struct crush_rule_step *curstep = &rule->steps[step]; struct crush_rule_step *curstep = &rule->steps[step];
@ -525,14 +501,6 @@ int crush_do_rule(const struct crush_map *map,
switch (curstep->op) { switch (curstep->op) {
case CRUSH_RULE_TAKE: case CRUSH_RULE_TAKE:
w[0] = curstep->arg1; w[0] = curstep->arg1;
/* find position in force_context/hierarchy */
while (force_pos >= 0 && force_context[force_pos] != w[0])
force_pos--;
/* and move past it */
if (force_pos >= 0)
force_pos--;
wsize = 1; wsize = 1;
break; break;
@ -567,20 +535,6 @@ int crush_do_rule(const struct crush_map *map,
continue; continue;
} }
j = 0; j = 0;
if (osize == 0 && force_pos >= 0) {
/* skip any intermediate types */
while (force_pos &&
force_context[force_pos] < 0 &&
curstep->arg2 !=
map->buckets[-1 -
force_context[force_pos]]->type)
force_pos--;
o[osize] = force_context[force_pos];
if (recurse_to_leaf)
c[osize] = force_context[0];
j++;
force_pos--;
}
osize += crush_choose(map, osize += crush_choose(map,
map->buckets[-1-w[i]], map->buckets[-1-w[i]],
weight, weight,

View File

@ -1069,7 +1069,7 @@ static int *calc_pg_raw(struct ceph_osdmap *osdmap, struct ceph_pg pgid,
pps += poolid; pps += poolid;
*num = crush_do_rule(osdmap->crush, ruleno, pps, osds, *num = crush_do_rule(osdmap->crush, ruleno, pps, osds,
min_t(int, pool->v.size, *num), min_t(int, pool->v.size, *num),
-1, osdmap->osd_weight); osdmap->osd_weight);
return osds; return osds;
} }