From 4e07c8d5fa95f781cd049cb1ba5362fe92beeac3 Mon Sep 17 00:00:00 2001 From: mathisbessamdb Date: Mon, 15 May 2023 20:45:47 +0000 Subject: SERVER-66281 Logging subsystem has become aware of tenant IDs --- src/mongo/db/auth/validated_tenancy_scope.cpp | 8 ++++---- src/mongo/logv2/SConscript | 1 - src/mongo/logv2/bson_formatter.cpp | 6 +++--- src/mongo/logv2/file_rotate_sink.cpp | 2 +- src/mongo/logv2/json_formatter.cpp | 9 +++++---- src/mongo/logv2/json_formatter.h | 3 +-- src/mongo/logv2/log_detail.cpp | 7 +++---- src/mongo/logv2/log_detail.h | 3 +-- src/mongo/logv2/logv2_test.cpp | 6 ++---- 9 files changed, 20 insertions(+), 25 deletions(-) diff --git a/src/mongo/db/auth/validated_tenancy_scope.cpp b/src/mongo/db/auth/validated_tenancy_scope.cpp index a7e9fdb27c7..d0691975711 100644 --- a/src/mongo/db/auth/validated_tenancy_scope.cpp +++ b/src/mongo/db/auth/validated_tenancy_scope.cpp @@ -46,19 +46,19 @@ const auto validatedTenancyScopeDecoration = OperationContext::declareDecoration>(); MONGO_INITIALIZER(SecurityTokenOptionValidate)(InitializerContext*) { if (gMultitenancySupport) { - logv2::detail::setGetTenantIDCallback([]() -> boost::optional { + logv2::detail::setGetTenantIDCallback([]() -> std::string { auto* client = Client::getCurrent(); if (!client) { - return boost::none; + return std::string(); } if (auto* opCtx = client->getOperationContext()) { if (auto token = ValidatedTenancyScope::get(opCtx)) { - return token->tenantId(); + return token->tenantId().toString(); } } - return boost::none; + return std::string(); }); } diff --git a/src/mongo/logv2/SConscript b/src/mongo/logv2/SConscript index 34f91574b7f..d17c02baa57 100644 --- a/src/mongo/logv2/SConscript +++ b/src/mongo/logv2/SConscript @@ -14,7 +14,6 @@ env.CppUnitTest( ], LIBDEPS=[ '$BUILD_DIR/mongo/db/auth/security_token', - '$BUILD_DIR/mongo/db/server_base', '$BUILD_DIR/mongo/util/clock_source_mock', ], ) diff --git a/src/mongo/logv2/bson_formatter.cpp b/src/mongo/logv2/bson_formatter.cpp index edf69478e20..8bd0519680a 100644 --- a/src/mongo/logv2/bson_formatter.cpp +++ b/src/mongo/logv2/bson_formatter.cpp @@ -34,7 +34,6 @@ #include "mongo/bson/bsonobj.h" #include "mongo/bson/bsonobjbuilder.h" -#include "mongo/db/tenant_id.h" #include "mongo/logv2/attribute_storage.h" #include "mongo/logv2/attributes.h" #include "mongo/logv2/constants.h" @@ -124,8 +123,9 @@ void BSONFormatter::operator()(boost::log::record_view const& rec, BSONObjBuilde builder.append(constants::kComponentFieldName, extract(attributes::component(), rec).get().getNameForLog()); builder.append(constants::kIdFieldName, extract(attributes::id(), rec).get()); - if (auto ptr = extract(attributes::tenant(), rec).get_ptr()) { - builder.append(constants::kTenantFieldName, ptr->toString()); + const auto& tenant = extract(attributes::tenant(), rec); + if (!tenant.empty()) { + builder.append(constants::kTenantFieldName, tenant.get()); } builder.append(constants::kContextFieldName, extract(attributes::threadName(), rec).get()); diff --git a/src/mongo/logv2/file_rotate_sink.cpp b/src/mongo/logv2/file_rotate_sink.cpp index aa1038b618d..952d59495fb 100644 --- a/src/mongo/logv2/file_rotate_sink.cpp +++ b/src/mongo/logv2/file_rotate_sink.cpp @@ -196,7 +196,7 @@ void FileRotateSink::consume(const boost::log::record_view& rec, "Writing to log file failed, aborting application", TypeErasedAttributeStorage(attrs), LogTag::kNone, - nullptr /* tenantID */, + std::string() /* tenantID */, LogTruncation::Disabled); // Commented out log line below to get validation of the log id with the errorcodes // linter LOGV2(4522200, "Writing to log file failed, aborting application"); diff --git a/src/mongo/logv2/json_formatter.cpp b/src/mongo/logv2/json_formatter.cpp index 4a815d257ad..97d52dcf90e 100644 --- a/src/mongo/logv2/json_formatter.cpp +++ b/src/mongo/logv2/json_formatter.cpp @@ -228,7 +228,7 @@ void JSONFormatter::format(fmt::memory_buffer& buffer, StringData message, const TypeErasedAttributeStorage& attrs, LogTag tags, - const TenantId* tenant, + const std::string& tenant, LogTruncation truncation) const { namespace c = constants; static constexpr auto kFmt = JsonStringFormat::ExtendedRelaxedV2_0_0; @@ -339,8 +339,8 @@ void JSONFormatter::format(fmt::memory_buffer& buffer, field(top, c::kSeverityFieldName, padNextComma(top, 5, quote(strFn(severityString)))); field(top, c::kComponentFieldName, padNextComma(top, 11, quote(strFn(componentString)))); field(top, c::kIdFieldName, padNextComma(top, 8, intFn(id))); - if (tenant) { - field(top, c::kTenantFieldName, quote(strFn(tenant->toString()))); + if (!tenant.empty()) { + field(top, c::kTenantFieldName, quote(strFn(tenant))); } field(top, c::kContextFieldName, quote(strFn(context))); field(top, c::kMessageFieldName, quote(escFn(message))); @@ -366,6 +366,7 @@ void JSONFormatter::operator()(boost::log::record_view const& rec, fmt::memory_buffer buffer; + const auto& tenant = extract(attributes::tenant(), rec); format(buffer, extract(attributes::severity(), rec).get(), extract(attributes::component(), rec).get(), @@ -375,7 +376,7 @@ void JSONFormatter::operator()(boost::log::record_view const& rec, extract(attributes::message(), rec).get(), extract(attributes::attributes(), rec).get(), extract(attributes::tags(), rec).get(), - extract(attributes::tenant(), rec).get_ptr(), + !tenant.empty() ? tenant.get() : std::string(), extract(attributes::truncation(), rec).get()); // Write final JSON object to output stream diff --git a/src/mongo/logv2/json_formatter.h b/src/mongo/logv2/json_formatter.h index 44d9b7ea66d..9d791b9d9ca 100644 --- a/src/mongo/logv2/json_formatter.h +++ b/src/mongo/logv2/json_formatter.h @@ -32,7 +32,6 @@ #include #include -#include "mongo/db/tenant_id.h" #include "mongo/logv2/attribute_storage.h" #include "mongo/logv2/constants.h" #include "mongo/logv2/log_component.h" @@ -59,7 +58,7 @@ public: StringData message, const TypeErasedAttributeStorage& attrs, LogTag tags, - const TenantId* tenant, + const std::string& tenant, LogTruncation truncation) const; void operator()(boost::log::record_view const& rec, boost::log::formatting_ostream& strm) const; diff --git a/src/mongo/logv2/log_detail.cpp b/src/mongo/logv2/log_detail.cpp index 5f476a40012..98f9e0ad4c1 100644 --- a/src/mongo/logv2/log_detail.cpp +++ b/src/mongo/logv2/log_detail.cpp @@ -35,7 +35,6 @@ #include #endif -#include "mongo/db/tenant_id.h" #include "mongo/logv2/attributes.h" #include "mongo/logv2/log.h" #include "mongo/logv2/log_domain.h" @@ -218,12 +217,12 @@ void _doLogImpl(int32_t id, attrs))); if (auto fn = getTenantID()) { - if (auto tenant = fn()) { + auto tenant = fn(); + if (!tenant.empty()) { record.attribute_values().insert( attributes::tenant(), boost::log::attribute_value( - new boost::log::attributes::attribute_value_impl( - tenant.value()))); + new boost::log::attributes::attribute_value_impl(tenant))); } } diff --git a/src/mongo/logv2/log_detail.h b/src/mongo/logv2/log_detail.h index 7717fbe08fe..ffa35ba0a6a 100644 --- a/src/mongo/logv2/log_detail.h +++ b/src/mongo/logv2/log_detail.h @@ -33,7 +33,6 @@ #include "mongo/base/status.h" #include "mongo/bson/util/builder.h" -#include "mongo/db/tenant_id.h" #include "mongo/logv2/attribute_storage.h" #include "mongo/logv2/log_attr.h" #include "mongo/logv2/log_component.h" @@ -51,7 +50,7 @@ bool loggingInProgress(); void signalSafeWriteToStderr(StringData message); namespace detail { -using GetTenantIDFn = std::function()>; +using GetTenantIDFn = std::function; void setGetTenantIDCallback(GetTenantIDFn&& fn); void doLogImpl(int32_t id, diff --git a/src/mongo/logv2/logv2_test.cpp b/src/mongo/logv2/logv2_test.cpp index 27872a8b3ec..71038be617d 100644 --- a/src/mongo/logv2/logv2_test.cpp +++ b/src/mongo/logv2/logv2_test.cpp @@ -41,7 +41,6 @@ #include "mongo/bson/json.h" #include "mongo/bson/oid.h" #include "mongo/db/auth/validated_tenancy_scope.h" -#include "mongo/db/tenant_id.h" #include "mongo/logv2/bson_formatter.h" #include "mongo/logv2/component_settings_filter.h" #include "mongo/logv2/composite_backend.h" @@ -462,8 +461,7 @@ class LogV2TypesTest : public LogV2Test { public: using LogV2Test::LogV2Test; LogV2TypesTest() : LogV2Test() { - detail::setGetTenantIDCallback( - [this]() -> boost::optional { return this->tenant; }); + detail::setGetTenantIDCallback([this]() -> std::string { return this->tenant.toString(); }); } ~LogV2TypesTest() { detail::setGetTenantIDCallback(nullptr); @@ -481,7 +479,7 @@ public: } auto lastBSONElement() { - ASSERT_EQUALS(BSONObj(bson.back().data()).getField(kTenantFieldName).str(), + ASSERT_EQUALS(BSONObj(bson.back().data()).getField(kTenantFieldName).String(), tenant.toString()); return BSONObj(bson.back().data()).getField(kAttributesFieldName).Obj().getField("name"_sd); } -- cgit v1.2.1