MongoDB secondary node crashes randomly when primary node is killed/dies

XMLWordPrintableJSON

    • Fully Compatible
    • ALL
    • Platforms 16 (06/24/16)
    • None
    • 3
    • None
    • None
    • None
    • None
    • None
    • None
    • None

      The crash comes from unhandled exception thrown in ~AsyncStream() destructor, which calls destroyStream() function, which, in turn, calls incorrect version of close() on ASIO socket.

      Relevant code piece from async_stream_common.h

      ....
      
      std::error_code ec;
          stream->shutdown(asio::ip::tcp::socket::shutdown_both, ec);
          stream->close(); // <----- probably meant to call another overload close(ec)
          if (ec) {
              logCloseFailed(ec);
      }
      
      ....
      

      Most likely another close() overload was meant to be used that accepts ec as an argument. The overload used here just throws an exceptions if socket is closed.

              Assignee:
              Mira Carey
              Reporter:
              Jimmy [X]
              Votes:
              0 Vote for this issue
              Watchers:
              10 Start watching this issue

                Created:
                Updated:
                Resolved: