mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	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: Ilya Dryomov <idryomov@gmail.com> Reviewed-by: Sage Weil <sage@redhat.com>
This commit is contained in:
		
							parent
							
								
									f53b7665c8
								
							
						
					
					
						commit
						ae78dd8139
					
				
					 5 changed files with 16 additions and 1 deletions
				
			
		| 
						 | 
					@ -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,
 | 
				
			||||||
			  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);
 | 
				
			||||||
#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,
 | 
				
			||||||
	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,
 | 
				
			||||||
				 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,
 | 
				
			||||||
		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,
 | 
				
			||||||
			  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,
 | 
				
			||||||
	       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)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue