diff options
author | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2017-02-27 17:05:49 -0500 |
---|---|---|
committer | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2017-03-12 16:28:30 -0400 |
commit | ae2518adace4ba7ed6a16eba6943bff6ea4ade10 (patch) | |
tree | ce1879e6aa1cec6f16dcd6d7596834d4a4b31ad6 /src/mongo/s/config.h | |
parent | 04b8ed12d08affcb06e88c8a2b4398628ae0aa62 (diff) | |
download | mongo-ae2518adace4ba7ed6a16eba6943bff6ea4ade10.tar.gz |
SERVER-22611 Sharding catalog cache refactor
Diffstat (limited to 'src/mongo/s/config.h')
-rw-r--r-- | src/mongo/s/config.h | 146 |
1 files changed, 0 insertions, 146 deletions
diff --git a/src/mongo/s/config.h b/src/mongo/s/config.h deleted file mode 100644 index bbd63cf3b3b..00000000000 --- a/src/mongo/s/config.h +++ /dev/null @@ -1,146 +0,0 @@ -/** - * Copyright (C) 2008-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 <string> - -#include "mongo/db/repl/optime.h" -#include "mongo/platform/atomic_word.h" -#include "mongo/s/shard_id.h" -#include "mongo/stdx/mutex.h" - -namespace mongo { - -class ChunkManager; -struct CollectionInfo; -class DatabaseType; -class OperationContext; - -/** - * Represents the cache entry for a database. - */ -class DBConfig { -public: - DBConfig(const DatabaseType& dbt, repl::OpTime configOpTime); - ~DBConfig(); - - /** - * The name of the database which this entry caches. - */ - const std::string& name() const { - return _name; - } - - ShardId getPrimaryId(); - - /** - * Returns whether 'enableSharding' has been called for this database. - */ - bool isShardingEnabled() const { - return _shardingEnabled; - } - - /** - * Removes the specified namespace from the set of collections under this database entry so that - * from then onwards it will be treated as unsharded. - * - * Note that this method doesn't do any writes to the config metadata, but simply drops the - * specified namespace from the cache. - */ - void markNSNotSharded(const std::string& ns); - - /** - * @return whether or not the 'ns' collection is partitioned - */ - bool isSharded(const std::string& ns); - - std::shared_ptr<ChunkManager> getChunkManager(OperationContext* opCtx, - const std::string& ns, - bool reload = false, - bool forceReload = false); - std::shared_ptr<ChunkManager> getChunkManagerIfExists(OperationContext* opCtx, - const std::string& ns, - bool reload = false, - bool forceReload = false); - - /** - * Returns true if it is successful at loading the DBConfig, false if the database is not found, - * and throws on all other errors. - */ - bool load(OperationContext* opCtx); - -protected: - typedef std::map<std::string, CollectionInfo> CollectionInfoMap; - typedef AtomicUInt64::WordType Counter; - - /** - * Returns true if it is successful at loading the DBConfig, false if the database is not found, - * and throws on all other errors. - * Also returns true without reloading if reloadIteration is not equal to the _reloadCount. - * This is to avoid multiple threads attempting to reload do duplicate work. - */ - bool _loadIfNeeded(OperationContext* opCtx, Counter reloadIteration); - - // All member variables are labeled with one of the following codes indicating the - // synchronization rules for accessing them. - // - // (L) Must hold _lock for access. - // (S) Self synchronizing, no explicit locking needed. - // - // Mutex lock order: - // _hitConfigServerLock -> _lock - // - - // Name of the database which this entry caches - const std::string _name; - - // Whether sharding is enabled for this database - const bool _shardingEnabled; - - // Primary shard id - ShardId _primaryId; // (L) - - // Set of collections and lock to protect access - stdx::mutex _lock; - CollectionInfoMap _collections; // (L) - - // OpTime of config server when the database definition was loaded. - repl::OpTime _configOpTime; // (L) - - // Ensures that only one thread at a time loads collection configuration data from - // the config server - stdx::mutex _hitConfigServerLock; - - // Increments every time this performs a full reload. Since a full reload can take a very - // long time for very large clusters, this can be used to minimize duplicate work when multiple - // threads tries to perform full rerload at roughly the same time. - AtomicUInt64 _reloadCount; // (S) -}; - -} // namespace mongo |