Skip to content

Master event tagger crashes on non-dict job returns (failing state compiles): 'list' object has no attribute 'items' at event.py:941 #69730

Description

@ggiesen

What happened?

When a job's return is not a dictionary, the master's event tagger crashes and logs an error for every such job. The most common trigger is a failing state compilation: state.apply/state.sls return a list of error strings when rendering/compilation fails, and salt.utils.event._fire_ret_load_specific_fun assumes a mapping:

File "salt/utils/event.py", line 941, in _fire_ret_load_specific_fun
    for tag, data in ret.items():
AttributeError: 'list' object has no attribute 'items'

The broad except catches it and logs Event iteration failed with exception: 'list' object has no attribute 'items' at ERROR level, so nothing crashes outright -- but the master logs an error for every failed state compile, and the CI integration tests that assert this exact message never appears (tests/pytests/integration/states/test_state_test.py, added to pin an earlier event-iteration bug) fail whenever they share a run with it.

Fresh CI evidence: run 28764048341, job 85297152499 ("Rocky Linux 9 integration tcp" on PR #69729) contains 12 occurrences; test_failing_sls, test_failing_sls_compound and test_issue_62590 fail directly on the logged message, and the adjacent FactoryTimeout failures (state.orchestrate runs timing out at 50 s) are consistent with the event stream misbehaving in the same jobs. This is the second failure cluster noted in #69728 (the first, the leaked-minion-keys cluster, is fixed by #69729 and absent from that run's netapi tests).

Expected behavior

A non-dict return (list of compile errors, or a plain string from some renderers) has no per-state tags to fire sub-events for; _fire_ret_load_specific_fun should skip it quietly instead of raising and logging an error. Dict-shaped returns must keep firing the per-tag failure events exactly as today.

Type of salt install

Official rpm

Major version

3006.x

What supported OS are you seeing the problem on? Can select multiple. (If bug appears on an unsupported OS, please open a GitHub Discussion instead)

rockylinux-9

salt --versions-report output

Observed in CI (3006.x onedir, Python 3.11); the code is identical on 3006.x, 3008.x and master.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions