Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-24582

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

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

      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@mongodb.com Mira Carey
            Reporter:
            KarrotKake Jimmy [X]
            Votes:
            0 Vote for this issue
            Watchers:
            10 Start watching this issue

              Created:
              Updated:
              Resolved: