Skip to content
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

opentelemetry-exporter-otlp-proto-common: permit to serialize null values in logs #4400

Open
wants to merge 4 commits into
base: main
Choose a base branch
from

Conversation

xrmx
Copy link
Contributor

@xrmx xrmx commented Jan 27, 2025

Description

This fixes logs encoding to work with body if it is a mapping with null keys.

Fixes #4279
Fixes #4392

Type of change

Please delete options that are not relevant.

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

How Has This Been Tested?

Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration

  • tox -e py310-test-opentelemetry-exporter-otlp-proto-common

Does This PR Require a Contrib Repo Change?

  • Yes. - Link to PR:
  • No.

Checklist:

  • Followed the style guidelines of this project
  • Changelogs have been updated
  • Unit tests have been added
  • Documentation has been updated

@@ -66,7 +66,11 @@ def _encode_resource(resource: Resource) -> PB2Resource:
return PB2Resource(attributes=_encode_attributes(resource.attributes))


def _encode_value(value: Any) -> PB2AnyValue:
def _encode_value(
value: Any, allow_null: bool = False
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is there a need for allow_null = False? could we allow nulls for everything?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

_encode_value is used via _encode_key_value by _encode_attributes that is used also by the metrics and trace encoders and did not want to change their behavior.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A couple of thoughts:

  • I'd imagine complex attributes on logs/events would also be prone to the same problem. It'd be nice to allow log attributes to have null values. So I think we should allow log attributes to have null values inside complex payloads.
  • [minor] Allowing null values would not be a breaking change (it was not allowed before so nobody could add a null attribute), so I still wonder if additional logic is necessary.

Copy link
Contributor Author

@xrmx xrmx Jan 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you mean with complex attributes? _encode_value is recursive so we are handling null values nested in arrays and maps.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I mean not just the body, but also logrecord attributes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Encounter Invalid type <class 'NoneType'> of value None issue. logs: handle None in _encode_value
3 participants