core icon indicating copy to clipboard operation
core copied to clipboard

Improve check of new_entity_id in entity_registry.async_update_entity

Open emontnemery opened this issue 3 years ago • 4 comments

Proposed change

Improve check of new_entity_id in entity_registry.async_update_entity to block claiming an entity_id which is in the state machine.

Type of change

  • [ ] Dependency upgrade
  • [x] Bugfix (non-breaking change which fixes an issue)
  • [ ] New integration (thank you!)
  • [ ] New feature (which adds functionality to an existing integration)
  • [ ] Deprecation (breaking change to happen in the future)
  • [ ] Breaking change (fix/feature causing existing functionality to break)
  • [ ] Code quality improvements to existing code or addition of tests

Additional information

  • This PR fixes or closes issue: fixes #
  • This PR is related to issue:
  • Link to documentation pull request:

Checklist

  • [ ] The code change is tested and works locally.
  • [ ] Local tests pass. Your PR cannot be merged unless tests pass
  • [ ] There is no commented out code in this PR.
  • [ ] I have followed the development checklist
  • [ ] The code has been formatted using Black (black --fast homeassistant tests)
  • [ ] Tests have been added to verify that the new code works.

If user exposed functionality or configuration variables are added/changed:

If the code communicates with devices, web services, or third-party tools:

  • [ ] The manifest file has all fields filled out correctly.
    Updated and included derived files by running: python3 -m script.hassfest.
  • [ ] New or updated dependencies have been added to requirements_all.txt.
    Updated by running python3 -m script.gen_requirements_all.
  • [ ] For the updated dependencies - a link to the changelog, or at minimum a diff between library versions is added to the PR description.
  • [ ] Untested files have been added to .coveragerc.

The integration reached or maintains the following Integration Quality Scale:

  • [ ] No score or internal
  • [ ] 🥈 Silver
  • [ ] 🥇 Gold
  • [ ] 🏆 Platinum

To help with the load of incoming pull requests:

emontnemery avatar Sep 12 '22 07:09 emontnemery

Hey there @home-assistant/core, mind taking a look at this pull request as it has been labeled with an integration (config) you are listed as a code owner for? Thanks! (message by CodeOwnersMention)

@danielhiversen, @elupus, @RobBie1221 Can you please check the failing rfxtrx test? Is it expected that the "replace device" options flow path changes the entity_id to a new entity_id which is already in the state machine, or is the test incorrect?

emontnemery avatar Sep 12 '22 11:09 emontnemery

Yes it will potentially do that. Its swapping out an device for another. So the old state remains.

elupus avatar Sep 12 '22 11:09 elupus

There's a race in the rfxtrx options flow; it proceeds to claim the entity_id of the entity being replaced before that entity has been cleaned up.

emontnemery avatar Sep 12 '22 12:09 emontnemery

Tests fail because async_track_state_change is incorrectly typed, fixed by https://github.com/home-assistant/core/pull/79150

emontnemery avatar Sep 27 '22 12:09 emontnemery