diff options
author | Amirsaman Memaripour <amirsaman.memaripour@mongodb.com> | 2020-07-30 20:17:14 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-08-04 17:22:53 +0000 |
commit | 45bed9f6033a9c0df0cc54243e4a24aa9ff8bd2a (patch) | |
tree | 609d1eae0c35708651d1ef7d0cf0846c79f0690c | |
parent | f8be36eca7f5d17b0cbea557e8825046352eea19 (diff) | |
download | mongo-45bed9f6033a9c0df0cc54243e4a24aa9ff8bd2a.tar.gz |
SERVER-49157 Make TransportLayer reference a specific WireSpec
-rw-r--r-- | src/mongo/transport/SConscript | 1 | ||||
-rw-r--r-- | src/mongo/transport/service_state_machine_test.cpp | 3 | ||||
-rw-r--r-- | src/mongo/transport/transport_layer.h | 11 | ||||
-rw-r--r-- | src/mongo/transport/transport_layer_asio.cpp | 6 | ||||
-rw-r--r-- | src/mongo/transport/transport_layer_asio.h | 4 | ||||
-rw-r--r-- | src/mongo/transport/transport_layer_manager.cpp | 2 | ||||
-rw-r--r-- | src/mongo/transport/transport_layer_manager.h | 9 | ||||
-rw-r--r-- | src/mongo/transport/transport_layer_mock.cpp | 2 | ||||
-rw-r--r-- | src/mongo/transport/transport_layer_mock.h | 3 |
9 files changed, 27 insertions, 14 deletions
diff --git a/src/mongo/transport/SConscript b/src/mongo/transport/SConscript index 48f7c7011b8..c42b0b055fa 100644 --- a/src/mongo/transport/SConscript +++ b/src/mongo/transport/SConscript @@ -14,6 +14,7 @@ env.Library( LIBDEPS=[ '$BUILD_DIR/mongo/base', '$BUILD_DIR/mongo/db/service_context', + '$BUILD_DIR/mongo/db/wire_version', '$BUILD_DIR/mongo/util/net/ssl_manager', ], ) diff --git a/src/mongo/transport/service_state_machine_test.cpp b/src/mongo/transport/service_state_machine_test.cpp index 02669106853..b8ec929fc6f 100644 --- a/src/mongo/transport/service_state_machine_test.cpp +++ b/src/mongo/transport/service_state_machine_test.cpp @@ -198,7 +198,8 @@ public: } }; - MockTL() { + explicit MockTL(const WireSpec& wireSpec = WireSpec::instance()) + : TransportLayerMock(wireSpec) { createSessionHook = [](TransportLayer* tl) { return std::make_unique<Session>(tl); }; } diff --git a/src/mongo/transport/transport_layer.h b/src/mongo/transport/transport_layer.h index cd171156ea2..cdffaa15d53 100644 --- a/src/mongo/transport/transport_layer.h +++ b/src/mongo/transport/transport_layer.h @@ -35,6 +35,7 @@ #include "mongo/base/status.h" #include "mongo/config.h" #include "mongo/db/operation_context.h" +#include "mongo/db/wire_version.h" #include "mongo/transport/session.h" #include "mongo/util/functional.h" #include "mongo/util/future.h" @@ -80,6 +81,8 @@ public: friend class Session; + explicit TransportLayer(const WireSpec& wireSpec) : _wireSpec(wireSpec) {} + virtual ~TransportLayer() = default; virtual StatusWith<SessionHandle> connect(HostAndPort peer, @@ -119,13 +122,17 @@ public: return opCtx->getServiceContext()->makeBaton(opCtx); } + std::shared_ptr<const WireSpec::Specification> getWireSpec() const { + return _wireSpec.get(); + } + #ifdef MONGO_CONFIG_SSL /** Rotate the in-use certificates for new connections. */ virtual Status rotateCertificates(std::shared_ptr<SSLManagerInterface> manager) = 0; #endif -protected: - TransportLayer() = default; +private: + const WireSpec& _wireSpec; }; class ReactorTimer { diff --git a/src/mongo/transport/transport_layer_asio.cpp b/src/mongo/transport/transport_layer_asio.cpp index 698125c111d..a0e4fe87690 100644 --- a/src/mongo/transport/transport_layer_asio.cpp +++ b/src/mongo/transport/transport_layer_asio.cpp @@ -258,8 +258,10 @@ TransportLayerASIO::Options::Options(const ServerGlobalParams* params) } TransportLayerASIO::TransportLayerASIO(const TransportLayerASIO::Options& opts, - ServiceEntryPoint* sep) - : _ingressReactor(std::make_shared<ASIOReactor>()), + ServiceEntryPoint* sep, + const WireSpec& wireSpec) + : TransportLayer(wireSpec), + _ingressReactor(std::make_shared<ASIOReactor>()), _egressReactor(std::make_shared<ASIOReactor>()), _acceptorReactor(std::make_shared<ASIOReactor>()), _sep(sep), diff --git a/src/mongo/transport/transport_layer_asio.h b/src/mongo/transport/transport_layer_asio.h index ddbc6b2d5f5..6888fa568db 100644 --- a/src/mongo/transport/transport_layer_asio.h +++ b/src/mongo/transport/transport_layer_asio.h @@ -114,7 +114,9 @@ public: size_t maxConns = DEFAULT_MAX_CONN; // maximum number of active connections }; - TransportLayerASIO(const Options& opts, ServiceEntryPoint* sep); + TransportLayerASIO(const Options& opts, + ServiceEntryPoint* sep, + const WireSpec& wireSpec = WireSpec::instance()); virtual ~TransportLayerASIO(); diff --git a/src/mongo/transport/transport_layer_manager.cpp b/src/mongo/transport/transport_layer_manager.cpp index 3db4912e2df..7663ff26c29 100644 --- a/src/mongo/transport/transport_layer_manager.cpp +++ b/src/mongo/transport/transport_layer_manager.cpp @@ -51,8 +51,6 @@ namespace mongo { namespace transport { -TransportLayerManager::TransportLayerManager() = default; - template <typename Callable> void TransportLayerManager::_foreach(Callable&& cb) const { { diff --git a/src/mongo/transport/transport_layer_manager.h b/src/mongo/transport/transport_layer_manager.h index 0bce30d46f2..28ad7b0acda 100644 --- a/src/mongo/transport/transport_layer_manager.h +++ b/src/mongo/transport/transport_layer_manager.h @@ -56,9 +56,12 @@ class TransportLayerManager final : public TransportLayer { TransportLayerManager& operator=(const TransportLayerManager&) = delete; public: - TransportLayerManager(std::vector<std::unique_ptr<TransportLayer>> tls) - : _tls(std::move(tls)) {} - TransportLayerManager(); + TransportLayerManager(std::vector<std::unique_ptr<TransportLayer>> tls, + const WireSpec& wireSpec = WireSpec::instance()) + : TransportLayer(wireSpec), _tls(std::move(tls)) {} + + explicit TransportLayerManager(const WireSpec& wireSpec = WireSpec::instance()) + : TransportLayer(wireSpec) {} StatusWith<SessionHandle> connect(HostAndPort peer, ConnectSSLMode sslMode, diff --git a/src/mongo/transport/transport_layer_mock.cpp b/src/mongo/transport/transport_layer_mock.cpp index bbc61010991..43387b7eb54 100644 --- a/src/mongo/transport/transport_layer_mock.cpp +++ b/src/mongo/transport/transport_layer_mock.cpp @@ -41,8 +41,6 @@ namespace mongo { namespace transport { -TransportLayerMock::TransportLayerMock() : _shutdown(false) {} - SessionHandle TransportLayerMock::createSession() { auto session = createSessionHook ? createSessionHook(this) : MockSession::create(this); Session::Id sessionId = session->id(); diff --git a/src/mongo/transport/transport_layer_mock.h b/src/mongo/transport/transport_layer_mock.h index 4f234f9734a..6ff8fe4f5fa 100644 --- a/src/mongo/transport/transport_layer_mock.h +++ b/src/mongo/transport/transport_layer_mock.h @@ -49,7 +49,8 @@ class TransportLayerMock : public TransportLayer { TransportLayerMock& operator=(const TransportLayerMock&) = delete; public: - TransportLayerMock(); + explicit TransportLayerMock(const WireSpec& wireSpec = WireSpec::instance()) + : TransportLayer(wireSpec), _shutdown(false) {} ~TransportLayerMock(); SessionHandle createSession(); |