info};
}
+bool PG::is_last_activated_peer(pg_shard_t peer)
+{
+ if (!acting_recovery_backfill.count(peer))
+ return false;
+ if (!peer_activated.insert(peer).second)
+ return false;
+ logger().info("peer osd.{} activated and committed", peer);
+ return peer_activated.size() == acting_recovery_backfill.size();
+}
+
+
+void PG::clear_primary_state()
+{
+ peer_info.clear();
+ want_acting.clear();
+ need_up_thru = 0;
+ peer_activated.clear();
+}
+
seastar::future<> PG::do_peering_event(std::unique_ptr<PGPeeringEvent> evt)
{
// todo
// peering/recovery
bool should_send_notify() const;
pg_notify_t get_notify(epoch_t query_epoch) const;
+ bool is_last_activated_peer(pg_shard_t peer);
+ void clear_primary_state();
+
seastar::future<> do_peering_event(std::unique_ptr<PGPeeringEvent> evt);
seastar::future<> handle_advance_map(cached_map_t next_map);
seastar::future<> handle_activate_map();
bool should_notify_primary = false;
+ using pg_shard_set_t = std::set<pg_shard_t>;
// peer_info -- projected (updates _before_ replicas ack)
peer_info_t peer_info; //< info from peers (stray or prior)
+ pg_shard_set_t peer_activated;
//< pg state
pg_info_t info;
pg_info_t last_written_info;
PastIntervals past_intervals;
// primary state
- using pg_shard_set_t = std::set<pg_shard_t>;
pg_shard_t primary, up_primary;
std::vector<int> acting, up;
pg_shard_set_t actingset, upset;