summaryrefslogtreecommitdiff
path: root/src/osd/OSD.cc
diff options
context:
space:
mode:
authorSamuel Just <sam.just@inktank.com>2013-05-09 17:17:35 -0700
committerSamuel Just <sam.just@inktank.com>2013-05-09 22:23:42 -0700
commitf5a60ca2266c27a182444f737ff1d905d7dd1141 (patch)
treee4a14ac587ea51e9a1666180077e958d5c2d3f55 /src/osd/OSD.cc
parentd3dd99b725afaa026fe6f700ddc14a7f657f2170 (diff)
downloadceph-f5a60ca2266c27a182444f737ff1d905d7dd1141.tar.gz
osd: remove_dir use collection_list_partial
Signed-off-by: Samuel Just <sam.just@inktank.com>
Diffstat (limited to 'src/osd/OSD.cc')
-rw-r--r--src/osd/OSD.cc49
1 files changed, 30 insertions, 19 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc
index 14f88d5e7fc..e7e52e431d5 100644
--- a/src/osd/OSD.cc
+++ b/src/osd/OSD.cc
@@ -2801,30 +2801,41 @@ bool remove_dir(
ObjectStore::Sequencer *osr,
coll_t coll, DeletingStateRef dstate) {
vector<hobject_t> olist;
- store->collection_list(coll, olist);
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(osdriver->get_transaction(t));
- int r = mapper->remove_oid(*i, &_t);
- if (r != 0 && r != -ENOENT) {
- assert(0);
- }
- t->remove(coll, *i);
- if (num >= g_conf->osd_target_transaction_size) {
- store->apply_transaction(osr, *t);
- delete t;
- if (!dstate->check_canceled()) {
- // canceled!
- return false;
+ hobject_t next;
+ while (!next.is_max()) {
+ store->collection_list_partial(
+ coll,
+ next,
+ store->get_ideal_list_min(),
+ store->get_ideal_list_max(),
+ 0,
+ &olist,
+ &next);
+ for (vector<hobject_t>::iterator i = olist.begin();
+ i != olist.end();
+ ++i, ++num) {
+ OSDriver::OSTransaction _t(osdriver->get_transaction(t));
+ int r = mapper->remove_oid(*i, &_t);
+ if (r != 0 && r != -ENOENT) {
+ assert(0);
+ }
+ t->remove(coll, *i);
+ if (num >= g_conf->osd_target_transaction_size) {
+ store->apply_transaction(osr, *t);
+ delete t;
+ if (!dstate->check_canceled()) {
+ // canceled!
+ return false;
+ }
+ t = new ObjectStore::Transaction;
+ num = 0;
}
- t = new ObjectStore::Transaction;
- num = 0;
}
+ olist.clear();
}
- store->apply_transaction(*t);
+ store->apply_transaction(osr, *t);
delete t;
return true;
}