diff options
author | nandinibhartiyaMDB <nandini.bhartiya@mongodb.com> | 2023-04-18 15:00:14 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2023-04-18 17:19:48 +0000 |
commit | 8b937a930ea842507e0924e6beb5371fcd7d5780 (patch) | |
tree | 22752741773196d0e843ccc83f3b8ef9f82292f8 /src/mongo/db/cloner.h | |
parent | ef9529cf74ebda96b48f492a6d9bdbbebc7b054a (diff) | |
download | mongo-8b937a930ea842507e0924e6beb5371fcd7d5780.tar.gz |
SERVER-75657: Add an interface for the Cloner class
Diffstat (limited to 'src/mongo/db/cloner.h')
-rw-r--r-- | src/mongo/db/cloner.h | 71 |
1 files changed, 53 insertions, 18 deletions
diff --git a/src/mongo/db/cloner.h b/src/mongo/db/cloner.h index 761da5a052c..5adce5521b2 100644 --- a/src/mongo/db/cloner.h +++ b/src/mongo/db/cloner.h @@ -45,15 +45,25 @@ class DBClientBase; class NamespaceString; class OperationContext; -// TODO SERVER-75657: Create an interface for the Cloner. +class ClonerImpl { +public: + virtual ~ClonerImpl() = default; + virtual Status copyDb(OperationContext* opCtx, + const std::string& dBName, + const std::string& masterHost, + const std::vector<NamespaceString>& shardedColls, + std::set<std::string>* clonedColls) = 0; -class Cloner { - Cloner(const Cloner&) = delete; - Cloner& operator=(const Cloner&) = delete; + virtual Status setupConn(OperationContext* opCtx, + const std::string& dBName, + const std::string& masterHost) = 0; + + virtual StatusWith<std::vector<BSONObj>> getListOfCollections( + OperationContext* opCtx, const std::string& dBName, const std::string& masterHost) = 0; +}; +class DefaultClonerImpl : public ClonerImpl { public: - Cloner(); - virtual ~Cloner() {} /** * Copies an entire database from the specified host. * clonedColls: the function will return with this populated with a list of the collections that @@ -62,21 +72,21 @@ public: * that are cloned. When opts.createCollections is true, this parameter is * ignored and the collection list is fetched from the remote via _conn. */ - virtual Status copyDb(OperationContext* opCtx, - const std::string& dBName, - const std::string& masterHost, - const std::vector<NamespaceString>& shardedColls, - std::set<std::string>* clonedColls); + Status copyDb(OperationContext* opCtx, + const std::string& dBName, + const std::string& masterHost, + const std::vector<NamespaceString>& shardedColls, + std::set<std::string>* clonedColls) override; - virtual Status setupConn(OperationContext* opCtx, - const std::string& dBName, - const std::string& masterHost); + Status setupConn(OperationContext* opCtx, + const std::string& dBName, + const std::string& masterHost) override; - virtual StatusWith<std::vector<BSONObj>> getListOfCollections(OperationContext* opCtx, - const std::string& dBName, - const std::string& masterHost); + StatusWith<std::vector<BSONObj>> getListOfCollections(OperationContext* opCtx, + const std::string& dBName, + const std::string& masterHost) override; -protected: +private: std::unique_ptr<ScopedDbConnection> _conn; // Filters a database's collection list and removes collections that should not be cloned. @@ -121,4 +131,29 @@ protected: } }; +class Cloner { + +public: + Cloner(std::unique_ptr<ClonerImpl> clonerImpl) : _clonerImpl(std::move(clonerImpl)) {} + + Cloner(); + + Cloner(const Cloner&) = delete; + + Cloner& operator=(const Cloner&) = delete; + + Status copyDb(OperationContext* opCtx, + const std::string& dBName, + const std::string& masterHost, + const std::vector<NamespaceString>& shardedColls, + std::set<std::string>* clonedColls); + + StatusWith<std::vector<BSONObj>> getListOfCollections(OperationContext* opCtx, + const std::string& dBName, + const std::string& masterHost); + +private: + std::unique_ptr<ClonerImpl> _clonerImpl; +}; + } // namespace mongo |