]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/Pipe: disconnect Pipe from lossy Connection immediately on failure
authorSage Weil <sage@inktank.com>
Thu, 19 Jul 2012 16:28:39 +0000 (09:28 -0700)
committerSage Weil <sage@inktank.com>
Sat, 21 Jul 2012 01:36:32 +0000 (18:36 -0700)
When we have a lossy connection failure, immediately disconnect the Pipe
and set the Connection failed flag.  There is no reason to wait until the
reaper comes along.

Signed-off-by: Sage Weil <sage@inktank.com>
src/msg/Pipe.cc
src/msg/Pipe.h

index 9d4dda2fbbed1b00e7212f844c9ea51cf2223465..f81f39c7cc8d6353bffd4eee0324fc3b0eb5c56c 100644 (file)
@@ -987,7 +987,18 @@ void Pipe::fault(bool onconnect, bool onread)
   // lossy channel?
   if (policy.lossy) {
     ldout(msgr->cct,10) << "fault on lossy channel, failing" << dendl;
-    fail();
+
+    stop();
+
+    // disconnect from Connection, and mark it failed.  future messages
+    // will be dropped.
+    assert(connection_state);
+    connection_state->clear_pipe(this);
+
+    in_q->discard_queue();
+    discard_queue();
+
+    msgr->dispatch_queue.queue_reset(connection_state);
     return;
   }
 
@@ -1026,19 +1037,6 @@ void Pipe::fault(bool onconnect, bool onread)
   }
 }
 
-void Pipe::fail()
-{
-  ldout(msgr->cct,10) << "fail" << dendl;
-  assert(pipe_lock.is_locked());
-
-  stop();
-
-  in_q->discard_queue();
-  discard_queue();
-  
-  msgr->dispatch_queue.queue_reset(connection_state);
-}
-
 void Pipe::was_session_reset()
 {
   assert(pipe_lock.is_locked());
index 056129b41b7ced7ea9ed8b1aee7d38843edd881f..b7fd4c039bd626d0acabd2e966e0db7bf6de7b5b 100644 (file)
@@ -144,7 +144,6 @@ class DispatchQueue;
     int write_keepalive();
 
     void fault(bool onconnect=false, bool reader=false);
-    void fail();
 
     void was_session_reset();