]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge pull request #2071 from somnathr/wip-sd-cpu-optimized
authorSamuel Just <sam.just@inktank.com>
Fri, 11 Jul 2014 21:42:48 +0000 (14:42 -0700)
committerSamuel Just <sam.just@inktank.com>
Fri, 11 Jul 2014 21:42:48 +0000 (14:42 -0700)
Wip sd cpu optimized

Reviewed-by: Samuel Just <sam.just@inktank.com>
1  2 
src/osd/OSD.cc
src/osd/OSD.h
src/osd/OSDMap.cc
src/osd/PG.cc
src/osd/PG.h
src/osd/ReplicatedPG.cc
src/osd/ReplicatedPG.h

diff --cc src/osd/OSD.cc
index 0a3ecc33234cdfb1c9ed663e34144f9b4caef844,985ce5d0a3a403cbc72e15229d832e560d74a4b2..8d3813e956f459349b0892e7d01b81464fd7232c
@@@ -2053,22 -2032,28 +2053,22 @@@ PG *OSD::_create_lock_pg
    return pg;
  }
  
- PG *OSD::get_pg_or_queue_for_pg(spg_t pgid, OpRequestRef op)
+ PG *OSD::get_pg_or_queue_for_pg(const spg_t& pgid, OpRequestRef& op)
  {
 -  RWLock::RLocker l(pg_map_lock);
 -  Session *session = static_cast<Session*>(
 -    op->get_req()->get_connection()->get_priv());
 -
 +  {
 +    RWLock::RLocker l(pg_map_lock);
 +    ceph::unordered_map<spg_t, PG*>::iterator i = pg_map.find(pgid);
 +    if (i != pg_map.end())
 +      return i->second;
 +  }
 +  RWLock::WLocker l(pg_map_lock);
    ceph::unordered_map<spg_t, PG*>::iterator i = pg_map.find(pgid);
 -  if (i == pg_map.end())
 -    session->waiting_for_pg[pgid];
 -    
 -  map<spg_t, list<OpRequestRef> >::iterator wlistiter =
 -    session->waiting_for_pg.find(pgid);
 -
 -  PG *out = NULL;
 -  if (wlistiter == session->waiting_for_pg.end()) {
 -    out = i->second;
 +  if (i != pg_map.end()) {
 +    return i->second;
    } else {
 -    wlistiter->second.push_back(op);
 -    register_session_waiting_on_pg(session, pgid);
 +    waiting_for_pg[pgid].push_back(op);
 +    return NULL;
    }
 -  session->put();
 -  return out;
  }
  
  bool OSD::_have_pg(spg_t pgid)
diff --cc src/osd/OSD.h
Simple merge
Simple merge
diff --cc src/osd/PG.cc
Simple merge
diff --cc src/osd/PG.h
Simple merge
Simple merge
Simple merge