diff options
author | Samuel Just <sam.just@inktank.com> | 2013-05-09 17:17:35 -0700 |
---|---|---|
committer | Samuel Just <sam.just@inktank.com> | 2013-05-09 22:23:42 -0700 |
commit | f5a60ca2266c27a182444f737ff1d905d7dd1141 (patch) | |
tree | e4a14ac587ea51e9a1666180077e958d5c2d3f55 /src/osd/OSD.cc | |
parent | d3dd99b725afaa026fe6f700ddc14a7f657f2170 (diff) | |
download | ceph-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.cc | 49 |
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; } |