summaryrefslogtreecommitdiff
path: root/src/mongo/transport/mock_session.h
diff options
context:
space:
mode:
authorAmirsaman Memaripour <amirsaman.memaripour@mongodb.com>2020-07-22 19:45:31 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-07-22 22:53:47 +0000
commita3ed860ba4fbb9a662440c8e9608fef5fa6c8712 (patch)
tree3e7895d2d6c50f50f41c5038ff784dfe98e14286 /src/mongo/transport/mock_session.h
parent01636425695d37e1c3090ff8b47a97d87a4eb1f6 (diff)
downloadmongo-a3ed860ba4fbb9a662440c8e9608fef5fa6c8712.tar.gz
SERVER-49106 Add poll function to the ServiceExecutor API
Diffstat (limited to 'src/mongo/transport/mock_session.h')
-rw-r--r--src/mongo/transport/mock_session.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/mongo/transport/mock_session.h b/src/mongo/transport/mock_session.h
index d88a0af263e..72d05aa3e66 100644
--- a/src/mongo/transport/mock_session.h
+++ b/src/mongo/transport/mock_session.h
@@ -29,8 +29,11 @@
#pragma once
+#include <list>
+
#include "mongo/base/checked_cast.h"
#include "mongo/config.h"
+#include "mongo/stdx/mutex.h"
#include "mongo/transport/session.h"
#include "mongo/transport/transport_layer_mock.h"
#include "mongo/util/net/hostandport.h"
@@ -100,6 +103,22 @@ public:
return Future<Message>::makeReady(sourceMessage());
}
+ Future<void> waitForData() override {
+ auto fp = makePromiseFuture<void>();
+ stdx::lock_guard<Latch> lk(_waitForDataMutex);
+ _waitForDataQueue.emplace_back(std::move(fp.promise));
+ return std::move(fp.future);
+ }
+
+ void signalAvailableData() {
+ stdx::lock_guard<Latch> lk(_waitForDataMutex);
+ if (_waitForDataQueue.size() == 0)
+ return;
+ Promise<void> promise = std::move(_waitForDataQueue.front());
+ _waitForDataQueue.pop_front();
+ promise.emplaceValue();
+ }
+
Status sinkMessage(Message message) override {
if (!_tl || _tl->inShutdown()) {
return TransportLayer::ShutdownStatus;
@@ -154,6 +173,9 @@ protected:
HostAndPort _local;
SockAddr _remoteAddr;
SockAddr _localAddr;
+
+ mutable Mutex _waitForDataMutex = MONGO_MAKE_LATCH("MockSession::_waitForDataMutex");
+ std::list<Promise<void>> _waitForDataQueue;
};
} // namespace transport