mirror of
https://github.com/ceph/ceph
synced 2025-01-31 07:22:56 +00:00
Merge remote-tracking branch 'origin/wip-9806-giant' into giant
Reviewed-by: Samuel Just <sam.just@inktank.com>
This commit is contained in:
commit
5d74c8101c
@ -2329,18 +2329,45 @@ bool pg_interval_t::is_new_interval(
|
||||
int new_up_primary,
|
||||
const vector<int> &old_up,
|
||||
const vector<int> &new_up,
|
||||
OSDMapRef osdmap,
|
||||
OSDMapRef lastmap,
|
||||
int old_min_size,
|
||||
int new_min_size,
|
||||
unsigned old_pg_num,
|
||||
unsigned new_pg_num,
|
||||
pg_t pgid) {
|
||||
return old_acting_primary != new_acting_primary ||
|
||||
new_acting != old_acting ||
|
||||
old_up_primary != new_up_primary ||
|
||||
new_up != old_up ||
|
||||
(!(lastmap->get_pools().count(pgid.pool()))) ||
|
||||
(lastmap->get_pools().find(pgid.pool())->second.min_size !=
|
||||
osdmap->get_pools().find(pgid.pool())->second.min_size) ||
|
||||
pgid.is_split(lastmap->get_pg_num(pgid.pool()),
|
||||
osdmap->get_pg_num(pgid.pool()), 0);
|
||||
old_min_size != new_min_size ||
|
||||
pgid.is_split(old_pg_num, new_pg_num, 0);
|
||||
}
|
||||
|
||||
bool pg_interval_t::is_new_interval(
|
||||
int old_acting_primary,
|
||||
int new_acting_primary,
|
||||
const vector<int> &old_acting,
|
||||
const vector<int> &new_acting,
|
||||
int old_up_primary,
|
||||
int new_up_primary,
|
||||
const vector<int> &old_up,
|
||||
const vector<int> &new_up,
|
||||
OSDMapRef osdmap,
|
||||
OSDMapRef lastmap,
|
||||
pg_t pgid) {
|
||||
return !(lastmap->get_pools().count(pgid.pool())) ||
|
||||
is_new_interval(old_acting_primary,
|
||||
new_acting_primary,
|
||||
old_acting,
|
||||
new_acting,
|
||||
old_up_primary,
|
||||
new_up_primary,
|
||||
old_up,
|
||||
new_up,
|
||||
lastmap->get_pools().find(pgid.pool())->second.min_size,
|
||||
osdmap->get_pools().find(pgid.pool())->second.min_size,
|
||||
lastmap->get_pg_num(pgid.pool()),
|
||||
osdmap->get_pg_num(pgid.pool()),
|
||||
pgid);
|
||||
}
|
||||
|
||||
bool pg_interval_t::check_new_interval(
|
||||
|
@ -1773,6 +1773,25 @@ struct pg_interval_t {
|
||||
void dump(Formatter *f) const;
|
||||
static void generate_test_instances(list<pg_interval_t*>& o);
|
||||
|
||||
/**
|
||||
* Determines whether there is an interval change
|
||||
*/
|
||||
static bool is_new_interval(
|
||||
int old_acting_primary,
|
||||
int new_acting_primary,
|
||||
const vector<int> &old_acting,
|
||||
const vector<int> &new_acting,
|
||||
int old_up_primary,
|
||||
int new_up_primary,
|
||||
const vector<int> &old_up,
|
||||
const vector<int> &new_up,
|
||||
int old_min_size,
|
||||
int new_min_size,
|
||||
unsigned old_pg_num,
|
||||
unsigned new_pg_num,
|
||||
pg_t pgid
|
||||
);
|
||||
|
||||
/**
|
||||
* Determines whether there is an interval change
|
||||
*/
|
||||
|
@ -2054,9 +2054,29 @@ int Objecter::_calc_target(op_target_t *t, bool any_change)
|
||||
return RECALC_OP_TARGET_POOL_DNE;
|
||||
}
|
||||
}
|
||||
int primary;
|
||||
vector<int> acting;
|
||||
osdmap->pg_to_acting_osds(pgid, &acting, &primary);
|
||||
|
||||
int min_size = pi->min_size;
|
||||
unsigned pg_num = pi->get_pg_num();
|
||||
int up_primary, acting_primary;
|
||||
vector<int> up, acting;
|
||||
osdmap->pg_to_up_acting_osds(pgid, &up, &up_primary,
|
||||
&acting, &acting_primary);
|
||||
if (any_change && pg_interval_t::is_new_interval(
|
||||
t->acting_primary,
|
||||
acting_primary,
|
||||
t->acting,
|
||||
acting,
|
||||
t->up_primary,
|
||||
up_primary,
|
||||
t->up,
|
||||
up,
|
||||
t->min_size,
|
||||
min_size,
|
||||
t->pg_num,
|
||||
pg_num,
|
||||
pi->raw_pg_to_pg(pgid))) {
|
||||
force_resend = true;
|
||||
}
|
||||
|
||||
bool need_resend = false;
|
||||
|
||||
@ -2068,15 +2088,20 @@ int Objecter::_calc_target(op_target_t *t, bool any_change)
|
||||
|
||||
if (t->pgid != pgid ||
|
||||
is_pg_changed(
|
||||
t->primary, t->acting, primary, acting, t->used_replica || any_change) ||
|
||||
t->acting_primary, t->acting, acting_primary, acting,
|
||||
t->used_replica || any_change) ||
|
||||
force_resend) {
|
||||
t->pgid = pgid;
|
||||
t->acting = acting;
|
||||
t->primary = primary;
|
||||
t->acting_primary = acting_primary;
|
||||
t->up_primary = up_primary;
|
||||
t->up = up;
|
||||
t->min_size = min_size;
|
||||
t->pg_num = pg_num;
|
||||
ldout(cct, 10) << __func__ << " "
|
||||
<< " pgid " << pgid << " acting " << acting << dendl;
|
||||
t->used_replica = false;
|
||||
if (primary == -1) {
|
||||
if (acting_primary == -1) {
|
||||
t->osd = -1;
|
||||
} else {
|
||||
int osd;
|
||||
@ -2112,7 +2137,7 @@ int Objecter::_calc_target(op_target_t *t, bool any_change)
|
||||
assert(best >= 0);
|
||||
osd = acting[best];
|
||||
} else {
|
||||
osd = primary;
|
||||
osd = acting_primary;
|
||||
}
|
||||
t->osd = osd;
|
||||
}
|
||||
|
@ -1078,8 +1078,12 @@ public:
|
||||
pg_t base_pgid; ///< explciti pg target, if any
|
||||
|
||||
pg_t pgid; ///< last pg we mapped to
|
||||
vector<int> acting; ///< acting for last pg we mapped to
|
||||
int primary; ///< primary for last pg we mapped to
|
||||
unsigned pg_num; ///< last pg_num we mapped to
|
||||
vector<int> up; ///< set of up osds for last pg we mapped to
|
||||
vector<int> acting; ///< set of acting osds for last pg we mapped to
|
||||
int up_primary; ///< primary for last pg we mapped to based on the up set
|
||||
int acting_primary; ///< primary for last pg we mapped to based on the acting set
|
||||
int min_size; ///< the min size of the pool when were were last mapped
|
||||
|
||||
bool used_replica;
|
||||
bool paused;
|
||||
@ -1091,7 +1095,10 @@ public:
|
||||
base_oid(oid),
|
||||
base_oloc(oloc),
|
||||
precalc_pgid(false),
|
||||
primary(-1),
|
||||
pg_num(0),
|
||||
up_primary(-1),
|
||||
acting_primary(-1),
|
||||
min_size(-1),
|
||||
used_replica(false),
|
||||
paused(false),
|
||||
osd(-1)
|
||||
|
Loading…
Reference in New Issue
Block a user