]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd: use target object hash (not pgid.ps) for temp objects
authorSage Weil <sage@redhat.com>
Sun, 26 Mar 2017 18:47:12 +0000 (14:47 -0400)
committerSage Weil <sage@redhat.com>
Mon, 3 Apr 2017 13:57:18 +0000 (09:57 -0400)
Signed-off-by: Sage Weil <sage@redhat.com>
src/common/hobject.h
src/osd/ECBackend.cc
src/osd/PGBackend.h
src/osd/PrimaryLogPG.cc
src/osd/PrimaryLogPG.h
src/osd/ReplicatedBackend.cc
src/osd/osd_types.h
src/test/objectstore_bench.cc

index 1ec236bbd23e1144997b485694974005e26f25b8..66319e9eefe708cb7525c9a21c091b1bf3c79d10 100644 (file)
@@ -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);
index 27bbe24798f31b535646eb9b68430cbafcbbccc3..8e7b09fe38aec5a5256b15b213691ccdb1a31164 100644 (file)
@@ -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) {
index 79989d00f372dc02fdfe727333c9c45ff72c3027..763e02bc2b8a968923190e039685e39f0f6b03cf 100644 (file)
@@ -243,8 +243,8 @@ typedef ceph::shared_ptr<const OSDMap> 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;
index c64ba07a477b3b460591510e748108e13f71ff40..a87ce28fd9640c62951664a8ac181ff7ba2be51e 100644 (file)
@@ -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);
index d64c08e655540adb85afdc4fd388f94ffa758707..fe39e54ce6d15a20c7cb7a3f91d1957ca499379c 100644 (file)
@@ -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);
index deb703cf9a8464772c4094a6cf566a2299b56450..d70dc51eb998c8443625a00876d41e741e062286 100644 (file)
@@ -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;
index 2db0c842b0aa425e9c02850a9420c76fe4888073..0d2297582f56674e98b76f4f7966fc0b564acfcb 100644 (file)
@@ -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,
index 303208f8a49f2ebaa95c9d0f149d8022c2eff3a8..60c5d597e24528fa2c0bf63d8a24f29cde92ccab 100644 (file)
@@ -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;