From: Sage Weil Date: Wed, 24 Jun 2009 19:55:00 +0000 (-0700) Subject: osd: make object delete not remove _head if there are clones X-Git-Tag: v0.10~161 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1fd46cc3e889daa7628f093fdc1c0012ebc1c3d7;p=ceph.git osd: make object delete not remove _head if there are clones Truncate and rmattrs instead, so we can keep the SnapSet. Still need to make 'ls' work properly. --- diff --git a/src/TODO b/src/TODO index f69ec034e412..c0d9ae463f12 100644 --- a/src/TODO +++ b/src/TODO @@ -71,11 +71,6 @@ later - rename over old files should flush data, or revert back to old contents rados -/ - kill -[io] options -/ - make 'ls' output to file -/ - make objecter->list_objects return even with & ops, case CEPH_OSD_OP_DELETE: { // delete - t.remove(info.pgid.to_coll(), soid); - if (oi.snapset.clones.size()) { - snapid_t newest = *oi.snapset.clones.rbegin(); - add_interval_usage(oi.snapset.clone_overlap[newest], info.stats); - oi.snapset.clone_overlap.erase(newest); // ok, redundant. - } if (ctx->obs->exists) { info.stats.num_objects--; info.stats.num_bytes -= oi.size; info.stats.num_kb -= SHIFT_ROUND_UP(oi.size, 10); oi.size = 0; - ctx->obs->exists = false; oi.snapset.head_exists = false; } + if (oi.snapset.clones.size()) { + snapid_t newest = *oi.snapset.clones.rbegin(); + add_interval_usage(oi.snapset.clone_overlap[newest], info.stats); + oi.snapset.clone_overlap.erase(newest); // ok, redundant. + + // truncate and kill attrs, but do not delete + t.truncate(info.pgid.to_coll(), soid, 0); + t.rmattrs(info.pgid.to_coll(), soid); + } else { + t.remove(info.pgid.to_coll(), soid); // no clones, delete! + ctx->obs->exists = false; + } } break;