diff options
Diffstat (limited to 'src/mongo/db/tenant_namespace.h')
-rw-r--r-- | src/mongo/db/tenant_namespace.h | 149 |
1 files changed, 0 insertions, 149 deletions
diff --git a/src/mongo/db/tenant_namespace.h b/src/mongo/db/tenant_namespace.h deleted file mode 100644 index bb07dabf2bd..00000000000 --- a/src/mongo/db/tenant_namespace.h +++ /dev/null @@ -1,149 +0,0 @@ -/** - * Copyright (C) 2021-present MongoDB, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the Server Side Public License, version 1, - * as published by MongoDB, Inc. - * - * 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 - * Server Side Public License for more details. - * - * You should have received a copy of the Server Side Public License - * along with this program. If not, see - * <http://www.mongodb.com/licensing/server-side-public-license>. - * - * 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 Server Side 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 <algorithm> -#include <boost/optional.hpp> -#include <iosfwd> -#include <string> - -#include "mongo/base/string_data.h" -#include "mongo/bson/util/builder.h" -#include "mongo/db/namespace_string.h" -#include "mongo/db/tenant_database_name.h" -#include "mongo/db/tenant_id.h" -#include "mongo/logv2/log_attr.h" - -namespace mongo { - -class TenantNamespace { -public: - TenantNamespace(const TenantNamespace& tenantNs) = default; - - /** - * Constructs an empty TenantNamespace. - */ - TenantNamespace() = default; - - /** - * Constructs a TenantNamespace from the given tenantId and NamespaceString. - * - * If featureFlagRequireTenantID is set, tenantId is required. - */ - TenantNamespace(boost::optional<mongo::TenantId> tenantId, NamespaceString nss); - - /** - * Create a TenantDatabaseName from the TenantNamespace. - */ - TenantDatabaseName createTenantDatabaseName() const; - - /** - * Constructs a TenantNamespace from the string "ns". When the server parameter - * "multitenancySupport” is enabled, the tenantId will be parsed separately from the database - * name. If it is disabled, the tenantId will be parsed as a prefix of the database name, and - * the tenantId field will be empty. For example: - * if “multitenancySupport” is enabled, "tenant1_dbA.collA" will be parsed as: - * _tenantId = tenant1 - * _nss = NamespaceString(dbA.collA) - * - * if “multitenancySupport” is disabled, "tenant1_dbA.collA" will be parsed as: - * _tenantId = boost::none - * _nss = NamespaceString(tenant1_dbA.collA), and the _nss,db() - * - * This method should only be used when reading a namespace from disk. To construct a - * TenantNamespace otherwise, use the standard constructor above. - * - * If featureFlagRequireTenantID is set, tenantId is required. - */ - static TenantNamespace parseTenantNamespaceFromDisk(StringData ns); - - boost::optional<TenantId> tenantId() const { - return _tenantId; - } - - StringData db() const { - return _nss.db(); - } - - StringData coll() const { - return _nss.coll(); - } - - const NamespaceString& getNss() const { - return _nss; - } - - std::string toString() const { - if (_tenantNsStr) - return *_tenantNsStr; - - invariant(!_tenantId); - return _nss.ns(); - } - - // Relops among `TenantNamespace`. - friend bool operator==(const TenantNamespace& a, const TenantNamespace& b) { - return a.toString() == b.toString(); - } - friend bool operator!=(const TenantNamespace& a, const TenantNamespace& b) { - return a.toString() != b.toString(); - } - friend bool operator<(const TenantNamespace& a, const TenantNamespace& b) { - return a.toString() < b.toString(); - } - friend bool operator>(const TenantNamespace& a, const TenantNamespace& b) { - return a.toString() > b.toString(); - } - friend bool operator<=(const TenantNamespace& a, const TenantNamespace& b) { - return a.toString() <= b.toString(); - } - friend bool operator>=(const TenantNamespace& a, const TenantNamespace& b) { - return a.toString() >= b.toString(); - } - - template <typename H> - friend H AbslHashValue(H h, const TenantNamespace& tenantNs) { - return H::combine(std::move(h), tenantNs.toString()); - } - - friend auto logAttrs(const TenantNamespace& nss) { - return "namespace"_attr = nss; - } - -private: - boost::optional<TenantId> _tenantId; - NamespaceString _nss{}; - boost::optional<std::string> _tenantNsStr; // Only set if _tenantId exists -}; - -std::ostream& operator<<(std::ostream& stream, const TenantNamespace& tenantNs); -StringBuilder& operator<<(StringBuilder& builder, const TenantNamespace& tenantNs); - -} // namespace mongo |