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

      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: