Skip to content

Fix lifetime for sdk::ReadWriteLogRecord #3147

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 42 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
aa4471d
Fix lifetime for sdk::ReadWriteLogRecord
owent Nov 15, 2024
8c86bbd
Fix unit test
owent Nov 15, 2024
cae98c6
Fix unit test
owent Nov 15, 2024
b933ee8
Merge branch 'main' into fix_lifetime_in_log_record
owent Nov 15, 2024
cfd5db3
Fix a typo
owent Nov 16, 2024
67f66c7
Merge branch 'main' into fix_lifetime_in_log_record
owent Nov 20, 2024
4b8012d
Merge branch 'main' into fix_lifetime_in_log_record
owent Nov 21, 2024
5595d31
Merge branch 'main' into fix_lifetime_in_log_record
lalitb Nov 22, 2024
40c4632
Merge remote-tracking branch 'github/main' into fix_lifetime_in_log_r…
owent Nov 25, 2024
282efec
Implement a new LogRecordData to store both Owned attributes and attr…
owent Nov 25, 2024
3da4bed
Merge branch 'main' into fix_lifetime_in_log_record
owent Nov 26, 2024
cf758d1
Merge branch 'main' into fix_lifetime_in_log_record
owent Nov 27, 2024
da602f3
Merge branch 'main' into fix_lifetime_in_log_record
owent Dec 5, 2024
94cf407
Merge branch 'main' into fix_lifetime_in_log_record
lalitb Dec 6, 2024
68178bf
Merge branch 'main' into fix_lifetime_in_log_record
owent Dec 7, 2024
4327f87
Merge branch 'main' into fix_lifetime_in_log_record
owent Dec 12, 2024
2f89435
Merge remote-tracking branch 'github/main' into fix_lifetime_in_log_r…
owent Dec 20, 2024
a3cffa7
Merge branch 'main' into fix_lifetime_in_log_record
owent Jan 8, 2025
1fc10b0
Merge branch 'main' into fix_lifetime_in_log_record
owent Jan 21, 2025
b4bfe00
Merge branch 'main' into fix_lifetime_in_log_record
owent Jan 22, 2025
b173dd7
Merge remote-tracking branch 'opentelemetry/main' into fix_lifetime_i…
owent Jan 28, 2025
b5198ae
Fixes iwyu
owent Jan 29, 2025
156c229
Merge remote-tracking branch 'opentelemetry/main' into fix_lifetime_i…
owent Jan 29, 2025
fabc4a0
Merge branch 'main' into fix_lifetime_in_log_record
owent Jan 31, 2025
aa821dc
Merge remote-tracking branch 'github/main' into fix_lifetime_in_log_r…
owent Feb 13, 2025
e0bb99e
Fix iwyu
owent Feb 13, 2025
7e428af
Merge remote-tracking branch 'github/main' into fix_lifetime_in_log_r…
owent Feb 21, 2025
dca08c8
Change the return types of ReadWriteLogRecord in API v2
owent Feb 21, 2025
7f06655
Merge remote-tracking branch 'github/main' into fix_lifetime_in_log_r…
owent Feb 24, 2025
afde1dd
Merge remote-tracking branch 'github/main' into fix_lifetime_in_log_r…
owent Mar 7, 2025
440dba3
Merge branch 'main' into fix_lifetime_in_log_record
owent Mar 15, 2025
8af0220
Fixes problems of cppcheck and markdown-lint
owent Mar 15, 2025
2759d15
Merge branch 'main' into fix_lifetime_in_log_record
owent Mar 21, 2025
61a0902
Merge branch 'main' into fix_lifetime_in_log_record
ThomsonTan Mar 27, 2025
3ea0774
Merge branch 'main' into fix_lifetime_in_log_record
owent Mar 27, 2025
f5d6bc1
Merge branch 'main' into fix_lifetime_in_log_record
owent Apr 9, 2025
13f90d6
Merge remote-tracking branch 'github/main' into fix_lifetime_in_log_r…
owent Apr 27, 2025
faeee46
Merge remote-tracking branch 'origin/fix_lifetime_in_log_record' into…
owent Apr 27, 2025
bada7dc
Merge branch 'main' into fix_lifetime_in_log_record
ThomsonTan May 3, 2025
7bc61db
Merge branch 'main' into fix_lifetime_in_log_record
owent May 9, 2025
865ee87
Merge remote-tracking branch 'github/main' into fix_lifetime_in_log_r…
owent May 9, 2025
4333fcf
Merge branch 'main' into fix_lifetime_in_log_record
owent May 15, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,22 @@ Increment the:
* [CMAKE] Add generated protobuf headers to the opentelemetry_proto target
[#3400](https://github.com/open-telemetry/opentelemetry-cpp/pull/3400)

* [SDK] Fix lifetime for sdk::ReadWriteLogRecord
[#3147](https://github.com/open-telemetry/opentelemetry-cpp/pull/3245)

Important changes:

* [SDK] Fix lifetime for sdk::ReadWriteLogRecord
[#3147](https://github.com/open-telemetry/opentelemetry-cpp/pull/3245)

* With ABI version 2, `opentelemetry::sdk::logs::ReadableLogRecord::GetAttributes()`
will returns a `std::unordered_map<std::string, opentelemetry::sdk::common::OwnedAttributeValue>`
instead of a `std::unordered_map<std::string, opentelemetry::common::AttributeValue>`
to keep the same type as the `opentelemetry::sdk::trace::SpanData`. And
`opentelemetry::sdk::logs::ReadableLogRecord::GetBody()` will returns a
`const opentelemetry::sdk::common::OwnedAttributeValue &` instead of a
`const opentelemetry::common::AttributeValue &`.

## [1.20 2025-04-01]

* [BUILD] Update opentelemetry-proto version
Expand Down Expand Up @@ -199,6 +215,9 @@ Important changes:

* All the example code has been updated to reflect the new usage.

* [SDK] Implement spec: MetricFilter
[#3235](https://github.com/open-telemetry/opentelemetry-cpp/pull/3235)

## [1.19 2025-01-22]

* [PROMETHEUS_EXPORTER] Fix default for emitting otel_scope attributes
Expand Down
5 changes: 3 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,10 @@ if(VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
include("${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}")
endif()

option(WITH_ABI_VERSION_1 "ABI version 1" ON)
include(CMakeDependentOption)
option(WITH_ABI_VERSION_2 "EXPERIMENTAL: ABI version 2 preview" OFF)
cmake_dependent_option(WITH_ABI_VERSION_1 "ABI version 1" ON
"NOT WITH_ABI_VERSION_2" OFF)

file(READ "${CMAKE_CURRENT_LIST_DIR}/api/include/opentelemetry/version.h"
OPENTELEMETRY_CPP_HEADER_VERSION_H)
Expand Down Expand Up @@ -490,7 +492,6 @@ if(WITH_OTLP_GRPC
# Some versions of FindProtobuf.cmake uses mixed case instead of uppercase
set(PROTOBUF_PROTOC_EXECUTABLE ${Protobuf_PROTOC_EXECUTABLE})
endif()
include(CMakeDependentOption)

message(STATUS "PROTOBUF_PROTOC_EXECUTABLE=${PROTOBUF_PROTOC_EXECUTABLE}")
set(SAVED_CMAKE_CXX_CLANG_TIDY ${CMAKE_CXX_CLANG_TIDY})
Expand Down
8 changes: 4 additions & 4 deletions exporters/ostream/src/log_record_exporter.cc
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
#include "opentelemetry/sdk/common/exporter_utils.h"
#include "opentelemetry/sdk/common/global_log_handler.h"
#include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h"
#include "opentelemetry/sdk/logs/read_write_log_record.h"
#include "opentelemetry/sdk/logs/log_record_data.h"
#include "opentelemetry/sdk/logs/recordable.h"
#include "opentelemetry/sdk/resource/resource.h"
#include "opentelemetry/trace/span_id.h"
Expand All @@ -47,7 +47,7 @@ OStreamLogRecordExporter::OStreamLogRecordExporter(std::ostream &sout) noexcept

std::unique_ptr<sdklogs::Recordable> OStreamLogRecordExporter::MakeRecordable() noexcept
{
return std::unique_ptr<sdklogs::Recordable>(new sdklogs::ReadWriteLogRecord());
return std::unique_ptr<sdklogs::Recordable>(new sdklogs::LogRecordData());
}

sdk::common::ExportResult OStreamLogRecordExporter::Export(
Expand All @@ -62,8 +62,8 @@ sdk::common::ExportResult OStreamLogRecordExporter::Export(

for (auto &record : records)
{
auto log_record = std::unique_ptr<sdklogs::ReadWriteLogRecord>(
static_cast<sdklogs::ReadWriteLogRecord *>(record.release()));
auto log_record = std::unique_ptr<sdklogs::LogRecordData>(
static_cast<sdklogs::LogRecordData *>(record.release()));

if (log_record == nullptr)
{
Expand Down
22 changes: 11 additions & 11 deletions exporters/ostream/test/ostream_log_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@
#include "opentelemetry/nostd/utility.h"
#include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h"
#include "opentelemetry/sdk/logs/exporter.h"
#include "opentelemetry/sdk/logs/log_record_data.h"
#include "opentelemetry/sdk/logs/logger_provider.h"
#include "opentelemetry/sdk/logs/processor.h"
#include "opentelemetry/sdk/logs/provider.h"
#include "opentelemetry/sdk/logs/read_write_log_record.h"
#include "opentelemetry/sdk/logs/readable_log_record.h"
#include "opentelemetry/sdk/logs/recordable.h"
#include "opentelemetry/sdk/logs/simple_log_record_processor.h"
Expand Down Expand Up @@ -82,7 +82,7 @@ TEST(OStreamLogRecordExporter, Shutdown)

// After processor/exporter is shutdown, no logs should be sent to stream
auto record = exporter->MakeRecordable();
static_cast<sdklogs::ReadWriteLogRecord *>(record.get())->SetBody("Log record not empty");
static_cast<sdklogs::LogRecordData *>(record.get())->SetBody("Log record not empty");
exporter->Export(nostd::span<std::unique_ptr<sdklogs::Recordable>>(&record, 1));

// Restore original stringstream buffer
Expand Down Expand Up @@ -171,12 +171,12 @@ TEST(OStreamLogRecordExporter, SimpleLogToCout)
// Create a log record and manually timestamp, severity, name, message
common::SystemTimestamp now(std::chrono::system_clock::now());

auto record = std::unique_ptr<sdklogs::Recordable>(new sdklogs::ReadWriteLogRecord());
static_cast<sdklogs::ReadWriteLogRecord *>(record.get())->SetTimestamp(now);
static_cast<sdklogs::ReadWriteLogRecord *>(record.get())->SetObservedTimestamp(now);
static_cast<sdklogs::ReadWriteLogRecord *>(record.get())
auto record = std::unique_ptr<sdklogs::Recordable>(new sdklogs::LogRecordData());
static_cast<sdklogs::LogRecordData *>(record.get())->SetTimestamp(now);
static_cast<sdklogs::LogRecordData *>(record.get())->SetObservedTimestamp(now);
static_cast<sdklogs::LogRecordData *>(record.get())
->SetSeverity(logs_api::Severity::kTrace); // kTrace has enum value of 1
static_cast<sdklogs::ReadWriteLogRecord *>(record.get())->SetBody("Message");
static_cast<sdklogs::LogRecordData *>(record.get())->SetBody("Message");

opentelemetry::sdk::instrumentationscope::InstrumentationScope instrumentation_scope =
GetTestInstrumentationScope();
Expand Down Expand Up @@ -248,10 +248,10 @@ TEST(OStreamLogRecordExporter, LogWithStringAttributesToCerr)

// Set resources for this log record only of type <string, string>
auto resource = opentelemetry::sdk::resource::Resource::Create({{"key1", "val1"}});
static_cast<sdklogs::ReadWriteLogRecord *>(record.get())->SetResource(resource);
static_cast<sdklogs::LogRecordData *>(record.get())->SetResource(resource);

// Set attributes to this log record of type <string, AttributeValue>
static_cast<sdklogs::ReadWriteLogRecord *>(record.get())->SetAttribute("a", true);
static_cast<sdklogs::LogRecordData *>(record.get())->SetAttribute("a", true);

opentelemetry::sdk::instrumentationscope::InstrumentationScope instrumentation_scope =
GetTestInstrumentationScope();
Expand Down Expand Up @@ -326,12 +326,12 @@ TEST(OStreamLogRecordExporter, LogWithVariantTypesToClog)
nostd::span<int> data1{array1.data(), array1.size()};

auto resource = opentelemetry::sdk::resource::Resource::Create({{"res1", data1}});
static_cast<sdklogs::ReadWriteLogRecord *>(record.get())->SetResource(resource);
static_cast<sdklogs::LogRecordData *>(record.get())->SetResource(resource);

// Set resources for this log record of bool types as the value
// e.g. key/value is a par of type <string, array of bools>
std::array<bool, 3> array = {false, true, false};
static_cast<sdklogs::ReadWriteLogRecord *>(record.get())
static_cast<sdklogs::LogRecordData *>(record.get())
->SetAttribute("attr1", nostd::span<bool>{array.data(), array.size()});

opentelemetry::sdk::instrumentationscope::InstrumentationScope instrumentation_scope =
Expand Down
Loading
Loading