diff options
author | Sage Weil <sage@inktank.com> | 2013-01-18 15:45:03 -0800 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-01-18 15:45:03 -0800 |
commit | 684a8f8f84312d4d9c6cdeb8d6d9fad792bd5a6d (patch) | |
tree | f5da1f2552cbea4af6de4c7f0bb26903a97b0258 | |
parent | b4e0f7ca721ed14b8f8b3d8d8bb9630206796cb2 (diff) | |
parent | 5e00af406b89c9817e9a429f92a05ca9c29b19c3 (diff) | |
download | ceph-684a8f8f84312d4d9c6cdeb8d6d9fad792bd5a6d.tar.gz |
Merge branch 'wip-pg-removal'
Reviewed-by: Samuel Just <sam.just@inktank.com>
-rw-r--r-- | src/os/FileStore.cc | 29 | ||||
-rw-r--r-- | src/os/FileStore.h | 3 | ||||
-rw-r--r-- | src/os/ObjectStore.cc | 20 | ||||
-rw-r--r-- | src/os/ObjectStore.h | 17 | ||||
-rw-r--r-- | src/osd/OSD.cc | 19 |
5 files changed, 44 insertions, 44 deletions
diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc index fc1f931a861..4e208350902 100644 --- a/src/os/FileStore.cc +++ b/src/os/FileStore.cc @@ -2127,35 +2127,6 @@ int FileStore::do_transactions(list<Transaction*> &tls, uint64_t op_seq) return r; } -unsigned FileStore::apply_transaction(Transaction &t, - Context *ondisk) -{ - list<Transaction*> tls; - tls.push_back(&t); - return apply_transactions(tls, ondisk); -} - -unsigned FileStore::apply_transactions(list<Transaction*> &tls, - Context *ondisk) -{ - // use op pool - Cond my_cond; - Mutex my_lock("FileStore::apply_transaction::my_lock"); - int r = 0; - bool done; - C_SafeCond *onreadable = new C_SafeCond(&my_lock, &my_cond, &done, &r); - - dout(10) << "apply queued" << dendl; - queue_transactions(NULL, tls, onreadable, ondisk); - - my_lock.Lock(); - while (!done) - my_cond.Wait(my_lock); - my_lock.Unlock(); - dout(10) << "apply done r = " << r << dendl; - return r; -} - void FileStore::_set_replay_guard(coll_t cid, const SequencerPosition &spos, bool in_progress=false) diff --git a/src/os/FileStore.h b/src/os/FileStore.h index 0281e94d634..912810ebc09 100644 --- a/src/os/FileStore.h +++ b/src/os/FileStore.h @@ -307,8 +307,7 @@ public: int statfs(struct statfs *buf); int do_transactions(list<Transaction*> &tls, uint64_t op_seq); - unsigned apply_transaction(Transaction& t, Context *ondisk=0); - unsigned apply_transactions(list<Transaction*>& tls, Context *ondisk=0); + unsigned _do_transaction(Transaction& t, uint64_t op_seq, int trans_num); int queue_transaction(Sequencer *osr, Transaction* t); diff --git a/src/os/ObjectStore.cc b/src/os/ObjectStore.cc index dacc5440308..6087dee50f7 100644 --- a/src/os/ObjectStore.cc +++ b/src/os/ObjectStore.cc @@ -20,6 +20,26 @@ ostream& operator<<(ostream& out, const ObjectStore::Sequencer& s) return out << "osr(" << s.get_name() << " " << &s << ")"; } +unsigned ObjectStore::apply_transactions(Sequencer *osr, + list<Transaction*> &tls, + Context *ondisk) +{ + // use op pool + Cond my_cond; + Mutex my_lock("ObjectStore::apply_transaction::my_lock"); + int r = 0; + bool done; + C_SafeCond *onreadable = new C_SafeCond(&my_lock, &my_cond, &done, &r); + + queue_transactions(osr, tls, onreadable, ondisk); + + my_lock.Lock(); + while (!done) + my_cond.Wait(my_lock); + my_lock.Unlock(); + return r; +} + void ObjectStore::Transaction::dump(ceph::Formatter *f) { f->open_array_section("ops"); diff --git a/src/os/ObjectStore.h b/src/os/ObjectStore.h index a1cb21c0326..5729490ac06 100644 --- a/src/os/ObjectStore.h +++ b/src/os/ObjectStore.h @@ -633,8 +633,21 @@ public: } }; - virtual unsigned apply_transaction(Transaction& t, Context *ondisk=0) = 0; - virtual unsigned apply_transactions(list<Transaction*>& tls, Context *ondisk=0) = 0; + // synchronous wrappers + unsigned apply_transaction(Transaction& t, Context *ondisk=0) { + list<Transaction*> tls; + tls.push_back(&t); + return apply_transactions(NULL, tls, ondisk); + } + unsigned apply_transaction(Sequencer *osr, Transaction& t, Context *ondisk=0) { + list<Transaction*> tls; + tls.push_back(&t); + return apply_transactions(osr, tls, ondisk); + } + unsigned apply_transactions(list<Transaction*>& tls, Context *ondisk=0) { + return apply_transactions(NULL, tls, ondisk); + } + unsigned apply_transactions(Sequencer *osr, list<Transaction*>& tls, Context *ondisk=0); virtual int queue_transaction(Sequencer *osr, Transaction* t) = 0; virtual int queue_transaction(Sequencer *osr, Transaction *t, Context *onreadable, Context *ondisk=0, diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 20187ef0428..6bad8a2f9ed 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -2301,25 +2301,22 @@ void OSD::RemoveWQ::_process(boost::tuple<coll_t, SequencerRef, DeletingStateRef vector<hobject_t> olist; store->collection_list(coll, olist); //*_dout << "OSD::RemoveWQ::_process removing coll " << coll << std::endl; - uint64_t num = 1; + int64_t num = 0; ObjectStore::Transaction *t = new ObjectStore::Transaction; for (vector<hobject_t>::iterator i = olist.begin(); i != olist.end(); ++i, ++num) { - if (num % 20 == 0) { - store->queue_transaction( - osr, t, - new ObjectStore::C_DeleteTransactionHolder<SequencerRef>(t, item->get<1>()), - new ContainerContext<SequencerRef>(item->get<1>())); + t->remove(coll, *i); + if (num >= g_conf->osd_target_transaction_size) { + store->apply_transaction(osr, *t); + delete t; t = new ObjectStore::Transaction; + num = 0; } - t->remove(coll, *i); } t->remove_collection(coll); - store->queue_transaction( - osr, t, - new ObjectStore::C_DeleteTransactionHolder<SequencerRef>(t, item->get<1>()), - new ContainerContext<SequencerRef>(item->get<1>())); + store->apply_transaction(*t); + delete t; delete item; } // ========================================= |