summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmirsaman Memaripour <amirsaman.memaripour@mongodb.com>2020-07-30 20:17:14 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-08-04 17:22:53 +0000
commit45bed9f6033a9c0df0cc54243e4a24aa9ff8bd2a (patch)
tree609d1eae0c35708651d1ef7d0cf0846c79f0690c
parentf8be36eca7f5d17b0cbea557e8825046352eea19 (diff)
downloadmongo-45bed9f6033a9c0df0cc54243e4a24aa9ff8bd2a.tar.gz
SERVER-49157 Make TransportLayer reference a specific WireSpec
-rw-r--r--src/mongo/transport/SConscript1
-rw-r--r--src/mongo/transport/service_state_machine_test.cpp3
-rw-r--r--src/mongo/transport/transport_layer.h11
-rw-r--r--src/mongo/transport/transport_layer_asio.cpp6
-rw-r--r--src/mongo/transport/transport_layer_asio.h4
-rw-r--r--src/mongo/transport/transport_layer_manager.cpp2
-rw-r--r--src/mongo/transport/transport_layer_manager.h9
-rw-r--r--src/mongo/transport/transport_layer_mock.cpp2
-rw-r--r--src/mongo/transport/transport_layer_mock.h3
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();