void PG::on_change(ceph::os::Transaction &t) {
logger().debug("{} {}:", *this, __func__);
+ context_registry_on_change();
obc_loader.notify_on_change(is_primary());
recovery_backend->on_peering_interval_change(t);
backend->on_actingset_changed(is_primary());
}
}
+void PG::context_registry_on_change() {
+ obc_registry.for_each([](ObjectContextRef obc) {
+ assert(obc);
+ for (auto j = obc->watchers.begin();
+ j != obc->watchers.end();
+ j = obc->watchers.erase(j)) {
+ j->second->discard_state();
+ }
+ });
+}
+
bool PG::can_discard_op(const MOSDOp& m) const {
if ((m.get_flags() & (CEPH_OSD_FLAG_BALANCE_READS |
CEPH_OSD_FLAG_LOCALIZE_READS))
bool can_discard_replica_op(const Message& m, epoch_t m_map_epoch) const;
bool can_discard_op(const MOSDOp& m) const;
+ void context_registry_on_change();
bool is_missing_object(const hobject_t& soid) const {
return peering_state.get_pg_log().get_missing().get_items().count(soid);
}
seastar::future<> start_notify(NotifyRef);
seastar::future<> send_notify_msg(NotifyRef);
seastar::future<> send_disconnect_msg();
- void discard_state();
void do_watch_timeout(Ref<PG> pg);
friend Notify;
}
void got_ping(utime_t);
+ void discard_state();
+
seastar::future<> remove();
/// Call when notify_ack received on notify_id