From 3ea9790ba3081b6a5e4cceea9b0c57e31ce29219 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sun, 26 Mar 2017 14:47:12 -0400 Subject: [PATCH] osd: use target object hash (not pgid.ps) for temp objects Signed-off-by: Sage Weil --- src/common/hobject.h | 6 ++++++ src/osd/ECBackend.cc | 4 ++-- src/osd/PGBackend.h | 4 ++-- src/osd/PrimaryLogPG.cc | 17 ++++++++++------- src/osd/PrimaryLogPG.h | 7 ++++--- src/osd/ReplicatedBackend.cc | 4 ++-- src/osd/osd_types.h | 6 ------ src/test/objectstore_bench.cc | 4 ++-- 8 files changed, 28 insertions(+), 24 deletions(-) diff --git a/src/common/hobject.h b/src/common/hobject.h index 1ec236bbd23..66319e9eefe 100644 --- a/src/common/hobject.h +++ b/src/common/hobject.h @@ -272,6 +272,12 @@ public: return oid.name; } + hobject_t make_temp_hobject(const string& name) const { + return hobject_t(object_t(name), "", CEPH_NOSNAP, + hash, + hobject_t::POOL_TEMP_START - pool, ""); + } + void swap(hobject_t &o) { hobject_t temp(o); o = (*this); diff --git a/src/osd/ECBackend.cc b/src/osd/ECBackend.cc index 27bbe24798f..8e7b09fe38a 100644 --- a/src/osd/ECBackend.cc +++ b/src/osd/ECBackend.cc @@ -289,8 +289,8 @@ void ECBackend::handle_recovery_push( tobj = ghobject_t(op.soid, ghobject_t::NO_GEN, get_parent()->whoami_shard().shard); } else { - tobj = ghobject_t(get_parent()->get_temp_recovery_object(op.version, - op.soid.snap), + tobj = ghobject_t(get_parent()->get_temp_recovery_object(op.soid, + op.version), ghobject_t::NO_GEN, get_parent()->whoami_shard().shard); if (op.before_progress.first) { diff --git a/src/osd/PGBackend.h b/src/osd/PGBackend.h index 79989d00f37..763e02bc2b8 100644 --- a/src/osd/PGBackend.h +++ b/src/osd/PGBackend.h @@ -243,8 +243,8 @@ typedef ceph::shared_ptr OSDMapRef; virtual uint64_t min_peer_features() const = 0; - virtual hobject_t get_temp_recovery_object(eversion_t version, - snapid_t snap) = 0; + virtual hobject_t get_temp_recovery_object(const hobject_t& target, + eversion_t version) = 0; virtual void send_message_osd_cluster( int peer, Message *m, epoch_t from_epoch) = 0; diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index c64ba07a477..a87ce28fd96 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -6526,24 +6526,27 @@ void PrimaryLogPG::do_osd_op_effects(OpContext *ctx, const ConnectionRef& conn) } } -hobject_t PrimaryLogPG::generate_temp_object() +hobject_t PrimaryLogPG::generate_temp_object(const hobject_t& target) { ostringstream ss; - ss << "temp_" << info.pgid << "_" << get_role() << "_" << osd->monc->get_global_id() << "_" << (++temp_seq); - hobject_t hoid = info.pgid.make_temp_hobject(ss.str()); + ss << "temp_" << info.pgid << "_" << get_role() + << "_" << osd->monc->get_global_id() << "_" << (++temp_seq); + hobject_t hoid = target.make_temp_hobject(ss.str()); dout(20) << __func__ << " " << hoid << dendl; return hoid; } -hobject_t PrimaryLogPG::get_temp_recovery_object(eversion_t version, snapid_t snap) +hobject_t PrimaryLogPG::get_temp_recovery_object( + const hobject_t& target, + eversion_t version) { ostringstream ss; ss << "temp_recovering_" << info.pgid // (note this includes the shardid) << "_" << version << "_" << info.history.same_interval_since - << "_" << snap; + << "_" << target.snap; // pgid + version + interval + snapid is unique, and short - hobject_t hoid = info.pgid.make_temp_hobject(ss.str()); + hobject_t hoid = target.make_temp_hobject(ss.str()); dout(20) << __func__ << " " << hoid << dendl; return hoid; } @@ -7253,7 +7256,7 @@ void PrimaryLogPG::process_copy_chunk(hobject_t oid, ceph_tid_t tid, int r) if (cop->temp_cursor.is_initial()) { assert(!cop->results.started_temp_obj); cop->results.started_temp_obj = true; - cop->results.temp_oid = generate_temp_object(); + cop->results.temp_oid = generate_temp_object(oid); dout(20) << __func__ << " using temp " << cop->results.temp_oid << dendl; } ObjectContextRef tempobc = get_object_context(cop->results.temp_oid, true); diff --git a/src/osd/PrimaryLogPG.h b/src/osd/PrimaryLogPG.h index d64c08e6555..fe39e54ce6d 100644 --- a/src/osd/PrimaryLogPG.h +++ b/src/osd/PrimaryLogPG.h @@ -1378,10 +1378,11 @@ private: bool check_src_targ(const hobject_t& soid, const hobject_t& toid) const; uint64_t temp_seq; ///< last id for naming temp objects - hobject_t generate_temp_object(); ///< generate a new temp object name + /// generate a new temp object name + hobject_t generate_temp_object(const hobject_t& target); /// generate a new temp object name (for recovery) - hobject_t get_temp_recovery_object(eversion_t version, - snapid_t snap) override; + hobject_t get_temp_recovery_object(const hobject_t& target, + eversion_t version) override; int get_recovery_op_priority() const { int pri = 0; pool.info.opts.get(pool_opts_t::RECOVERY_OP_PRIORITY, &pri); diff --git a/src/osd/ReplicatedBackend.cc b/src/osd/ReplicatedBackend.cc index deb703cf9a8..d70dc51eb99 100644 --- a/src/osd/ReplicatedBackend.cc +++ b/src/osd/ReplicatedBackend.cc @@ -1694,8 +1694,8 @@ void ReplicatedBackend::submit_push_data( if (first && complete) { target_oid = recovery_info.soid; } else { - target_oid = get_parent()->get_temp_recovery_object(recovery_info.version, - recovery_info.soid.snap); + target_oid = get_parent()->get_temp_recovery_object(recovery_info.soid, + recovery_info.version); if (first) { dout(10) << __func__ << ": Adding oid " << target_oid << " in the temp collection" << dendl; diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 2db0c842b0a..0d2297582f5 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -541,12 +541,6 @@ struct spg_t { DECODE_FINISH(bl); } - hobject_t make_temp_hobject(const string& name) const { - return hobject_t(object_t(name), "", CEPH_NOSNAP, - pgid.ps(), - hobject_t::POOL_TEMP_START - pgid.pool(), ""); - } - ghobject_t make_temp_ghobject(const string& name) const { return ghobject_t( hobject_t(object_t(name), "", CEPH_NOSNAP, diff --git a/src/test/objectstore_bench.cc b/src/test/objectstore_bench.cc index 303208f8a49..60c5d597e24 100644 --- a/src/test/objectstore_bench.cc +++ b/src/test/objectstore_bench.cc @@ -271,7 +271,7 @@ int main(int argc, const char *argv[]) for (int i = 0; i < cfg.threads; i++) { std::stringstream oss; oss << "osbench-thread-" << i; - oids.emplace_back(pg.make_temp_hobject(oss.str())); + oids.emplace_back(hobject_t(sobject_t(oss.str(), CEPH_NOSNAP))); ObjectStore::Sequencer osr(__func__); ObjectStore::Transaction t; @@ -280,7 +280,7 @@ int main(int argc, const char *argv[]) assert(r == 0); } } else { - oids.emplace_back(pg.make_temp_hobject("osbench")); + oids.emplace_back(hobject_t(sobject_t("osbench", CEPH_NOSNAP))); ObjectStore::Sequencer osr(__func__); ObjectStore::Transaction t; -- 2.39.5