]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-objectstore-tool: Fix set-size to clear data_digest if changing disk size 18885/head
authorDavid Zafman <dzafman@redhat.com>
Fri, 10 Nov 2017 00:11:14 +0000 (16:11 -0800)
committerDavid Zafman <dzafman@redhat.com>
Sat, 11 Nov 2017 00:12:07 +0000 (16:12 -0800)
Signed-off-by: David Zafman <dzafman@redhat.com>
src/tools/ceph_objectstore_tool.cc

index 754827e23460d8fac90ca6a6faa44b63fba0389c..afd75e3d06aa9de932073fdb06ad42374d99d4b6 100644 (file)
@@ -2133,12 +2133,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, -1);  /* fixme: using full features */
     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, -1);  /* fixme: using full features */
+    t.setattr(coll, ghobj, OI_ATTR, attr);
     if (is_snap) {
       bufferlist snapattr;
       snapattr.clear();