diff options
author | Kevin Cherkauer <kevin.cherkauer@mongodb.com> | 2022-12-13 17:04:36 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-12-13 18:01:24 +0000 |
commit | dd42ea7c86b637f683b058bdd4d52e17904a3502 (patch) | |
tree | d0141b44e298e893724e05146f7adb0827280f3a | |
parent | 21a03e441d6c36265d0b35d2ac80a9202665262b (diff) | |
download | mongo-dd42ea7c86b637f683b058bdd4d52e17904a3502.tar.gz |
SERVER-72059 Named Pipes _writeTestPipeBsonFileSync() test shell func
-rw-r--r-- | src/mongo/shell/named_pipe_test_helper.h | 18 | ||||
-rw-r--r-- | src/mongo/shell/shell_utils_launcher.cpp | 34 |
2 files changed, 39 insertions, 13 deletions
diff --git a/src/mongo/shell/named_pipe_test_helper.h b/src/mongo/shell/named_pipe_test_helper.h index 81f14751dd1..1d3c9f87499 100644 --- a/src/mongo/shell/named_pipe_test_helper.h +++ b/src/mongo/shell/named_pipe_test_helper.h @@ -40,11 +40,20 @@ namespace mongo { class NamedPipeHelper { public: static BSONObj readFromPipes(const std::vector<std::string>& pipeRelativePaths); + static void writeToPipe(std::string pipeDir, + std::string pipeRelativePath, + long objects, + long stringMinSize, + long stringMaxSize) noexcept; static void writeToPipeAsync(std::string pipeDir, std::string pipeRelativePath, long objects, long stringMinSize, long stringMaxSize); + static void writeToPipeObjects(std::string pipeDir, + std::string pipeRelativePath, + long objects, + std::vector<BSONObj> bsonObjs) noexcept; static void writeToPipeObjectsAsync(std::string pipeDir, std::string pipeRelativePath, long objects, @@ -52,14 +61,5 @@ public: private: static std::string getString(int length); - static void writeToPipe(std::string pipeDir, - std::string pipeRelativePath, - long objects, - long stringMinSize, - long stringMaxSize) noexcept; - static void writeToPipeObjects(std::string pipeDir, - std::string pipeRelativePath, - long objects, - std::vector<BSONObj> bsonObjs) noexcept; }; } // namespace mongo diff --git a/src/mongo/shell/shell_utils_launcher.cpp b/src/mongo/shell/shell_utils_launcher.cpp index 75d7682c155..456039eba7a 100644 --- a/src/mongo/shell/shell_utils_launcher.cpp +++ b/src/mongo/shell/shell_utils_launcher.cpp @@ -1383,13 +1383,17 @@ int32_t readBytes(char* buf, int32_t count, std::ifstream& ifs) { * Writes a test named pipe of BSONobj's that are first read into memory from a BSON file, then * round-robinned into the pipe up to the requested number of objects. This is the same as function * WriteTestPipeObjects except the objects are read from a file instead of passed in as a BSONArray. + * + * args: * "0": string; relative path of the pipe * "1": number; number of BSON objects to write to the pipe * "2": string; relative path to the file of BSON objects; these must fit in memory * "3": OPTIONAL string; absolute path to the directory where named pipes exist. If not given, * 'kDefaultPipePath' is used. + * + * async: true, write asynchronously; false, write synchronously */ -BSONObj WriteTestPipeBsonFile(const BSONObj& args, void* unused) { +BSONObj writeTestPipeBsonFileHelper(const BSONObj& args, bool async) { int nFields = args.nFields(); uassert(ErrorCodes::FailedToParse, "Function requires 3 or 4 arguments but {} were given"_format(nFields), @@ -1461,14 +1465,35 @@ BSONObj WriteTestPipeBsonFile(const BSONObj& args, void* unused) { } } // while !eof - // Write the pipe asynchronously. - NamedPipeHelper::writeToPipeObjectsAsync( - std::move(pipeDir), pipePathElem.str(), objectsElem.numberLong(), bsonObjs); + // Write the pipe. + if (async) { + NamedPipeHelper::writeToPipeObjectsAsync( + std::move(pipeDir), pipePathElem.str(), objectsElem.numberLong(), std::move(bsonObjs)); + } else { + NamedPipeHelper::writeToPipeObjects( + std::move(pipeDir), pipePathElem.str(), objectsElem.numberLong(), std::move(bsonObjs)); + } return {}; } /** + * Asynchronously writes a test named pipe of BSONobj's that are first read into memory from a BSON + * file. See writeTestPipeBsonFileHelper() header for more info. + */ +BSONObj WriteTestPipeBsonFile(const BSONObj& args, void* unused) { + return writeTestPipeBsonFileHelper(args, true); +} + +/** + * Synchronously writes a test named pipe of BSONobj's that are first read into memory from a BSON + * file. See writeTestPipeBsonFileHelper() header for more info. + */ +BSONObj WriteTestPipeBsonFileSync(const BSONObj& args, void* unused) { + return writeTestPipeBsonFileHelper(args, false); +} + +/** * Writes a test named pipe by round-robinning caller-provided objects to the pipe. 'args' BSONObj * should contain fields: * "0": string; relative path of the pipe @@ -1612,6 +1637,7 @@ void installShellUtilsLauncher(Scope& scope) { scope.injectNative("_readTestPipes", ReadTestPipes); scope.injectNative("_writeTestPipe", WriteTestPipe); scope.injectNative("_writeTestPipeBsonFile", WriteTestPipeBsonFile); + scope.injectNative("_writeTestPipeBsonFileSync", WriteTestPipeBsonFileSync); scope.injectNative("_writeTestPipeObjects", WriteTestPipeObjects); } } // namespace shell_utils |