diff options
author | Benety Goh <benety@mongodb.com> | 2016-04-12 14:21:59 -0400 |
---|---|---|
committer | Benety Goh <benety@mongodb.com> | 2016-04-18 15:46:12 -0400 |
commit | 6811d7c70d13559c3162e8f4333c3c061e5a5220 (patch) | |
tree | 70fba42605c3ced184f175adc45901d16e02c0e1 /src/mongo/db/repl/storage_interface.cpp | |
parent | 3bead6a7dee0c224242463d75acda511e8e8bb09 (diff) | |
download | mongo-6811d7c70d13559c3162e8f4333c3c061e5a5220.tar.gz |
SERVER-18038 added minvalid and initial sync flag support to repl storage interface
Diffstat (limited to 'src/mongo/db/repl/storage_interface.cpp')
-rw-r--r-- | src/mongo/db/repl/storage_interface.cpp | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/mongo/db/repl/storage_interface.cpp b/src/mongo/db/repl/storage_interface.cpp new file mode 100644 index 00000000000..ba885bda35c --- /dev/null +++ b/src/mongo/db/repl/storage_interface.cpp @@ -0,0 +1,80 @@ +/** + * Copyright (C) 2016 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. + */ + +#include "mongo/platform/basic.h" + +#include "mongo/db/client.h" +#include "mongo/db/operation_context.h" +#include "mongo/db/repl/storage_interface.h" +#include "mongo/db/service_context.h" +#include "mongo/util/mongoutils/str.h" + +namespace mongo { +namespace repl { + + +namespace { +const auto getStorageInterface = + ServiceContext::declareDecoration<std::unique_ptr<StorageInterface>>(); +} + +bool BatchBoundaries::operator==(const BatchBoundaries& rhs) const { + if (&rhs == this) { + return true; + } + return start == rhs.start && end == rhs.end; +} + +std::string BatchBoundaries::toString() const { + return str::stream() << "[start=" << start.toString() << ", end=" << end.toString() << "]"; +} + +std::ostream& operator<<(std::ostream& stream, const BatchBoundaries& boundaries) { + return stream << boundaries.toString(); +} + +StorageInterface* StorageInterface::get(ServiceContext* service) { + return getStorageInterface(service).get(); +} + +StorageInterface* StorageInterface::get(ServiceContext& service) { + return getStorageInterface(service).get(); +} + +StorageInterface* StorageInterface::get(OperationContext* txn) { + return get(txn->getClient()->getServiceContext()); +} + + +void StorageInterface::set(ServiceContext* service, std::unique_ptr<StorageInterface> replCoord) { + auto& coordinator = getStorageInterface(service); + coordinator = std::move(replCoord); +} + +} // namespace repl +} // namespace mongo |