t->remove(soid);
}
}
- ctx->obc->attr_cache = rollback_to->attr_cache;
+ replace_cached_attrs(ctx, ctx->obc, rollback_to->attr_cache);
} else {
if (obs.exists) {
ctx->mod_desc.mark_unrollbackable();
return transit< NotTrimming >();
}
+void ReplicatedPG::replace_cached_attrs(
+ OpContext *ctx,
+ ObjectContextRef obc,
+ const map<string, bufferlist> &new_attrs)
+{
+ ctx->pending_attrs[obc].clear();
+ for (map<string, bufferlist>::iterator i = obc->attr_cache.begin();
+ i != obc->attr_cache.end();
+ ++i) {
+ ctx->pending_attrs[obc][i->first] = boost::optional<bufferlist>();
+ }
+ for (map<string, bufferlist>::const_iterator i = new_attrs.begin();
+ i != new_attrs.end();
+ ++i) {
+ ctx->pending_attrs[obc][i->first] = i->second;
+ }
+}
+
void ReplicatedPG::setattr_maybe_cache(
ObjectContextRef obc,
OpContext *op,
void on_shutdown();
// attr cache handling
+ void replace_cached_attrs(
+ OpContext *ctx,
+ ObjectContextRef obc,
+ const map<string, bufferlist> &new_attrs);
void setattr_maybe_cache(
ObjectContextRef obc,
OpContext *op,