1
2 /**
3 * Copyright (C) 2018-present MongoDB, Inc.
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the Server Side Public License, version 1,
7 * as published by MongoDB, Inc.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * Server Side Public License for more details.
13 *
14 * You should have received a copy of the Server Side Public License
15 * along with this program. If not, see
16 * <http://www.mongodb.com/licensing/server-side-public-license>.
17 *
18 * As a special exception, the copyright holders give permission to link the
19 * code of portions of this program with the OpenSSL library under certain
20 * conditions as described in each individual source file and distribute
21 * linked combinations including the program with the OpenSSL library. You
22 * must comply with the Server Side Public License in all respects for
23 * all of the code used other than as permitted herein. If you modify file(s)
24 * with this exception, you may extend this exception to your version of the
25 * file(s), but you are not obligated to do so. If you do not wish to do so,
26 * delete this exception statement from your version. If you delete this
27 * exception statement from all source files in the program, then also delete
28 * it in the license file.
29 */
30
31 #define MONGO_LOG_DEFAULT_COMPONENT ::mongo::logger::LogComponent::kSharding
32
33
34 #include "mongo/platform/basic.h"
35
36 #include "mongo/s/client/shard_factory.h"
37
38 #include "mongo/base/status_with.h"
39 #include "mongo/client/connection_string.h"
40 #include "mongo/client/remote_command_targeter.h"
41 #include "mongo/stdx/memory.h"
42 #include "mongo/util/assert_util.h"
43 #include "mongo/util/log.h"
44
45 namespace mongo {
46
ShardFactory(BuildersMap && builders,std::unique_ptr<RemoteCommandTargeterFactory> targeterFactory)47 ShardFactory::ShardFactory(BuildersMap&& builders,
48 std::unique_ptr<RemoteCommandTargeterFactory> targeterFactory)
49 : _builders(builders), _targeterFactory(std::move(targeterFactory)) {}
50
createUniqueShard(const ShardId & shardId,const ConnectionString & connStr)51 std::unique_ptr<Shard> ShardFactory::createUniqueShard(const ShardId& shardId,
52 const ConnectionString& connStr) {
53 auto builderIt = _builders.find(connStr.type());
54 invariant(builderIt != _builders.end());
55 return builderIt->second(shardId, connStr);
56 }
57
createShard(const ShardId & shardId,const ConnectionString & connStr)58 std::shared_ptr<Shard> ShardFactory::createShard(const ShardId& shardId,
59 const ConnectionString& connStr) {
60 auto builderIt = _builders.find(connStr.type());
61 invariant(builderIt != _builders.end());
62 return std::shared_ptr<Shard>(builderIt->second(shardId, connStr));
63 }
64 } // namespace mongo
65