From: Jason Dillaman Date: Sun, 6 Mar 2016 18:02:34 +0000 (-0500) Subject: librados: calc_snap_set_diff now provides last known object size X-Git-Tag: v10.1.0~104^2~25 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=69b5ce183f25a07f5438b4a9b1f59082dfb848db;p=ceph.git librados: calc_snap_set_diff now provides last known object size This allows truncate requests to be detected between snapshots. Signed-off-by: Jason Dillaman --- diff --git a/src/librados/snap_set_diff.cc b/src/librados/snap_set_diff.cc index 5db0fb9793c..9fb166f5817 100644 --- a/src/librados/snap_set_diff.cc +++ b/src/librados/snap_set_diff.cc @@ -15,15 +15,16 @@ * calculate intervals/extents that vary between two snapshots */ void calc_snap_set_diff(CephContext *cct, const librados::snap_set_t& snap_set, - librados::snap_t start, - librados::snap_t end, - interval_set *diff, bool *end_exists) + librados::snap_t start, librados::snap_t end, + interval_set *diff, uint64_t *end_size, + bool *end_exists) { ldout(cct, 10) << "calc_snap_set_diff start " << start << " end " << end << ", snap_set seq " << snap_set.seq << dendl; bool saw_start = false; uint64_t start_size = 0; diff->clear(); + *end_size = 0; *end_exists = false; for (vector::const_iterator r = snap_set.clones.begin(); @@ -44,7 +45,7 @@ void calc_snap_set_diff(CephContext *cct, const librados::snap_set_t& snap_set, ldout(cct, 20) << " clone " << r->cloneid << " snaps " << r->snaps << " -> [" << a << "," << b << "]" << " size " << r->size << " overlap to next " << r->overlap << dendl; - + if (b < start) { // this is before start ++r; @@ -65,6 +66,7 @@ void calc_snap_set_diff(CephContext *cct, const librados::snap_set_t& snap_set, saw_start = true; } + *end_size = r->size; if (end < a) { ldout(cct, 20) << " past end " << end << ", end object does not exist" << dendl; *end_exists = false; diff --git a/src/librados/snap_set_diff.h b/src/librados/snap_set_diff.h index 7bc75cd6cf9..acb71965b52 100644 --- a/src/librados/snap_set_diff.h +++ b/src/librados/snap_set_diff.h @@ -11,7 +11,7 @@ class CephContext; void calc_snap_set_diff(CephContext *cct, const librados::snap_set_t& snap_set, librados::snap_t start, librados::snap_t end, - interval_set *diff, + interval_set *diff, uint64_t *end_size, bool *end_exists); #endif