summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-01-18 15:45:03 -0800
committerSage Weil <sage@inktank.com>2013-01-18 15:45:03 -0800
commit684a8f8f84312d4d9c6cdeb8d6d9fad792bd5a6d (patch)
treef5da1f2552cbea4af6de4c7f0bb26903a97b0258
parentb4e0f7ca721ed14b8f8b3d8d8bb9630206796cb2 (diff)
parent5e00af406b89c9817e9a429f92a05ca9c29b19c3 (diff)
downloadceph-684a8f8f84312d4d9c6cdeb8d6d9fad792bd5a6d.tar.gz
Merge branch 'wip-pg-removal'
Reviewed-by: Samuel Just <sam.just@inktank.com>
-rw-r--r--src/os/FileStore.cc29
-rw-r--r--src/os/FileStore.h3
-rw-r--r--src/os/ObjectStore.cc20
-rw-r--r--src/os/ObjectStore.h17
-rw-r--r--src/osd/OSD.cc19
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;
}
// =========================================