]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/async: only system can accept more data, continue send.
authorJianpeng Ma <jianpeng.ma@intel.com>
Wed, 25 Oct 2017 16:34:45 +0000 (00:34 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Wed, 25 Oct 2017 16:34:45 +0000 (00:34 +0800)
Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
src/msg/async/AsyncConnection.cc

index 3f09648d057834c8437f53d2fb78c2c4bcc2c66b..30eec2f3f30a4ff85e0578ef4527bf5693962b68 100644 (file)
@@ -2412,18 +2412,21 @@ void AsyncConnection::handle_write()
     } while (can_write == WriteStatus::CANWRITE);
     write_lock.unlock();
 
-    uint64_t left = ack_left;
-    if (left) {
-      ceph_le64 s;
-      s = in_seq;
-      outcoming_bl.append(CEPH_MSGR_TAG_ACK);
-      outcoming_bl.append((char*)&s, sizeof(s));
-      ldout(async_msgr->cct, 10) << __func__ << " try send msg ack, acked " << left << " messages" << dendl;
-      ack_left -= left;
-      left = ack_left;
-      r = _try_send(left);
-    } else if (is_queued()) {
-      r = _try_send();
+    // if r > 0 mean data still lefted, so no need _try_send.
+    if (r == 0) {
+      uint64_t left = ack_left;
+      if (left) {
+       ceph_le64 s;
+       s = in_seq;
+       outcoming_bl.append(CEPH_MSGR_TAG_ACK);
+       outcoming_bl.append((char*)&s, sizeof(s));
+       ldout(async_msgr->cct, 10) << __func__ << " try send msg ack, acked " << left << " messages" << dendl;
+       ack_left -= left;
+       left = ack_left;
+       r = _try_send(left);
+      } else if (is_queued()) {
+       r = _try_send();
+      }
     }
 
     logger->tinc(l_msgr_running_send_time, ceph::mono_clock::now() - start);