Commit ae78dd81 authored by Ilya Dryomov's avatar Ilya Dryomov

libceph: make RECOVERY_DELETES feature create a new interval

This is needed so that the OSDs can regenerate the missing set at the
start of a new interval where support for recovery deletes changed.
Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
Reviewed-by: default avatarSage Weil <sage@redhat.com>
parent f53b7665
...@@ -148,6 +148,7 @@ struct ceph_osd_request_target { ...@@ -148,6 +148,7 @@ struct ceph_osd_request_target {
int size; int size;
int min_size; int min_size;
bool sort_bitwise; bool sort_bitwise;
bool recovery_deletes;
unsigned int flags; /* CEPH_OSD_FLAG_* */ unsigned int flags; /* CEPH_OSD_FLAG_* */
bool paused; bool paused;
......
...@@ -272,6 +272,8 @@ bool ceph_is_new_interval(const struct ceph_osds *old_acting, ...@@ -272,6 +272,8 @@ bool ceph_is_new_interval(const struct ceph_osds *old_acting,
u32 new_pg_num, u32 new_pg_num,
bool old_sort_bitwise, bool old_sort_bitwise,
bool new_sort_bitwise, bool new_sort_bitwise,
bool old_recovery_deletes,
bool new_recovery_deletes,
const struct ceph_pg *pgid); const struct ceph_pg *pgid);
bool ceph_osds_changed(const struct ceph_osds *old_acting, bool ceph_osds_changed(const struct ceph_osds *old_acting,
const struct ceph_osds *new_acting, const struct ceph_osds *new_acting,
......
...@@ -158,6 +158,10 @@ extern const char *ceph_osd_state_name(int s); ...@@ -158,6 +158,10 @@ extern const char *ceph_osd_state_name(int s);
#define CEPH_OSDMAP_NOTIERAGENT (1<<13) /* disable tiering agent */ #define CEPH_OSDMAP_NOTIERAGENT (1<<13) /* disable tiering agent */
#define CEPH_OSDMAP_NOREBALANCE (1<<14) /* block osd backfill unless pg is degraded */ #define CEPH_OSDMAP_NOREBALANCE (1<<14) /* block osd backfill unless pg is degraded */
#define CEPH_OSDMAP_SORTBITWISE (1<<15) /* use bitwise hobject_t sort */ #define CEPH_OSDMAP_SORTBITWISE (1<<15) /* use bitwise hobject_t sort */
#define CEPH_OSDMAP_REQUIRE_JEWEL (1<<16) /* require jewel for booting osds */
#define CEPH_OSDMAP_REQUIRE_KRAKEN (1<<17) /* require kraken for booting osds */
#define CEPH_OSDMAP_REQUIRE_LUMINOUS (1<<18) /* require l for booting osds */
#define CEPH_OSDMAP_RECOVERY_DELETES (1<<19) /* deletes performed during recovery instead of peering */
/* /*
* The error code to return when an OSD can't handle a write * The error code to return when an OSD can't handle a write
......
...@@ -1337,6 +1337,8 @@ static enum calc_target_result calc_target(struct ceph_osd_client *osdc, ...@@ -1337,6 +1337,8 @@ static enum calc_target_result calc_target(struct ceph_osd_client *osdc,
bool legacy_change; bool legacy_change;
bool split = false; bool split = false;
bool sort_bitwise = ceph_osdmap_flag(osdc, CEPH_OSDMAP_SORTBITWISE); bool sort_bitwise = ceph_osdmap_flag(osdc, CEPH_OSDMAP_SORTBITWISE);
bool recovery_deletes = ceph_osdmap_flag(osdc,
CEPH_OSDMAP_RECOVERY_DELETES);
enum calc_target_result ct_res; enum calc_target_result ct_res;
int ret; int ret;
...@@ -1399,6 +1401,8 @@ static enum calc_target_result calc_target(struct ceph_osd_client *osdc, ...@@ -1399,6 +1401,8 @@ static enum calc_target_result calc_target(struct ceph_osd_client *osdc,
pi->pg_num, pi->pg_num,
t->sort_bitwise, t->sort_bitwise,
sort_bitwise, sort_bitwise,
t->recovery_deletes,
recovery_deletes,
&last_pgid)) &last_pgid))
force_resend = true; force_resend = true;
...@@ -1421,6 +1425,7 @@ static enum calc_target_result calc_target(struct ceph_osd_client *osdc, ...@@ -1421,6 +1425,7 @@ static enum calc_target_result calc_target(struct ceph_osd_client *osdc,
t->pg_num = pi->pg_num; t->pg_num = pi->pg_num;
t->pg_num_mask = pi->pg_num_mask; t->pg_num_mask = pi->pg_num_mask;
t->sort_bitwise = sort_bitwise; t->sort_bitwise = sort_bitwise;
t->recovery_deletes = recovery_deletes;
t->osd = acting.primary; t->osd = acting.primary;
} }
......
...@@ -2082,6 +2082,8 @@ bool ceph_is_new_interval(const struct ceph_osds *old_acting, ...@@ -2082,6 +2082,8 @@ bool ceph_is_new_interval(const struct ceph_osds *old_acting,
u32 new_pg_num, u32 new_pg_num,
bool old_sort_bitwise, bool old_sort_bitwise,
bool new_sort_bitwise, bool new_sort_bitwise,
bool old_recovery_deletes,
bool new_recovery_deletes,
const struct ceph_pg *pgid) const struct ceph_pg *pgid)
{ {
return !osds_equal(old_acting, new_acting) || return !osds_equal(old_acting, new_acting) ||
...@@ -2089,7 +2091,8 @@ bool ceph_is_new_interval(const struct ceph_osds *old_acting, ...@@ -2089,7 +2091,8 @@ bool ceph_is_new_interval(const struct ceph_osds *old_acting,
old_size != new_size || old_size != new_size ||
old_min_size != new_min_size || old_min_size != new_min_size ||
ceph_pg_is_split(pgid, old_pg_num, new_pg_num) || ceph_pg_is_split(pgid, old_pg_num, new_pg_num) ||
old_sort_bitwise != new_sort_bitwise; old_sort_bitwise != new_sort_bitwise ||
old_recovery_deletes != new_recovery_deletes;
} }
static int calc_pg_rank(int osd, const struct ceph_osds *acting) static int calc_pg_rank(int osd, const struct ceph_osds *acting)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment