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
1 changed files with 6 additions and 1 deletions

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, * Return acting set length. *primary is set to acting primary osd id,
* or -1 if acting set is empty. * or -1 if acting set is empty.
@ -1644,6 +1644,11 @@ static int apply_temps(struct ceph_osdmap *osdmap,
temp_primary = *primary; temp_primary = *primary;
} }
/* primary_temp? */
pg = __lookup_pg_mapping(&osdmap->primary_temp, pgid);
if (pg)
temp_primary = pg->primary_temp.osd;
*primary = temp_primary; *primary = temp_primary;
return temp_len; return temp_len;
} }