]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd: simplify dup/resent logic
authorSage Weil <sage@redhat.com>
Tue, 20 Dec 2016 20:54:18 +0000 (15:54 -0500)
committerSage Weil <sage@redhat.com>
Thu, 29 Dec 2016 15:30:08 +0000 (10:30 -0500)
No need to special ack path.

Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/PG.cc
src/osd/PG.h
src/osd/PGLog.h
src/osd/PrimaryLogPG.cc

index 6ae86eb2a956fa81ecf0278e10ec3c8c7c25ab5a..7e60d7dea42a4ca30441e9323ac67440ee58002b 100644 (file)
@@ -2435,13 +2435,13 @@ void PG::update_heartbeat_peers()
 
 bool PG::check_in_progress_op(
   const osd_reqid_t &r,
-  eversion_t *replay_version,
+  eversion_t *version,
   version_t *user_version,
   int *return_code) const
 {
   return (
-    projected_log.get_request(r, replay_version, user_version, return_code) ||
-    pg_log.get_log().get_request(r, replay_version, user_version, return_code));
+    projected_log.get_request(r, version, user_version, return_code) ||
+    pg_log.get_log().get_request(r, version, user_version, return_code));
 }
 
 void PG::_update_calc_stats()
index 5c5c4aea79c473b7893debc1f8a8cb55710b4c13..0e377deeb2a7bb30856900e39dd59c6aa3fde321 100644 (file)
@@ -2217,7 +2217,7 @@ public:
   PGLog::IndexedLog projected_log;
   bool check_in_progress_op(
     const osd_reqid_t &r,
-    eversion_t *replay_version,
+    eversion_t *version,
     version_t *user_version,
     int *return_code) const;
   eversion_t projected_last_update;
index 17fb39d405ae0f18b10a0c36dc4e6a66c9f37bbe..713d3d8ce356277955096454b6886388e7ec369e 100644 (file)
@@ -258,10 +258,10 @@ public:
 
     bool get_request(
       const osd_reqid_t &r,
-      eversion_t *replay_version,
+      eversion_t *version,
       version_t *user_version,
       int *return_code) const {
-      assert(replay_version);
+      assert(version);
       assert(user_version);
       assert(return_code);
       ceph::unordered_map<osd_reqid_t,pg_log_entry_t*>::const_iterator p;
@@ -270,7 +270,7 @@ public:
       }
       p = caller_ops.find(r);
       if (p != caller_ops.end()) {
-       *replay_version = p->second->version;
+       *version = p->second->version;
        *user_version = p->second->user_version;
        *return_code = p->second->return_code;
        return true;
@@ -288,7 +288,7 @@ public:
             i != p->second->extra_reqids.end();
             ++i) {
          if (i->first == r) {
-           *replay_version = p->second->version;
+           *version = p->second->version;
            *user_version = i->second;
            *return_code = p->second->return_code;
            return true;
index e0ed6192dd1ae1439e478acf3c03e984c61ee511..87f6cb5a51c9a85c115327ab04bee898a0087d89 100644 (file)
@@ -1949,38 +1949,27 @@ void PrimaryLogPG::do_op(OpRequestRef& op)
     return;
   }
 
-  // dup/replay?
+  // dup/resent?
   if (op->may_write() || op->may_cache()) {
     // warning: we will get back *a* request for this reqid, but not
     // necessarily the most recent.  this happens with flush and
     // promote ops, but we can't possible have both in our log where
     // the original request is still not stable on disk, so for our
     // purposes here it doesn't matter which one we get.
-    eversion_t replay_version;
+    eversion_t version;
     version_t user_version;
     int return_code = 0;
     bool got = check_in_progress_op(
-      m->get_reqid(), &replay_version, &user_version, &return_code);
+      m->get_reqid(), &version, &user_version, &return_code);
     if (got) {
       dout(3) << __func__ << " dup " << m->get_reqid()
-             << " was " << replay_version << dendl;
-      if (already_complete(replay_version)) {
-       osd->reply_op_error(op, return_code, replay_version, user_version);
+             << " version " << version << dendl;
+      if (already_complete(version)) {
+       osd->reply_op_error(op, return_code, version, user_version);
       } else {
-       if (m->wants_ack()) {
-         if (already_ack(replay_version)) {
-           MOSDOpReply *reply = new MOSDOpReply(m, 0, get_osdmap()->get_epoch(), 0, false);
-           reply->add_flags(CEPH_OSD_FLAG_ACK);
-           reply->set_reply_versions(replay_version, user_version);
-           osd->send_message_osd_client(reply, m->get_connection());
-         } else {
-           dout(10) << " waiting for " << replay_version << " to ack" << dendl;
-           waiting_for_ack[replay_version].push_back(make_pair(op, user_version));
-         }
-       }
-       dout(10) << " waiting for " << replay_version << " to commit" << dendl;
+       dout(10) << " waiting for " << version << " to commit" << dendl;
         // always queue ondisk waiters, so that we can requeue if needed
-       waiting_for_ondisk[replay_version].push_back(make_pair(op, user_version));
+       waiting_for_ondisk[version].push_back(make_pair(op, user_version));
        op->mark_delayed("waiting for ondisk");
       }
       return;