libceph: add support for primary_temp mappings

Change apply_temp() to override primary in the same way pg_temp
overrides osd set.  primary_temp overrides pg_temp primary too.

Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com>
Reviewed-by: Alex Elder <elder@linaro.org>
This commit is contained in:
Ilya Dryomov 2014-03-24 17:12:48 +02:00 committed by Sage Weil
parent 8008ab1080
commit 5e8d4d36bf

View File

@ -1597,7 +1597,7 @@ static int raw_to_up_osds(struct ceph_osdmap *osdmap,
}
/*
* Given up set, apply pg_temp mapping.
* Given up set, apply pg_temp and primary_temp mappings.
*
* Return acting set length. *primary is set to acting primary osd id,
* or -1 if acting set is empty.
@ -1644,6 +1644,11 @@ static int apply_temps(struct ceph_osdmap *osdmap,
temp_primary = *primary;
}
/* primary_temp? */
pg = __lookup_pg_mapping(&osdmap->primary_temp, pgid);
if (pg)
temp_primary = pg->primary_temp.osd;
*primary = temp_primary;
return temp_len;
}