summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormathisbessamdb <mathis.bessa@mongodb.com>2023-05-15 20:45:47 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2023-05-16 02:12:05 +0000
commit4e07c8d5fa95f781cd049cb1ba5362fe92beeac3 (patch)
tree80baaf6a2fb9d3a33a2da3011b8eed3139e0dfab
parentac622a67f4725a38a0c0d832e58b04de1be542e3 (diff)
downloadmongo-4e07c8d5fa95f781cd049cb1ba5362fe92beeac3.tar.gz
SERVER-66281 Logging subsystem has become aware of tenant IDs
-rw-r--r--src/mongo/db/auth/validated_tenancy_scope.cpp8
-rw-r--r--src/mongo/logv2/SConscript1
-rw-r--r--src/mongo/logv2/bson_formatter.cpp6
-rw-r--r--src/mongo/logv2/file_rotate_sink.cpp2
-rw-r--r--src/mongo/logv2/json_formatter.cpp9
-rw-r--r--src/mongo/logv2/json_formatter.h3
-rw-r--r--src/mongo/logv2/log_detail.cpp7
-rw-r--r--src/mongo/logv2/log_detail.h3
-rw-r--r--src/mongo/logv2/logv2_test.cpp6
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<boost::optional<ValidatedTenancyScope>>();
MONGO_INITIALIZER(SecurityTokenOptionValidate)(InitializerContext*) {
if (gMultitenancySupport) {
- logv2::detail::setGetTenantIDCallback([]() -> boost::optional<TenantId> {
+ 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<LogComponent>(attributes::component(), rec).get().getNameForLog());
builder.append(constants::kIdFieldName, extract<int32_t>(attributes::id(), rec).get());
- if (auto ptr = extract<TenantId>(attributes::tenant(), rec).get_ptr()) {
- builder.append(constants::kTenantFieldName, ptr->toString());
+ const auto& tenant = extract<std::string>(attributes::tenant(), rec);
+ if (!tenant.empty()) {
+ builder.append(constants::kTenantFieldName, tenant.get());
}
builder.append(constants::kContextFieldName,
extract<StringData>(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<std::string>(attributes::tenant(), rec);
format(buffer,
extract<LogSeverity>(attributes::severity(), rec).get(),
extract<LogComponent>(attributes::component(), rec).get(),
@@ -375,7 +376,7 @@ void JSONFormatter::operator()(boost::log::record_view const& rec,
extract<StringData>(attributes::message(), rec).get(),
extract<TypeErasedAttributeStorage>(attributes::attributes(), rec).get(),
extract<LogTag>(attributes::tags(), rec).get(),
- extract<TenantId>(attributes::tenant(), rec).get_ptr(),
+ !tenant.empty() ? tenant.get() : std::string(),
extract<LogTruncation>(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 <boost/log/core/record_view.hpp>
#include <boost/log/utility/formatting_ostream_fwd.hpp>
-#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 <io.h>
#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<TenantId>(
- tenant.value())));
+ new boost::log::attributes::attribute_value_impl<std::string>(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<boost::optional<TenantId>()>;
+using GetTenantIDFn = std::function<std::string()>;
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<TenantId> { 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);
}