From 1d82d715c7a592f4fe6e11d047052e4c0614b398 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Tue, 10 Jul 2018 16:59:29 +0800 Subject: [PATCH] osd: rebuild attrs from clients Fixes: http://tracker.ceph.com/issues/24768 Signed-off-by: Kefu Chai --- src/osd/ECTransaction.h | 6 +++++- src/osd/ReplicatedBackend.cc | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) 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( -- 2.39.5