#define dout_context cct
#define dout_subsys ceph_subsys_osd
+BufferedRecoveryMessages::BufferedRecoveryMessages(PeeringCtx &ctx)
+ : query_map(std::move(ctx.query_map)),
+ info_map(std::move(ctx.info_map)),
+ notify_list(std::move(ctx.notify_list))
+{
+ ctx.query_map.clear();
+ ctx.info_map.clear();
+ ctx.notify_list.clear();
+}
+
void PGPool::update(CephContext *cct, OSDMapRef map)
{
const pg_pool_t *pi = map->get_pg_pool(id);
void update(CephContext *cct, OSDMapRef map);
};
+class PeeringCtx;
+
// [primary only] content recovery state
struct BufferedRecoveryMessages {
map<int, map<spg_t, pg_query_t> > query_map;
map<int, vector<pair<pg_notify_t, PastIntervals> > > info_map;
map<int, vector<pair<pg_notify_t, PastIntervals> > > notify_list;
-};
-
-struct PeeringCtx {
- map<int, map<spg_t, pg_query_t> > query_map;
- map<int, vector<pair<pg_notify_t, PastIntervals> > > info_map;
- map<int, vector<pair<pg_notify_t, PastIntervals> > > notify_list;
- ObjectStore::Transaction transaction;
- HBHandle* handle = nullptr;
-
- PeeringCtx() = default;
- void reset_transaction() {
- transaction = ObjectStore::Transaction();
- }
+ BufferedRecoveryMessages() = default;
+ BufferedRecoveryMessages(PeeringCtx &);
void accept_buffered_messages(BufferedRecoveryMessages &m) {
for (auto &[target, qmap] : m.query_map) {
}
};
+struct PeeringCtx : BufferedRecoveryMessages {
+ ObjectStore::Transaction transaction;
+ HBHandle* handle = nullptr;
+
+ PeeringCtx() = default;
+
+ PeeringCtx(const PeeringCtx &) = delete;
+ PeeringCtx &operator=(const PeeringCtx &) = delete;
+
+ PeeringCtx(PeeringCtx &&) = default;
+ PeeringCtx &operator=(PeeringCtx &&) = default;
+
+ void reset_transaction() {
+ transaction = ObjectStore::Transaction();
+ }
+};
/* Encapsulates PG recovery process */
class PeeringState : public MissingLoc::MappingInfo {