summaryrefslogtreecommitdiff
path: root/src/mongo/db/cloner.h
diff options
context:
space:
mode:
authornandinibhartiyaMDB <nandini.bhartiya@mongodb.com>2023-04-18 15:00:14 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2023-04-18 17:19:48 +0000
commit8b937a930ea842507e0924e6beb5371fcd7d5780 (patch)
tree22752741773196d0e843ccc83f3b8ef9f82292f8 /src/mongo/db/cloner.h
parentef9529cf74ebda96b48f492a6d9bdbbebc7b054a (diff)
downloadmongo-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.h71
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