summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Benvenuto <mark.benvenuto@mongodb.com>2016-07-20 10:43:20 -0400
committerMark Benvenuto <mark.benvenuto@mongodb.com>2016-07-20 10:58:08 -0400
commit375fca85c9641e27936e2d4eb0b72078b3eea85c (patch)
tree96a91a47023f7da676ec3004a180fbddab562349
parent0a55fd140ebf45ee0b9f5fe964c2bb6f9283182d (diff)
downloadmongo-375fca85c9641e27936e2d4eb0b72078b3eea85c.tar.gz
SERVER-25017 Remove RemoteCommandRunnerImpl files
-rw-r--r--src/mongo/client/SConscript15
-rw-r--r--src/mongo/client/remote_command_runner_impl.cpp222
-rw-r--r--src/mongo/client/remote_command_runner_impl.h80
-rw-r--r--src/mongo/s/client/SConscript1
4 files changed, 0 insertions, 318 deletions
diff --git a/src/mongo/client/SConscript b/src/mongo/client/SConscript
index 3a0d63c4320..d1e37207f5e 100644
--- a/src/mongo/client/SConscript
+++ b/src/mongo/client/SConscript
@@ -177,21 +177,6 @@ env.Library(
)
env.Library(
- target='remote_command_runner_impl',
- source=[
- 'remote_command_runner_impl.cpp',
- ],
- LIBDEPS=[
- '$BUILD_DIR/mongo/base',
- '$BUILD_DIR/mongo/executor/downconvert_find_and_getmore_commands',
- '$BUILD_DIR/mongo/executor/task_executor_interface',
- '$BUILD_DIR/mongo/rpc/metadata',
- '$BUILD_DIR/mongo/util/net/hostandport',
- 'connection_pool',
- ],
-)
-
-env.Library(
target='remote_command_targeter',
source=[
'remote_command_targeter.cpp',
diff --git a/src/mongo/client/remote_command_runner_impl.cpp b/src/mongo/client/remote_command_runner_impl.cpp
deleted file mode 100644
index 4c6703dc8b0..00000000000
--- a/src/mongo/client/remote_command_runner_impl.cpp
+++ /dev/null
@@ -1,222 +0,0 @@
-/**
- * Copyright (C) 2015 MongoDB Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception, the copyright holders give permission to link the
- * code of portions of this program with the OpenSSL library under certain
- * conditions as described in each individual source file and distribute
- * linked combinations including the program with the OpenSSL library. You
- * must comply with the GNU Affero General Public License in all respects for
- * all of the code used other than as permitted herein. If you modify file(s)
- * with this exception, you may extend this exception to your version of the
- * file(s), but you are not obligated to do so. If you do not wish to do so,
- * delete this exception statement from your version. If you delete this
- * exception statement from all source files in the program, then also delete
- * it in the license file.
- */
-
-#include "mongo/platform/basic.h"
-
-#include "mongo/client/remote_command_runner_impl.h"
-
-#include "mongo/base/status_with.h"
-#include "mongo/db/namespace_string.h"
-#include "mongo/db/query/cursor_response.h"
-#include "mongo/db/query/getmore_request.h"
-#include "mongo/executor/downconvert_find_and_getmore_commands.h"
-#include "mongo/executor/network_connection_hook.h"
-#include "mongo/rpc/get_status_from_command_result.h"
-#include "mongo/rpc/protocol.h"
-#include "mongo/util/assert_util.h"
-
-namespace mongo {
-namespace {
-
-using executor::RemoteCommandRequest;
-using executor::RemoteCommandResponse;
-
-/**
- * Calculates the timeout for a network operation expiring at "expDate", given
- * that it is now "nowDate".
- *
- * Returns 0ms to indicate no expiration date, a number of milliseconds until "expDate", or
- * ErrorCodes::ExceededTimeLimit if "expDate" is not later than "nowDate".
- */
-StatusWith<Milliseconds> getTimeoutMillis(const Date_t expDate, const Date_t nowDate) {
- if (expDate == RemoteCommandRequest::kNoExpirationDate) {
- return Milliseconds(0);
- }
- if (expDate <= nowDate) {
- return {ErrorCodes::ExceededTimeLimit,
- str::stream() << "Went to run command, but it was too late. "
- "Expiration was set to "
- << dateToISOStringUTC(expDate)};
- }
- return expDate - nowDate;
-}
-
-/**
- * Peeks at error in cursor. If an error has occurred, converts the {$err: "...", code: N}
- * cursor error to a Status.
- */
-Status getStatusFromCursorResult(DBClientCursor& cursor) {
- BSONObj error;
- if (!cursor.peekError(&error)) {
- return Status::OK();
- }
-
- BSONElement e = error.getField("code");
- return Status(e.isNumber() ? ErrorCodes::fromInt(e.numberInt()) : ErrorCodes::UnknownError,
- getErrField(error).valuestrsafe());
-}
-
-using RequestDownconverter = StatusWith<Message> (*)(const RemoteCommandRequest&);
-using ReplyUpconverter = StatusWith<RemoteCommandResponse> (*)(std::int32_t requestId,
- StringData cursorNamespace,
- const Message& response);
-
-template <RequestDownconverter downconvertRequest, ReplyUpconverter upconvertReply>
-StatusWith<RemoteCommandResponse> runDownconvertedCommand(DBClientConnection* conn,
- const RemoteCommandRequest& request) {
- auto swDownconvertedRequest = downconvertRequest(request);
- if (!swDownconvertedRequest.isOK()) {
- return swDownconvertedRequest.getStatus();
- }
-
- Message requestMsg{std::move(swDownconvertedRequest.getValue())};
- Message responseMsg;
-
- try {
- conn->call(requestMsg, responseMsg, true, nullptr);
- } catch (...) {
- return exceptionToStatus();
- }
-
- auto messageId = requestMsg.header().getId();
-
- return upconvertReply(messageId, DbMessage(requestMsg).getns(), responseMsg);
-}
-
-/**
- * Downconverts the specified find command to a find protocol operation and sends it to the
- * server on the specified connection.
- */
-StatusWith<RemoteCommandResponse> runDownconvertedFindCommand(DBClientConnection* conn,
- const RemoteCommandRequest& request) {
- return runDownconvertedCommand<executor::downconvertFindCommandRequest,
- executor::upconvertLegacyQueryResponse>(conn, request);
-}
-
-/**
- * Downconverts the specified getMore command to legacy getMore operation and sends it to the
- * server on the specified connection.
- */
-StatusWith<RemoteCommandResponse> runDownconvertedGetMoreCommand(
- DBClientConnection* conn, const RemoteCommandRequest& request) {
- return runDownconvertedCommand<executor::downconvertGetMoreCommandRequest,
- executor::upconvertLegacyGetMoreResponse>(conn, request);
-}
-
-} // namespace
-
-RemoteCommandRunnerImpl::RemoteCommandRunnerImpl(
- int messagingTags, std::unique_ptr<executor::NetworkConnectionHook> hook)
- : _connPool(messagingTags, std::move(hook)) {}
-
-RemoteCommandRunnerImpl::~RemoteCommandRunnerImpl() {
- invariant(!_active);
-}
-
-void RemoteCommandRunnerImpl::startup() {
- _active = true;
-}
-
-void RemoteCommandRunnerImpl::shutdown() {
- if (!_active) {
- return;
- }
-
- _connPool.closeAllInUseConnections();
- _active = false;
-}
-
-StatusWith<RemoteCommandResponse> RemoteCommandRunnerImpl::runCommand(
- const RemoteCommandRequest& request) {
- try {
- const Date_t requestStartDate = Date_t::now();
- const auto timeoutMillis = getTimeoutMillis(request.expirationDate, requestStartDate);
- if (!timeoutMillis.isOK()) {
- return StatusWith<RemoteCommandResponse>(timeoutMillis.getStatus());
- }
-
- ConnectionPool::ConnectionPtr conn(
- &_connPool, request.target, requestStartDate, timeoutMillis.getValue());
-
- BSONObj output;
- BSONObj metadata;
-
- // If remote server does not support either find or getMore commands, down convert
- // to using DBClientInterface::query()/getMore().
- // Perform down conversion based on wire protocol version.
-
- // 'commandName' will be an empty string if the command object is an empty BSON
- // document.
- StringData commandName = request.cmdObj.firstElement().fieldNameStringData();
- const auto isFindCmd = commandName == QueryRequest::kFindCommandName;
- const auto isGetMoreCmd = commandName == GetMoreRequest::kGetMoreCommandName;
- const auto isFindOrGetMoreCmd = isFindCmd || isGetMoreCmd;
-
- // We are using the wire version to check if we need to downconverting find/getMore
- // requests because coincidentally, the find/getMore command is only supported by
- // servers that also accept OP_COMMAND.
- bool supportsFindAndGetMoreCommands = rpc::supportsWireVersionForOpCommandInMongod(
- conn.get()->getMinWireVersion(), conn.get()->getMaxWireVersion());
-
- if (!isFindOrGetMoreCmd || supportsFindAndGetMoreCommands) {
- rpc::UniqueReply commandResponse =
- conn.get()->runCommandWithMetadata(request.dbname,
- request.cmdObj.firstElementFieldName(),
- request.metadata,
- request.cmdObj);
-
- output = commandResponse->getCommandReply().getOwned();
- metadata = commandResponse->getMetadata().getOwned();
- } else if (isFindCmd) {
- return runDownconvertedFindCommand(conn.get(), request);
- } else if (isGetMoreCmd) {
- return runDownconvertedGetMoreCommand(conn.get(), request);
- }
-
- const Date_t requestFinishDate = Date_t::now();
- conn.done(requestFinishDate);
-
- return StatusWith<RemoteCommandResponse>(
- RemoteCommandResponse(std::move(output),
- std::move(metadata),
- Milliseconds(requestFinishDate - requestStartDate)));
- } catch (const DBException& ex) {
- return StatusWith<RemoteCommandResponse>(ex.toStatus());
- } catch (const std::exception& ex) {
- return StatusWith<RemoteCommandResponse>(
- ErrorCodes::UnknownError,
- str::stream() << "Sending command " << request.cmdObj << " on database "
- << request.dbname
- << " over network to "
- << request.target.toString()
- << " received exception "
- << ex.what());
- }
-}
-
-} // namespace mongo
diff --git a/src/mongo/client/remote_command_runner_impl.h b/src/mongo/client/remote_command_runner_impl.h
deleted file mode 100644
index 7138716de34..00000000000
--- a/src/mongo/client/remote_command_runner_impl.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * Copyright (C) 2015 MongoDB Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception, the copyright holders give permission to link the
- * code of portions of this program with the OpenSSL library under certain
- * conditions as described in each individual source file and distribute
- * linked combinations including the program with the OpenSSL library. You
- * must comply with the GNU Affero General Public License in all respects for
- * all of the code used other than as permitted herein. If you modify file(s)
- * with this exception, you may extend this exception to your version of the
- * file(s), but you are not obligated to do so. If you do not wish to do so,
- * delete this exception statement from your version. If you delete this
- * exception statement from all source files in the program, then also delete
- * it in the license file.
- */
-
-#pragma once
-
-#include "mongo/client/connection_pool.h"
-#include "mongo/executor/remote_command_request.h"
-#include "mongo/executor/remote_command_response.h"
-
-namespace mongo {
-
-namespace executor {
-class NetworkConnectionHook;
-} // namespace executor
-
-template <typename T>
-class StatusWith;
-
-/**
- * Utility used by the network executor to run commands against a MongoDB instance. It abstracts
- * the logic of managing connections and turns the remote instance into a stateless
- * request-response service.
- */
-class RemoteCommandRunnerImpl {
-public:
- RemoteCommandRunnerImpl(int messagingTags,
- std::unique_ptr<executor::NetworkConnectionHook> hook);
- ~RemoteCommandRunnerImpl();
-
- /**
- * Starts up the connection pool.
- */
- void startup();
-
- /**
- * Closes all underlying connections. Must be called before the destructor runs.
- */
- void shutdown();
-
- /**
- * Synchronously invokes the command described by "request" and returns the server's
- * response or any status.
- */
- StatusWith<executor::RemoteCommandResponse> runCommand(
- const executor::RemoteCommandRequest& request);
-
-private:
- // The connection pool on which to send requests
- ConnectionPool _connPool;
-
- // True if startup has been called
- bool _active{false};
-};
-
-} // namespace mongo
diff --git a/src/mongo/s/client/SConscript b/src/mongo/s/client/SConscript
index a5ab71a6249..6fe11753411 100644
--- a/src/mongo/s/client/SConscript
+++ b/src/mongo/s/client/SConscript
@@ -15,7 +15,6 @@ env.Library(
LIBDEPS=[
'$BUILD_DIR/mongo/client/clientdriver',
'$BUILD_DIR/mongo/client/fetcher',
- '$BUILD_DIR/mongo/client/remote_command_runner_impl',
'$BUILD_DIR/mongo/client/remote_command_targeter',
'$BUILD_DIR/mongo/executor/connection_pool_stats',
'$BUILD_DIR/mongo/executor/task_executor_pool',