From: Kefu Chai Date: Tue, 10 Jul 2018 08:59:29 +0000 (+0800) Subject: osd: rebuild attrs from clients X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F22958%2Fhead;p=ceph.git osd: rebuild attrs from clients Fixes: http://tracker.ceph.com/issues/24768 Signed-off-by: Kefu Chai --- diff --git a/src/osd/ECTransaction.h b/src/osd/ECTransaction.h index 17be72265cba4..b22c1c921a730 100644 --- a/src/osd/ECTransaction.h +++ b/src/osd/ECTransaction.h @@ -63,11 +63,15 @@ public: map attrs; SetAttrsOp(const hobject_t &oid, map &_attrs) : oid(oid) { + for (auto& attr : attrs) { + attr.second.rebuild(); + } attrs.swap(_attrs); } SetAttrsOp(const hobject_t &oid, const string &key, bufferlist &val) : oid(oid) { - attrs.insert(make_pair(key, val)); + val.rebuild(); + attrs.emplace(key, val); } }; struct RmAttrOp { diff --git a/src/osd/ReplicatedBackend.cc b/src/osd/ReplicatedBackend.cc index 5ba118496ff8d..53c6351f1f6fe 100644 --- a/src/osd/ReplicatedBackend.cc +++ b/src/osd/ReplicatedBackend.cc @@ -368,6 +368,9 @@ public: const hobject_t &hoid, map &attrs ) { + for (auto& attr : attrs) { + attr.second.rebuild(); + } t.setattrs(get_coll(hoid), ghobject_t(hoid), attrs); } void setattr( @@ -375,6 +378,7 @@ public: const string &attrname, bufferlist &bl ) { + bl.rebuild(); t.setattr(get_coll(hoid), ghobject_t(hoid), attrname, bl); } void rmattr(