Skip to content

Commit

Permalink
Objecter: pg_interval_t::is_new_interval needs pgid from previous pool
Browse files Browse the repository at this point in the history
When increasing the pg_num of a pool, an assert would fail since the
calculated pgid seed would be for the pool's new pg_num value instead
of the previous pg_num value.

Fixes: ceph#10399
Backport: infernalis, hammer, firefly
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
  • Loading branch information
Jason Dillaman committed Aug 24, 2015
1 parent 888a633 commit f20f7a2
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 13 deletions.
4 changes: 3 additions & 1 deletion src/osdc/Objecter.cc
Expand Up @@ -2482,6 +2482,7 @@ int Objecter::_calc_target(op_target_t *t, epoch_t *last_force_resend, bool any
osdmap->pg_to_up_acting_osds(pgid, &up, &up_primary,
&acting, &acting_primary);
bool sort_bitwise = osdmap->test_flag(CEPH_OSDMAP_SORTBITWISE);
unsigned prev_seed = ceph_stable_mod(pgid.ps(), t->pg_num, t->pg_num_mask);
if (any_change && pg_interval_t::is_new_interval(
t->acting_primary,
acting_primary,
Expand All @@ -2499,7 +2500,7 @@ int Objecter::_calc_target(op_target_t *t, epoch_t *last_force_resend, bool any
pg_num,
t->sort_bitwise,
sort_bitwise,
pi->raw_pg_to_pg(pgid))) {
pg_t(prev_seed, pgid.pool(), pgid.preferred()))) {
force_resend = true;
}

Expand All @@ -2524,6 +2525,7 @@ int Objecter::_calc_target(op_target_t *t, epoch_t *last_force_resend, bool any
t->size = size;
t->min_size = min_size;
t->pg_num = pg_num;
t->pg_num_mask = pi->get_pg_num_mask();
t->sort_bitwise = sort_bitwise;
ldout(cct, 10) << __func__ << " "
<< " pgid " << pgid << " acting " << acting << dendl;
Expand Down
26 changes: 14 additions & 12 deletions src/osdc/Objecter.h
Expand Up @@ -1123,18 +1123,19 @@ class Objecter : public md_config_obs_t, public Dispatcher {
object_t target_oid;
object_locator_t target_oloc;

bool precalc_pgid; ///< true if we are directed at base_pgid, not base_oid
pg_t base_pgid; ///< explciti pg target, if any

pg_t pgid; ///< 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 size; ///< the size of the pool when were were last mapped
int min_size; ///< the min size of the pool when were were last mapped
bool sort_bitwise; ///< whether the hobject_t sort order is bitwise
bool precalc_pgid; ///< true if we are directed at base_pgid, not base_oid
pg_t base_pgid; ///< explciti pg target, if any

pg_t pgid; ///< last pg we mapped to
unsigned pg_num; ///< last pg_num we mapped to
unsigned pg_num_mask; ///< last pg_num_mask 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 size; ///< the size of the pool when were were last mapped
int min_size; ///< the min size of the pool when were were last mapped
bool sort_bitwise; ///< whether the hobject_t sort order is bitwise

bool used_replica;
bool paused;
Expand All @@ -1147,6 +1148,7 @@ class Objecter : public md_config_obs_t, public Dispatcher {
base_oloc(oloc),
precalc_pgid(false),
pg_num(0),
pg_num_mask(0),
up_primary(-1),
acting_primary(-1),
size(-1),
Expand Down

0 comments on commit f20f7a2

Please sign in to comment.