From 84b64a88837996559efc2234549b760bba1f7c5f Mon Sep 17 00:00:00 2001 From: David Zafman Date: Thu, 9 Nov 2017 16:11:14 -0800 Subject: [PATCH] ceph-objectstore-tool: Fix set-size to clear data_digest if changing disk size Signed-off-by: David Zafman (cherry picked from commit 7ca3ce93099de9412012b7a88121f9fced34f4b8) Conflicts: src/tools/ceph_objectstore_tool.cc (in jewel, ::encode() takes only two arguments, while in luminous/master it takes a third which we omit here) --- src/tools/ceph_objectstore_tool.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/tools/ceph_objectstore_tool.cc b/src/tools/ceph_objectstore_tool.cc index 50ff450a9fb1e..2a76b3ee0623d 100644 --- a/src/tools/ceph_objectstore_tool.cc +++ b/src/tools/ceph_objectstore_tool.cc @@ -1955,12 +1955,15 @@ int set_size(ObjectStore *store, coll_t coll, ghobject_t &ghobj, uint64_t setsiz if (!dry_run) { attr.clear(); oi.size = setsize; - ::encode(oi, attr); ObjectStore::Transaction t; - t.setattr(coll, ghobj, OI_ATTR, attr); // Only modify object info if we want to corrupt it - if (!corrupt) + if (!corrupt && (uint64_t)st.st_size != setsize) { t.truncate(coll, ghobj, setsize); + // Changing objectstore size will invalidate data_digest, so clear it. + oi.clear_data_digest(); + } + ::encode(oi, attr); /* fixme: using full features */ + t.setattr(coll, ghobj, OI_ATTR, attr); if (is_snap) { bufferlist snapattr; snapattr.clear(); -- 2.39.5