summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/multiapplier.h
diff options
context:
space:
mode:
authorMax Hirschhorn <max.hirschhorn@mongodb.com>2016-03-23 18:01:25 -0400
committerMax Hirschhorn <max.hirschhorn@mongodb.com>2016-03-23 18:01:25 -0400
commitadde6aca20580af59d21896c90281547c55680c8 (patch)
treeffb4bbb7935817bebd9658636d8e7f8fc4bd6ede /src/mongo/db/repl/multiapplier.h
parent20aee8500c87cd43ae72a8c811b7e88f4f737243 (diff)
downloadmongo-adde6aca20580af59d21896c90281547c55680c8.tar.gz
Revert "SERVER-22858 create a new Applier which wraps multiApply"
This reverts commit 1bcf7cc983a9ea51b41b0549ad5a3811bf7057b7.
Diffstat (limited to 'src/mongo/db/repl/multiapplier.h')
-rw-r--r--src/mongo/db/repl/multiapplier.h184
1 files changed, 0 insertions, 184 deletions
diff --git a/src/mongo/db/repl/multiapplier.h b/src/mongo/db/repl/multiapplier.h
deleted file mode 100644
index f3d5ea3badf..00000000000
--- a/src/mongo/db/repl/multiapplier.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/**
- * Copyright (C) 2015 MongoDB Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception, the copyright holders give permission to link the
- * code of portions of this program with the OpenSSL library under certain
- * conditions as described in each individual source file and distribute
- * linked combinations including the program with the OpenSSL library. You
- * must comply with the GNU Affero General Public License in all respects for
- * all of the code used other than as permitted herein. If you modify file(s)
- * with this exception, you may extend this exception to your version of the
- * file(s), but you are not obligated to do so. If you do not wish to do so,
- * delete this exception statement from your version. If you delete this
- * exception statement from all source files in the program, then also delete
- * it in the license file.
- */
-
-#pragma once
-
-#include <memory>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "mongo/base/disallow_copying.h"
-#include "mongo/base/status.h"
-#include "mongo/base/status_with.h"
-#include "mongo/db/jsobj.h"
-#include "mongo/db/repl/oplog_entry.h"
-#include "mongo/db/repl/replication_executor.h"
-#include "mongo/db/service_context.h"
-#include "mongo/stdx/condition_variable.h"
-#include "mongo/stdx/functional.h"
-#include "mongo/stdx/mutex.h"
-
-namespace mongo {
-namespace repl {
-
-class OpTime;
-
-class MultiApplier {
- MONGO_DISALLOW_COPYING(MultiApplier);
-
-public:
- static const size_t kReplWriterThreadCount = 16;
-
- /**
- * Operations sorted by timestamp in ascending order.
- */
- using Operations = std::vector<OplogEntry>;
-
- /**
- * Callback function to report final status of applying operations along with
- * list of operations (if applicable) that were not successfully applied.
- * On success, returns the timestamp of the last operation applied together with an empty
- * list of operations.
- */
- using CallbackFn = stdx::function<void(const StatusWith<Timestamp>&, const Operations&)>;
-
- /**
- * Type of function to to apply a single operation. In production, this function
- * would have the same outcome as calling SyncTail::syncApply() ('convertUpdatesToUpserts'
- * value will be embedded in the function implementation).
- */
- using ApplyOperationFn = stdx::function<void(const Operations&)>;
-
- using MultiApplyFn = stdx::function<StatusWith<OpTime>(
- OperationContext*, const MultiApplier::Operations&, MultiApplier::ApplyOperationFn)>;
-
- /**
- * Creates MultiApplier in inactive state.
- *
- * Accepts list of oplog entries to apply in 'operations'.
- *
- * The callback function will be invoked (after schedule()) when the applied has
- * successfully applied all the operations or encountered a failure. Failures may occur if
- * we failed to apply an operation; or if the underlying scheduled work item
- * on the replication executor was canceled.
- *
- * It is an error for 'operations' to be empty but individual oplog entries
- * contained in 'operations' are not validated.
- */
- MultiApplier(ReplicationExecutor* executor,
- const Operations& operations,
- const ApplyOperationFn& applyOperation,
- const MultiApplyFn& multiApply,
- const CallbackFn& onCompletion);
-
- /**
- * Blocks while applier is active.
- */
- virtual ~MultiApplier();
-
- /**
- * Returns diagnostic information.
- */
- std::string getDiagnosticString() const;
-
- /**
- * Returns true if the applier has been started (but has not completed).
- */
- bool isActive() const;
-
- /**
- * Starts applier by scheduling initial db work to be run by the executor.
- */
- Status start();
-
- /**
- * Cancels current db work request.
- * Returns immediately if applier is not active.
- *
- * Callback function may be invoked with an ErrorCodes::CallbackCanceled status.
- */
- void cancel();
-
- /**
- * Waits for active database worker to complete.
- * Returns immediately if applier is not active.
- */
- void wait();
-
-private:
- /**
- * DB worker callback function - applies all operations.
- */
- void _callback(const ReplicationExecutor::CallbackArgs& cbd);
- void _finishCallback(const StatusWith<Timestamp>& result, const Operations& operations);
-
- // Not owned by us.
- ReplicationExecutor* _executor;
-
- Operations _operations;
- ApplyOperationFn _applyOperation;
- MultiApplyFn _multiApply;
- CallbackFn _onCompletion;
-
- // Protects member data of this MultiApplier.
- mutable stdx::mutex _mutex;
-
- stdx::condition_variable _condition;
-
- // _active is true when MultiApplier is scheduled to be run by the executor.
- bool _active;
-
- ReplicationExecutor::CallbackHandle _dbWorkCallbackHandle;
-};
-
-
-/**
- * Applies operations (sorted by timestamp) up to and including 'lastTimestampToApply'.
- * If 'lastTimestampToApply' is found in 'operations':
- * - The applier will be given a subset of 'operations' (includes 'lastTimestampToApply').
- * - On success, the applier will invoke the 'pause' function just before reporting
- * completion status.
- * Otherwise, all entries in 'operations' before 'lastTimestampToApply' will be forwarded to
- * the applier and the 'pause' function will be ignored.
- * If the applier is successfully created, returns the applier and a list of operations that
- * are skipped (operations with 'ts' field value after 'lastTimestampToApply).
- */
-using PauseDataReplicatorFn = stdx::function<void()>;
-
-StatusWith<std::pair<std::unique_ptr<MultiApplier>, MultiApplier::Operations>> applyUntilAndPause(
- ReplicationExecutor* executor,
- const MultiApplier::Operations& operations,
- const MultiApplier::ApplyOperationFn& applyOperation,
- const MultiApplier::ApplyOperationFn& multiApply,
- const Timestamp& lastTimestampToApply,
- const PauseDataReplicatorFn& pauseDataReplicator,
- const MultiApplier::CallbackFn& onCompletion);
-
-} // namespace repl
-} // namespace mongo