From b722662e64a958e134e0c9f32d6cdd079c30fc05 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 11 Nov 2010 17:37:22 -0800 Subject: [PATCH] osd: use pg_t to find PG's again The ceph_object_layout is approaching obsolete. Also, use a more general lookup_lock_raw_pg() helper that doesn't take the (unused) obc* or cast. Signed-off-by: Sage Weil --- src/osd/OSD.cc | 30 ++++++++++++++++-------------- src/osd/OSD.h | 10 ++++++---- src/osd/ReplicatedPG.cc | 5 ++--- src/osd/Watch.h | 2 +- 4 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index f0d0a8d36bfec..8e090dfd0d593 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -971,6 +971,15 @@ PG *OSD::lookup_lock_pg(pg_t pgid) return pg; } +PG *OSD::lookup_lock_raw_pg(pg_t pgid) +{ + osd_lock.Lock(); + pgid = osdmap->raw_pg_to_pg(pgid); + PG *pg = _lookup_lock_pg(pgid); + osd_lock.Unlock(); + return pg; +} + void OSD::load_pgs() { assert(osd_lock.is_locked()); @@ -1605,17 +1614,10 @@ void OSD::ms_handle_connect(Connection *con) } } -ReplicatedPG *OSD::get_pg(void *_obc, ceph_object_layout& layout) -{ - pg_t pgid = osdmap->raw_pg_to_pg(pg_t(layout.ol_pgid)); - ReplicatedPG *pg = (ReplicatedPG *)lookup_lock_pg(pgid); - return pg; -} - -void OSD::put_object_context(void *_obc, ceph_object_layout& layout) +void OSD::put_object_context(void *_obc, pg_t pgid) { ReplicatedPG::ObjectContext *obc = (ReplicatedPG::ObjectContext *)_obc; - ReplicatedPG *pg = get_pg(_obc, layout); + ReplicatedPG *pg = (ReplicatedPG *)lookup_lock_raw_pg(pgid); pg->put_object_context(obc); pg->unlock(); } @@ -1644,11 +1646,11 @@ bool OSD::ms_handle_reset(Connection *con) dout(0) << "OSD::ms_handle_reset() s=" << (void *)session << dendl; - map obcs; + map obcs; watch_lock.Lock(); - map::iterator iter; + map::iterator iter; for (iter = session->watches.begin(); iter != session->watches.end(); ++iter) { ReplicatedPG::ObjectContext *obc = (ReplicatedPG::ObjectContext *)iter->first; obcs[obc] = iter->second; @@ -1656,7 +1658,7 @@ bool OSD::ms_handle_reset(Connection *con) watch_lock.Unlock(); - map::iterator oiter; + map::iterator oiter; for (oiter = obcs.begin(); oiter != obcs.end(); ++oiter) { ReplicatedPG::ObjectContext *obc = (ReplicatedPG::ObjectContext *)oiter->first; dout(0) << "obc=" << (void *)obc << dendl; @@ -1723,8 +1725,8 @@ void OSD::handle_notify_timeout(void *_notif) obc->lock.Unlock(); watch_lock.Unlock(); /* put_object_context takes osd->lock */ - ReplicatedPG *pg = get_pg(obc, notif->layout); - put_object_context(obc, notif->layout); + ReplicatedPG *pg = (ReplicatedPG *)lookup_lock_raw_pg(notif->pgid); + put_object_context(obc, notif->pgid); pg->do_complete_notify(notif); watch_lock.Lock(); diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 6eacc6adb76aa..6d4443d3d216f 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -215,7 +215,7 @@ public: OSDCaps caps; epoch_t last_sent_epoch; Connection *con; - std::map watches; + std::map watches; std::map notifs; Session() : last_sent_epoch(0), con(0) {} @@ -511,6 +511,9 @@ protected: PG *_create_lock_new_pg(pg_t pgid, vector& acting, ObjectStore::Transaction& t); //void _remove_unlock_pg(PG *pg); // remove from store and memory + PG *lookup_lock_pg(pg_t pgid); + PG *lookup_lock_raw_pg(pg_t pgid); + void load_pgs(); void calc_priors_during(pg_t pgid, epoch_t start, epoch_t end, set& pset); void project_pg_history(pg_t pgid, PG::Info::History& h, epoch_t from, @@ -993,9 +996,8 @@ public: void init_op_flags(MOSDOp *op); - PG *lookup_lock_pg(pg_t pgid); - ReplicatedPG *get_pg(void *_obc, ceph_object_layout& layout); - void put_object_context(void *_obc, ceph_object_layout& layout); + + void put_object_context(void *_obc, pg_t pgid); void ack_notification(entity_name_t& peer_addr, void *notif); Mutex watch_lock; SafeTimer watch_timer; diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 6692c20b06c64..ff97bcd906f6a 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1125,7 +1125,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops, result = -ENOMEM; break; } - notif->layout = osd->osdmap->make_object_layout(soid.oid, info.pgid.pool(), info.pgid.preferred()); + notif->pgid = osd->osdmap->object_locator_to_pg(soid.oid, obc->obs.oi.oloc); osd->watch_lock.Lock(); osd->watch->add_notification(notif); @@ -1412,8 +1412,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops, obc->watchers[entity] = session; session->get(); - ceph_object_layout layout = osd->osdmap->make_object_layout(soid.oid, info.pgid.pool(), info.pgid.preferred()); - session->watches[obc] = layout; + session->watches[obc] = osd->osdmap->object_locator_to_pg(soid.oid, obc->obs.oi.oloc); } else { obc->watchers.erase(entity); diff --git a/src/osd/Watch.h b/src/osd/Watch.h index 68d0b18470141..15fd751f811ec 100644 --- a/src/osd/Watch.h +++ b/src/osd/Watch.h @@ -42,7 +42,7 @@ public: MWatchNotify *reply; Context *timeout; void *obc; - ceph_object_layout layout; + pg_t pgid; void add_watcher(const entity_name_t& name, WatcherState state) { watchers[name] = state; } -- 2.39.5