From: Sage Weil Date: Mon, 16 May 2016 14:11:15 +0000 (-0400) Subject: osd: encode object_info_t with features X-Git-Tag: v11.0.0~270^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=80f83cdf40198414da1de62dcde38792af02ae7e;p=ceph.git osd: encode object_info_t with features In a few places, we encode oi with full features. Signed-off-by: Sage Weil --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index d671acf1bed0..592ad210a452 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -198,7 +198,7 @@ void ReplicatedPG::on_local_recover( recovery_info.oi.prior_version = recovery_info.oi.version; recovery_info.oi.version = latest->version; bufferlist bl; - ::encode(recovery_info.oi, bl); + ::encode(recovery_info.oi, bl, get_osdmap()->get_up_osd_features()); assert(!pool.info.require_rollback()); t->setattr(coll, ghobject_t(recovery_info.soid), OI_ATTR, bl); if (obc) @@ -3494,7 +3494,7 @@ ReplicatedPG::OpContextUPtr ReplicatedPG::trim_object(const hobject_t &coid) coi.prior_version = coi.version; coi.version = ctx->at_version; bl.clear(); - ::encode(coi, bl); + ::encode(coi, bl, get_osdmap()->get_up_osd_features()); setattr_maybe_cache(ctx->obc, ctx.get(), t, OI_ATTR, bl); ctx->log.push_back( @@ -3577,7 +3577,7 @@ ReplicatedPG::OpContextUPtr ReplicatedPG::trim_object(const hobject_t &coid) attrs[SS_ATTR].claim(bl); bl.clear(); - ::encode(ctx->snapset_obc->obs.oi, bl); + ::encode(ctx->snapset_obc->obs.oi, bl, get_osdmap()->get_up_osd_features()); attrs[OI_ATTR].claim(bl); setattrs_maybe_cache(ctx->snapset_obc, ctx.get(), t, attrs); @@ -6267,7 +6267,7 @@ void ReplicatedPG::_make_clone( object_info_t *poi) { bufferlist bv; - ::encode(*poi, bv); + ::encode(*poi, bv, get_osdmap()->get_up_osd_features()); t->clone(head, coid); setattr_maybe_cache(obc, ctx, t, OI_ATTR, bv); @@ -6728,7 +6728,7 @@ void ReplicatedPG::finish_ctx(OpContext *ctx, int log_op_type, bool maintain_ssc map attrs; bufferlist bv(sizeof(ctx->new_obs.oi)); - ::encode(ctx->snapset_obc->obs.oi, bv); + ::encode(ctx->snapset_obc->obs.oi, bv, get_osdmap()->get_up_osd_features()); ctx->op_t->touch(snapoid); attrs[OI_ATTR].claim(bv); attrs[SS_ATTR].claim(bss); @@ -6774,7 +6774,7 @@ void ReplicatedPG::finish_ctx(OpContext *ctx, int log_op_type, bool maintain_ssc map attrs; bufferlist bv(sizeof(ctx->new_obs.oi)); - ::encode(ctx->new_obs.oi, bv); + ::encode(ctx->new_obs.oi, bv, get_osdmap()->get_up_osd_features()); attrs[OI_ATTR].claim(bv); if (soid.snap == CEPH_NOSNAP) { @@ -8874,7 +8874,7 @@ void ReplicatedPG::handle_watch_timeout(WatchRef watch) oi.prior_version = obc->obs.oi.version; oi.version = ctx->at_version; bufferlist bl; - ::encode(oi, bl); + ::encode(oi, bl, get_osdmap()->get_up_osd_features()); setattr_maybe_cache(obc, ctx.get(), t, OI_ATTR, bl); if (pool.info.require_rollback()) { @@ -9688,7 +9688,7 @@ ObjectContextRef ReplicatedPG::mark_object_lost(ObjectStore::Transaction *t, obc->obs.oi.prior_version = version; bufferlist b2; - obc->obs.oi.encode(b2); + obc->obs.oi.encode(b2, get_osdmap()->get_up_osd_features()); assert(!pool.info.require_rollback()); t->setattr(coll, ghobject_t(oid), OI_ATTR, b2); @@ -10576,7 +10576,7 @@ uint64_t ReplicatedPG::recover_primary(uint64_t max, ThreadPool::TPHandle &handl ObjectStore::Transaction t; bufferlist b2; - obc->obs.oi.encode(b2); + obc->obs.oi.encode(b2, get_osdmap()->get_up_osd_features()); assert(!pool.info.require_rollback()); t.setattr(coll, ghobject_t(soid), OI_ATTR, b2); @@ -11710,7 +11710,7 @@ void ReplicatedPG::hit_set_persist() bufferlist bss; ::encode(ctx->new_snapset, bss); bufferlist boi(sizeof(ctx->new_obs.oi)); - ::encode(ctx->new_obs.oi, boi); + ::encode(ctx->new_obs.oi, boi, get_osdmap()->get_up_osd_features()); ctx->op_t->append(oid, 0, bl.length(), bl, 0); map attrs; diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index 5c3ee93f305f..802b41d222e8 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -4691,7 +4691,7 @@ ps_t object_info_t::legacy_object_locator_to_ps(const object_t &oid, return ps; } -void object_info_t::encode(bufferlist& bl) const +void object_info_t::encode(bufferlist& bl, uint64_t features) const { object_locator_t myoloc(soid); map old_watchers; @@ -4942,7 +4942,7 @@ void ObjectRecoveryInfo::encode(bufferlist &bl, uint64_t features) const ::encode(soid, bl); ::encode(version, bl); ::encode(size, bl); - ::encode(oi, bl); + ::encode(oi, bl, features); ::encode(ss, bl); ::encode(copy_subset, bl); ::encode(clone_subset, bl); diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 9e82b315f721..5f8bb292a4d8 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -3321,7 +3321,7 @@ struct object_info_t { set_omap_digest(-1); } - void encode(bufferlist& bl) const; + void encode(bufferlist& bl, uint64_t features) const; void decode(bufferlist::iterator& bl); void decode(bufferlist& bl) { bufferlist::iterator p = bl.begin(); @@ -3351,7 +3351,7 @@ struct object_info_t { return *this; } }; -WRITE_CLASS_ENCODER(object_info_t) +WRITE_CLASS_ENCODER_FEATURES(object_info_t) struct ObjectState { object_info_t oi; diff --git a/src/test/encoding/types.h b/src/test/encoding/types.h index 15baa81a27bf..87126a9edfad 100644 --- a/src/test/encoding/types.h +++ b/src/test/encoding/types.h @@ -78,7 +78,7 @@ TYPE(object_copy_cursor_t) TYPE_FEATUREFUL(object_copy_data_t) TYPE(pg_create_t) TYPE(watch_info_t) -TYPE(object_info_t) +TYPE_FEATUREFUL(object_info_t) TYPE(SnapSet) TYPE_FEATUREFUL(ObjectRecoveryInfo) TYPE(ObjectRecoveryProgress) diff --git a/src/tools/RadosDump.h b/src/tools/RadosDump.h index 54cec998a0ac..15f53e6fa5b1 100644 --- a/src/tools/RadosDump.h +++ b/src/tools/RadosDump.h @@ -172,7 +172,7 @@ struct object_begin { ::encode(hoid.hobj, bl); ::encode(hoid.generation, bl); ::encode(hoid.shard_id, bl); - ::encode(oi, bl); + ::encode(oi, bl, -1); /* FIXME: we always encode with full features */ ENCODE_FINISH(bl); } void decode(bufferlist::iterator& bl) { diff --git a/src/tools/ceph_objectstore_tool.cc b/src/tools/ceph_objectstore_tool.cc index 128bea14d248..054a6b4b003b 100644 --- a/src/tools/ceph_objectstore_tool.cc +++ b/src/tools/ceph_objectstore_tool.cc @@ -1797,7 +1797,7 @@ struct do_fix_lost : public action_on_object_t { return 0; oi.clear_flag(object_info_t::FLAG_LOST); bufferlist bl; - ::encode(oi, bl); + ::encode(oi, bl, -1); /* fixme: using full features */ ObjectStore::Transaction t; t.setattr(coll, ghobj, OI_ATTR, bl); int r = store->apply_transaction(osr, std::move(t)); @@ -1969,7 +1969,7 @@ 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); + ::encode(oi, attr, -1); /* fixme: using full features */ ObjectStore::Transaction t; t.setattr(coll, ghobj, OI_ATTR, attr); t.truncate(coll, ghobj, setsize);