summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/database_cloner.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/repl/database_cloner.h')
-rw-r--r--src/mongo/db/repl/database_cloner.h303
1 files changed, 151 insertions, 152 deletions
diff --git a/src/mongo/db/repl/database_cloner.h b/src/mongo/db/repl/database_cloner.h
index f1171bf5e4b..954f816cdaa 100644
--- a/src/mongo/db/repl/database_cloner.h
+++ b/src/mongo/db/repl/database_cloner.h
@@ -47,158 +47,157 @@
namespace mongo {
namespace repl {
- class DatabaseCloner : public BaseCloner {
- MONGO_DISALLOW_COPYING(DatabaseCloner);
- public:
-
- /**
- * Predicate used on the collection info objects returned by listCollections.
- * Each collection info is represented by a document in the following format:
- * {
- * name: <collection name>,
- * options: <collection options>
- * }
- *
- * Returns true if the collection described by the info object should be cloned.
- * Returns false if the collection should be ignored.
- */
- using ListCollectionsPredicateFn = stdx::function<bool (const BSONObj&)>;
-
- /**
- * Callback function to report progress of collection cloning. Arguments are:
- * - status from the collection cloner's 'onCompletion' callback.
- * - source namespace of the collection cloner that completed (or failed).
- *
- * Called exactly once for every collection cloner started by the the database cloner.
- */
- using CollectionCallbackFn = stdx::function<void (const Status&, const NamespaceString&)>;
-
- /**
- * Type of function to start a collection cloner.
- */
- using StartCollectionClonerFn = stdx::function<Status (CollectionCloner&)>;
-
- /**
- * Creates DatabaseCloner task in inactive state. Use start() to activate cloner.
- *
- * The cloner calls 'onCompletion' when the database cloning has completed or failed.
- *
- * 'onCompletion' will be called exactly once.
- *
- * Takes ownership of the passed StorageInterface object.
- */
- DatabaseCloner(ReplicationExecutor* executor,
- const HostAndPort& source,
- const std::string& dbname,
- const BSONObj& listCollectionsFilter,
- const ListCollectionsPredicateFn& listCollectionsPredicate,
- CollectionCloner::StorageInterface* storageInterface,
- const CollectionCallbackFn& collectionWork,
- const CallbackFn& onCompletion);
-
- virtual ~DatabaseCloner();
-
- /**
- * Returns collection info objects read from listCollections result.
- * This will return an empty vector until we have processed the last
- * batch of results from listCollections.
- */
- const std::vector<BSONObj>& getCollectionInfos() const;
-
- std::string getDiagnosticString() const override;
-
- bool isActive() const override;
-
- Status start() override;
-
- void cancel() override;
-
- void wait() override;
-
- //
- // Testing only functions below.
- //
-
- /**
- * Overrides how executor schedules database work.
- *
- * For testing only.
- */
- void setScheduleDbWorkFn(const CollectionCloner::ScheduleDbWorkFn& scheduleDbWorkFn);
-
- /**
- * Overrides how executor starts a collection cloner.
- *
- * For testing only
- */
- void setStartCollectionClonerFn(const StartCollectionClonerFn& startCollectionCloner);
-
- private:
-
- /**
- * Read collection names and options from listCollections result.
- */
- void _listCollectionsCallback(const StatusWith<Fetcher::QueryResponse>& fetchResult,
- Fetcher::NextAction* nextAction,
- BSONObjBuilder* getMoreBob);
-
- /**
- * Forwards collection cloner result to client.
- * Starts a new cloner on a different collection.
- */
- void _collectionClonerCallback(const Status& status, const NamespaceString& nss);
-
- /**
- * Reports completion status.
- * Sets cloner to inactive.
- */
- void _finishCallback(const Status& status);
-
- // Not owned by us.
- ReplicationExecutor* _executor;
-
- HostAndPort _source;
- std::string _dbname;
- BSONObj _listCollectionsFilter;
- ListCollectionsPredicateFn _listCollectionsPredicate;
- CollectionCloner::StorageInterface* _storageInterface;
-
- // Invoked once for every successfully started collection cloner.
- CollectionCallbackFn _collectionWork;
-
- // Invoked once when cloning completes or fails.
- CallbackFn _onCompletion;
-
- // Protects member data of this database cloner.
- mutable stdx::mutex _mutex;
-
- mutable stdx::condition_variable _condition;
-
- // _active is true when database cloner is started.
- bool _active;
-
- // Fetcher instance for running listCollections command.
- Fetcher _listCollectionsFetcher;
-
- // Collection info objects returned from listCollections.
- // Format of each document:
- // {
- // name: <collection name>,
- // options: <collection options>
- // }
- // Holds all collection infos from listCollections.
- std::vector<BSONObj> _collectionInfos;
+class DatabaseCloner : public BaseCloner {
+ MONGO_DISALLOW_COPYING(DatabaseCloner);
+
+public:
+ /**
+ * Predicate used on the collection info objects returned by listCollections.
+ * Each collection info is represented by a document in the following format:
+ * {
+ * name: <collection name>,
+ * options: <collection options>
+ * }
+ *
+ * Returns true if the collection described by the info object should be cloned.
+ * Returns false if the collection should be ignored.
+ */
+ using ListCollectionsPredicateFn = stdx::function<bool(const BSONObj&)>;
+
+ /**
+ * Callback function to report progress of collection cloning. Arguments are:
+ * - status from the collection cloner's 'onCompletion' callback.
+ * - source namespace of the collection cloner that completed (or failed).
+ *
+ * Called exactly once for every collection cloner started by the the database cloner.
+ */
+ using CollectionCallbackFn = stdx::function<void(const Status&, const NamespaceString&)>;
+
+ /**
+ * Type of function to start a collection cloner.
+ */
+ using StartCollectionClonerFn = stdx::function<Status(CollectionCloner&)>;
+
+ /**
+ * Creates DatabaseCloner task in inactive state. Use start() to activate cloner.
+ *
+ * The cloner calls 'onCompletion' when the database cloning has completed or failed.
+ *
+ * 'onCompletion' will be called exactly once.
+ *
+ * Takes ownership of the passed StorageInterface object.
+ */
+ DatabaseCloner(ReplicationExecutor* executor,
+ const HostAndPort& source,
+ const std::string& dbname,
+ const BSONObj& listCollectionsFilter,
+ const ListCollectionsPredicateFn& listCollectionsPredicate,
+ CollectionCloner::StorageInterface* storageInterface,
+ const CollectionCallbackFn& collectionWork,
+ const CallbackFn& onCompletion);
+
+ virtual ~DatabaseCloner();
+
+ /**
+ * Returns collection info objects read from listCollections result.
+ * This will return an empty vector until we have processed the last
+ * batch of results from listCollections.
+ */
+ const std::vector<BSONObj>& getCollectionInfos() const;
+
+ std::string getDiagnosticString() const override;
+
+ bool isActive() const override;
+
+ Status start() override;
+
+ void cancel() override;
+
+ void wait() override;
+
+ //
+ // Testing only functions below.
+ //
+
+ /**
+ * Overrides how executor schedules database work.
+ *
+ * For testing only.
+ */
+ void setScheduleDbWorkFn(const CollectionCloner::ScheduleDbWorkFn& scheduleDbWorkFn);
+
+ /**
+ * Overrides how executor starts a collection cloner.
+ *
+ * For testing only
+ */
+ void setStartCollectionClonerFn(const StartCollectionClonerFn& startCollectionCloner);
+
+private:
+ /**
+ * Read collection names and options from listCollections result.
+ */
+ void _listCollectionsCallback(const StatusWith<Fetcher::QueryResponse>& fetchResult,
+ Fetcher::NextAction* nextAction,
+ BSONObjBuilder* getMoreBob);
+
+ /**
+ * Forwards collection cloner result to client.
+ * Starts a new cloner on a different collection.
+ */
+ void _collectionClonerCallback(const Status& status, const NamespaceString& nss);
+
+ /**
+ * Reports completion status.
+ * Sets cloner to inactive.
+ */
+ void _finishCallback(const Status& status);
+
+ // Not owned by us.
+ ReplicationExecutor* _executor;
+
+ HostAndPort _source;
+ std::string _dbname;
+ BSONObj _listCollectionsFilter;
+ ListCollectionsPredicateFn _listCollectionsPredicate;
+ CollectionCloner::StorageInterface* _storageInterface;
+
+ // Invoked once for every successfully started collection cloner.
+ CollectionCallbackFn _collectionWork;
+
+ // Invoked once when cloning completes or fails.
+ CallbackFn _onCompletion;
+
+ // Protects member data of this database cloner.
+ mutable stdx::mutex _mutex;
+
+ mutable stdx::condition_variable _condition;
+
+ // _active is true when database cloner is started.
+ bool _active;
+
+ // Fetcher instance for running listCollections command.
+ Fetcher _listCollectionsFetcher;
+
+ // Collection info objects returned from listCollections.
+ // Format of each document:
+ // {
+ // name: <collection name>,
+ // options: <collection options>
+ // }
+ // Holds all collection infos from listCollections.
+ std::vector<BSONObj> _collectionInfos;
+
+ std::vector<NamespaceString> _collectionNamespaces;
+
+ std::list<CollectionCloner> _collectionCloners;
+ std::list<CollectionCloner>::iterator _currentCollectionClonerIter;
- std::vector<NamespaceString> _collectionNamespaces;
+ // Function for scheduling database work using the executor.
+ CollectionCloner::ScheduleDbWorkFn _scheduleDbWorkFn;
- std::list<CollectionCloner> _collectionCloners;
- std::list<CollectionCloner>::iterator _currentCollectionClonerIter;
+ StartCollectionClonerFn _startCollectionCloner;
+};
- // Function for scheduling database work using the executor.
- CollectionCloner::ScheduleDbWorkFn _scheduleDbWorkFn;
-
- StartCollectionClonerFn _startCollectionCloner;
- };
-
-} // namespace repl
-} // namespace mongo
+} // namespace repl
+} // namespace mongo