summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/bgsync.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/repl/bgsync.h')
-rw-r--r--src/mongo/db/repl/bgsync.h220
1 files changed, 109 insertions, 111 deletions
diff --git a/src/mongo/db/repl/bgsync.h b/src/mongo/db/repl/bgsync.h
index d1e7e7ea692..8fe0c9e2b02 100644
--- a/src/mongo/db/repl/bgsync.h
+++ b/src/mongo/db/repl/bgsync.h
@@ -37,158 +37,156 @@
namespace mongo {
- class OperationContext;
+class OperationContext;
namespace repl {
- class Member;
- class ReplicationCoordinator;
+class Member;
+class ReplicationCoordinator;
- // This interface exists to facilitate easier testing;
- // the test infrastructure implements these functions with stubs.
- class BackgroundSyncInterface {
- public:
- virtual ~BackgroundSyncInterface();
+// This interface exists to facilitate easier testing;
+// the test infrastructure implements these functions with stubs.
+class BackgroundSyncInterface {
+public:
+ virtual ~BackgroundSyncInterface();
- // Gets the head of the buffer, but does not remove it.
- // Returns true if an element was present at the head;
- // false if the queue was empty.
- virtual bool peek(BSONObj* op) = 0;
+ // Gets the head of the buffer, but does not remove it.
+ // Returns true if an element was present at the head;
+ // false if the queue was empty.
+ virtual bool peek(BSONObj* op) = 0;
- // Deletes objects in the queue;
- // called by sync thread after it has applied an op
- virtual void consume() = 0;
+ // Deletes objects in the queue;
+ // called by sync thread after it has applied an op
+ virtual void consume() = 0;
- // wait up to 1 second for more ops to appear
- virtual void waitForMore() = 0;
- };
+ // wait up to 1 second for more ops to appear
+ virtual void waitForMore() = 0;
+};
- /**
- * Lock order:
- * 1. rslock
- * 2. rwlock
- * 3. BackgroundSync::_mutex
- */
- class BackgroundSync : public BackgroundSyncInterface {
- public:
- // Allow index prefetching to be turned on/off
- enum IndexPrefetchConfig {
- PREFETCH_NONE=0, PREFETCH_ID_ONLY=1, PREFETCH_ALL=2
- };
+/**
+ * Lock order:
+ * 1. rslock
+ * 2. rwlock
+ * 3. BackgroundSync::_mutex
+ */
+class BackgroundSync : public BackgroundSyncInterface {
+public:
+ // Allow index prefetching to be turned on/off
+ enum IndexPrefetchConfig { PREFETCH_NONE = 0, PREFETCH_ID_ONLY = 1, PREFETCH_ALL = 2 };
- static BackgroundSync* get();
+ static BackgroundSync* get();
- // stop syncing (when this node becomes a primary, e.g.)
- void stop();
+ // stop syncing (when this node becomes a primary, e.g.)
+ void stop();
- void shutdown();
- void notify(OperationContext* txn);
+ void shutdown();
+ void notify(OperationContext* txn);
- // Blocks until _pause becomes true from a call to stop() or shutdown()
- void waitUntilPaused();
+ // Blocks until _pause becomes true from a call to stop() or shutdown()
+ void waitUntilPaused();
- virtual ~BackgroundSync() {}
+ virtual ~BackgroundSync() {}
- // starts the producer thread
- void producerThread();
- // starts the sync target notifying thread
- void notifierThread();
+ // starts the producer thread
+ void producerThread();
+ // starts the sync target notifying thread
+ void notifierThread();
- HostAndPort getSyncTarget();
+ HostAndPort getSyncTarget();
- // Interface implementation
+ // Interface implementation
- virtual bool peek(BSONObj* op);
- virtual void consume();
- virtual void clearSyncTarget();
- virtual void waitForMore();
+ virtual bool peek(BSONObj* op);
+ virtual void consume();
+ virtual void clearSyncTarget();
+ virtual void waitForMore();
- // For monitoring
- BSONObj getCounters();
+ // For monitoring
+ BSONObj getCounters();
- long long getLastAppliedHash() const;
- void setLastAppliedHash(long long oldH);
- void loadLastAppliedHash(OperationContext* txn);
+ long long getLastAppliedHash() const;
+ void setLastAppliedHash(long long oldH);
+ void loadLastAppliedHash(OperationContext* txn);
- // Clears any fetched and buffered oplog entries.
- void clearBuffer();
+ // Clears any fetched and buffered oplog entries.
+ void clearBuffer();
- bool getInitialSyncRequestedFlag();
- void setInitialSyncRequestedFlag(bool value);
+ bool getInitialSyncRequestedFlag();
+ void setInitialSyncRequestedFlag(bool value);
- void setIndexPrefetchConfig(const IndexPrefetchConfig cfg) {
- _indexPrefetchConfig = cfg;
- }
+ void setIndexPrefetchConfig(const IndexPrefetchConfig cfg) {
+ _indexPrefetchConfig = cfg;
+ }
- IndexPrefetchConfig getIndexPrefetchConfig() {
- return _indexPrefetchConfig;
- }
+ IndexPrefetchConfig getIndexPrefetchConfig() {
+ return _indexPrefetchConfig;
+ }
- // Testing related stuff
- void pushTestOpToBuffer(const BSONObj& op);
- private:
- static BackgroundSync *s_instance;
- // protects creation of s_instance
- static stdx::mutex s_mutex;
+ // Testing related stuff
+ void pushTestOpToBuffer(const BSONObj& op);
- // Production thread
- BlockingQueue<BSONObj> _buffer;
- OplogReader _syncSourceReader;
+private:
+ static BackgroundSync* s_instance;
+ // protects creation of s_instance
+ static stdx::mutex s_mutex;
- // _mutex protects all of the class variables except _syncSourceReader and _buffer
- mutable stdx::mutex _mutex;
+ // Production thread
+ BlockingQueue<BSONObj> _buffer;
+ OplogReader _syncSourceReader;
- OpTime _lastOpTimeFetched;
+ // _mutex protects all of the class variables except _syncSourceReader and _buffer
+ mutable stdx::mutex _mutex;
- // lastAppliedHash is used to generate a new hash for the following op, when primary.
- long long _lastAppliedHash;
- // lastFetchedHash is used to match ops to determine if we need to rollback, when
- // a secondary.
- long long _lastFetchedHash;
+ OpTime _lastOpTimeFetched;
- // if produce thread should be running
- bool _pause;
- stdx::condition_variable _pausedCondition;
- bool _appliedBuffer;
- stdx::condition_variable _appliedBufferCondition;
+ // lastAppliedHash is used to generate a new hash for the following op, when primary.
+ long long _lastAppliedHash;
+ // lastFetchedHash is used to match ops to determine if we need to rollback, when
+ // a secondary.
+ long long _lastFetchedHash;
- HostAndPort _syncSourceHost;
+ // if produce thread should be running
+ bool _pause;
+ stdx::condition_variable _pausedCondition;
+ bool _appliedBuffer;
+ stdx::condition_variable _appliedBufferCondition;
- BackgroundSync();
- BackgroundSync(const BackgroundSync& s);
- BackgroundSync operator=(const BackgroundSync& s);
+ HostAndPort _syncSourceHost;
- // Production thread
- void _producerThread();
- // Adds elements to the list, up to maxSize.
- void produce(OperationContext* txn);
- // Checks the criteria for rolling back and executes a rollback if warranted.
- bool _rollbackIfNeeded(OperationContext* txn, OplogReader& r);
+ BackgroundSync();
+ BackgroundSync(const BackgroundSync& s);
+ BackgroundSync operator=(const BackgroundSync& s);
- // Evaluate if the current sync target is still good
- bool shouldChangeSyncSource();
+ // Production thread
+ void _producerThread();
+ // Adds elements to the list, up to maxSize.
+ void produce(OperationContext* txn);
+ // Checks the criteria for rolling back and executes a rollback if warranted.
+ bool _rollbackIfNeeded(OperationContext* txn, OplogReader& r);
- // restart syncing
- void start(OperationContext* txn);
+ // Evaluate if the current sync target is still good
+ bool shouldChangeSyncSource();
- long long _readLastAppliedHash(OperationContext* txn);
+ // restart syncing
+ void start(OperationContext* txn);
- // A pointer to the replication coordinator running the show.
- ReplicationCoordinator* _replCoord;
+ long long _readLastAppliedHash(OperationContext* txn);
- // bool for indicating resync need on this node and the mutex that protects it
- // The resync command sets this flag; the Applier thread observes and clears it.
- bool _initialSyncRequestedFlag;
- stdx::mutex _initialSyncMutex;
+ // A pointer to the replication coordinator running the show.
+ ReplicationCoordinator* _replCoord;
- // This setting affects the Applier prefetcher behavior.
- IndexPrefetchConfig _indexPrefetchConfig;
+ // bool for indicating resync need on this node and the mutex that protects it
+ // The resync command sets this flag; the Applier thread observes and clears it.
+ bool _initialSyncRequestedFlag;
+ stdx::mutex _initialSyncMutex;
- };
+ // This setting affects the Applier prefetcher behavior.
+ IndexPrefetchConfig _indexPrefetchConfig;
+};
-} // namespace repl
-} // namespace mongo
+} // namespace repl
+} // namespace mongo