diff options
author | Samuel Just <sam.just@inktank.com> | 2013-05-09 12:20:24 -0700 |
---|---|---|
committer | Samuel Just <sam.just@inktank.com> | 2013-05-09 12:20:24 -0700 |
commit | 69b64826b762f713d88072a5c3a3e54fa1e0995b (patch) | |
tree | d9a9b282ae9eceefcae9909d3bc8bc3d814690b2 /src/osd/OSD.cc | |
parent | fd63f8aa30c0cad0ad2cc382971d3f6842ae53cd (diff) | |
download | ceph-69b64826b762f713d88072a5c3a3e54fa1e0995b.tar.gz |
OSD: don't rename pg collections, handle PGs in RemoveWQ
Signed-off-by: Samuel Just <sam.just@inktank.com>
Diffstat (limited to 'src/osd/OSD.cc')
-rw-r--r-- | src/osd/OSD.cc | 71 |
1 files changed, 38 insertions, 33 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 073ca080f70..bf630ec0ee3 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -2780,27 +2780,20 @@ void TestOpsSocketHook::test_ops(OSDService *service, ObjectStore *store, } // ========================================= -void OSD::RemoveWQ::_process(boost::tuple<coll_t, SequencerRef, DeletingStateRef> *item) -{ - OSDriver driver( - store, - coll_t(), - make_snapmapper_oid()); - SnapMapper mapper(&driver, 0, 0, 0); - coll_t &coll = item->get<0>(); - ObjectStore::Sequencer *osr = item->get<1>().get(); - if (osr) - osr->flush(); +void remove_dir( + ObjectStore *store, SnapMapper *mapper, + OSDriver *osdriver, + ObjectStore::Sequencer *osr, + coll_t coll, DeletingStateRef dstate) { vector<hobject_t> olist; store->collection_list(coll, olist); - //*_dout << "OSD::RemoveWQ::_process removing coll " << coll << std::endl; int64_t num = 0; ObjectStore::Transaction *t = new ObjectStore::Transaction; for (vector<hobject_t>::iterator i = olist.begin(); i != olist.end(); ++i, ++num) { - OSDriver::OSTransaction _t(driver.get_transaction(t)); - int r = mapper.remove_oid(*i, &_t); + OSDriver::OSTransaction _t(osdriver->get_transaction(t)); + int r = mapper->remove_oid(*i, &_t); if (r != 0 && r != -ENOENT) { assert(0); } @@ -2812,10 +2805,37 @@ void OSD::RemoveWQ::_process(boost::tuple<coll_t, SequencerRef, DeletingStateRef num = 0; } } - t->remove_collection(coll); store->apply_transaction(*t); delete t; - delete item; +} + +void OSD::RemoveWQ::_process(pair<PGRef, DeletingStateRef> item) +{ + PGRef pg(item.first); + SnapMapper &mapper = pg->snap_mapper; + OSDriver &driver = pg->osdriver; + coll_t coll = coll_t(pg->info.pgid); + pg->osr->flush(); + + if (pg->have_temp_coll()) + remove_dir( + store, &mapper, &driver, pg->osr.get(), pg->get_temp_coll(), item.second); + remove_dir(store, &mapper, &driver, pg->osr.get(), coll, item.second); + + ObjectStore::Transaction *t = new ObjectStore::Transaction; + PG::clear_info_log( + pg->info.pgid, + OSD::make_infos_oid(), + pg->log_oid, + t); + if (pg->have_temp_coll()) + t->remove_collection(pg->get_temp_coll()); + t->remove_collection(coll); + store->queue_transaction( + pg->osr.get(), + t, + new ObjectStore::C_DeleteTransactionHolder<pair<PGRef, DeletingStateRef> >( + t, item)); } // ========================================= @@ -5935,14 +5955,8 @@ void OSD::_remove_pg(PG *pg) service.cancel_pending_splits_for_parent(pg->info.pgid); - coll_t to_remove = get_next_removal_coll(pg->info.pgid); - removals.push_back(to_remove); - rmt->collection_rename(coll_t(pg->info.pgid), to_remove); - if (pg->have_temp_coll()) { - to_remove = get_next_removal_coll(pg->info.pgid); - removals.push_back(to_remove); - rmt->collection_rename(pg->get_temp_coll(), to_remove); - } + DeletingStateRef deleting = service.deleting_pgs.lookup_or_create(pg->info.pgid); + remove_wq.queue(make_pair(PGRef(pg), deleting)); store->queue_transaction( pg->osr.get(), rmt, @@ -5951,15 +5965,6 @@ void OSD::_remove_pg(PG *pg) new ContainerContext< SequencerRef>(pg->osr)); - DeletingStateRef deleting = service.deleting_pgs.lookup_or_create(pg->info.pgid); - for (vector<coll_t>::iterator i = removals.begin(); - i != removals.end(); - ++i) { - remove_wq.queue(new boost::tuple<coll_t, SequencerRef, DeletingStateRef>( - *i, pg->osr, deleting)); - } - - // remove from map pg_map.erase(pg->info.pgid); pg->put("PGMap"); // since we've taken it out of map |