Skip to content

ref(buffers): Handle none value in non-pickle dump#116993

Merged
dmajere merged 2 commits into
masterfrom
change/buffer/handle-none-value
Jun 5, 2026
Merged

ref(buffers): Handle none value in non-pickle dump#116993
dmajere merged 2 commits into
masterfrom
change/buffer/handle-none-value

Conversation

@dmajere

@dmajere dmajere commented Jun 5, 2026

Copy link
Copy Markdown
Contributor
Traceback (most recent call last):
  File "/.venv/lib/python3.13/site-packages/taskbroker_client/worker/workerchild.py", line 371, in run_worker
    _execute_activation(task_func, inflight.activation, app.context_hooks)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/.venv/lib/python3.13/site-packages/taskbroker_client/worker/workerchild.py", line 551, in _execute_activation
    task_func(*args, **kwargs)
    ~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/src/sentry/src/sentry/silo/base.py", line 157, in override
    return original_method(*args, **kwargs)
  File "/.venv/lib/python3.13/site-packages/taskbroker_client/task.py", line 157, in __call__
    return self._func(*args, **kwargs)
           ~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/src/sentry/src/sentry/tasks/store.py", line 651, in save_event
    _do_save_event(
    ~~~~~~~~~~~~~~^
        cache_key,
        ^^^^^^^^^^
    ...<5 lines>...
        **kwargs,
        ^^^^^^^^^
    )
    ^
  File "/usr/src/sentry/src/sentry/tasks/store.py", line 585, in _do_save_event
    manager.save(
    ~~~~~~~~~~~~^
        project=project,
        ^^^^^^^^^^^^^^^^
    ...<3 lines>...
        attachments=attachments,
        ^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py", line 1109, in sync_wrapper
    result = f(*args, **kwargs)
  File "/usr/src/sentry/src/sentry/event_manager.py", line 513, in save
    return self.save_error_events(
           ~~~~~~~~~~~~~~~~~~~~~~^
        project, job, projects, metric_tags, attachments or [], raw, cache_key
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py", line 1109, in sync_wrapper
    result = f(*args, **kwargs)
  File "/usr/src/sentry/src/sentry/event_manager.py", line 547, in save_error_events
    group_info = assign_event_to_group(event=job["event"], job=job, metric_tags=metric_tags)
  File "/.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py", line 1109, in sync_wrapper
    result = f(*args, **kwargs)
  File "/usr/src/sentry/src/sentry/event_manager.py", line 1328, in assign_event_to_group
    group_info = handle_existing_grouphash(job, primary.existing_grouphash, primary.grouphashes)
  File "/.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py", line 1109, in sync_wrapper
    result = f(*args, **kwargs)
  File "/usr/src/sentry/src/sentry/event_manager.py", line 1462, in handle_existing_grouphash
    is_regression = _process_existing_aggregate(
        group=group,
    ...<2 lines>...
        release=job["release"],
    )
  File "/usr/src/sentry/src/sentry/event_manager.py", line 1951, in _process_existing_aggregate
    buffer_incr(Group, {"times_seen": times_seen}, {"id": group.id}, updated_group_values)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/sentry/src/sentry/tasks/process_buffer.py", line 82, in buffer_incr
    buffer.backend.incr(model, *args, **kwargs)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/sentry/src/sentry/buffer/redis.py", line 390, in incr
    pipe.hset(key, "e+" + column, json.dumps(self._dump_value(value)))
                                             ~~~~~~~~~~~~~~~~^^^^^^^
  File "/usr/src/sentry/src/sentry/buffer/redis.py", line 285, in _dump_value
    value = json.dumps({k: cls._dump_value(v, depth + 1) for k, v in value.items()})
                           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
  File "/usr/src/sentry/src/sentry/buffer/redis.py", line 285, in _dump_value
    value = json.dumps({k: cls._dump_value(v, depth + 1) for k, v in value.items()})
                           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
  File "/usr/src/sentry/src/sentry/buffer/redis.py", line 287, in _dump_value
    raise TypeError(type(value))
TypeError: <class 'NoneType'>

Adding clause for None in dump and load value

Legal Boilerplate

Look, I get it. The entity doing business as "Sentry" was incorporated in the State of Delaware in 2015 as Functional Software, Inc. and is gonna need some rights from me in order to utilize my contributions in this here PR. So here's the deal: I retain all rights, title and interest in and to my contributions, and by keeping this boilerplate intact I confirm that Sentry can use, modify, copy, and redistribute my contributions, under Sentry's choice of terms.

@github-actions github-actions Bot added the Scope: Backend Automatically applied to PRs that change backend components label Jun 5, 2026
@dmajere dmajere force-pushed the change/buffer/handle-none-value branch from 5b6add0 to 25f6ec7 Compare June 5, 2026 17:47
@dmajere dmajere enabled auto-merge (squash) June 5, 2026 18:10
@dmajere dmajere merged commit 28c4329 into master Jun 5, 2026
65 checks passed
@dmajere dmajere deleted the change/buffer/handle-none-value branch June 5, 2026 18:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Scope: Backend Automatically applied to PRs that change backend components

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants