From: Samuel Just Date: Tue, 19 Jun 2012 21:29:48 +0000 (-0700) Subject: OSD: clear_temp: split delete into many transactions X-Git-Tag: v0.48argonaut~33 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=88c7629e041699c25a7c91114bd1ac4ffc64c3eb;p=ceph.git OSD: clear_temp: split delete into many transactions Signed-off-by: Samuel Just Reviewed-by: Sage Weil --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 9c73020aafca1..3cd6bd7e91988 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -1115,13 +1115,21 @@ void OSD::clear_temp(ObjectStore *store, coll_t tmp) return; // delete them. - ObjectStore::Transaction *t = new ObjectStore::Transaction; + ObjectStore::Transaction t; + unsigned removed = 0; for (vector::iterator p = objects.begin(); p != objects.end(); - p++) - t->collection_remove(tmp, *p); - t->remove_collection(tmp); - int r = store->queue_transaction(NULL, t); + p++, removed++) { + t.collection_remove(tmp, *p); + if (removed > 300) { + int r = store->apply_transaction(t); + assert(r == 0); + t = ObjectStore::Transaction(); + removed = 0; + } + } + t.remove_collection(tmp); + int r = store->apply_transaction(t); assert(r == 0); store->sync_and_flush(); }