Skip to content

Conversation

@shsms
Copy link
Contributor

@shsms shsms commented Jan 24, 2025

If buckets remain for ever in the power manager's Matryoshka instances, proposals with overlapping component IDs will never get accepted. But if empty buckets go away as soon as they become empty, then it becomes possible to propose requests for components without conflicting with old unused component ID buckets.

@shsms shsms requested a review from a team as a code owner January 24, 2025 15:21
@shsms shsms requested review from daniel-zullo-frequenz and removed request for a team January 24, 2025 15:21
@github-actions github-actions bot added part:tests Affects the unit, integration and performance (benchmarks) tests part:microgrid Affects the interactions with the microgrid labels Jan 24, 2025
shsms added 5 commits January 24, 2025 16:21
In the matryoshka implementation there can't be overlapping buckets.
So keeping unused buckets forever would mean that it will block other
component permutations in future requests.

Signed-off-by: Sahas Subramanian <[email protected]>
And if that leads to an empty bucket, drop the bucket too.

Signed-off-by: Sahas Subramanian <[email protected]>
Signed-off-by: Sahas Subramanian <[email protected]>
@github-actions github-actions bot added the part:docs Affects the documentation label Jan 24, 2025
@shsms shsms self-assigned this Jan 24, 2025
@shsms shsms requested a review from llucax January 24, 2025 15:24
@shsms shsms linked an issue Jan 24, 2025 that may be closed by this pull request
@shsms
Copy link
Contributor Author

shsms commented Jan 24, 2025

I will update #1146 to incorporate these changes after this is merged.

bucket.add(proposal)
elif not bucket:
del self._component_buckets[component_ids]
_ = self._target_power.pop(component_ids, None)
Copy link
Contributor

Choose a reason for hiding this comment

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

I don't think you need the _ = . Also is it a pop instead of a del because component_id might not be in self._target_power?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I have been using an extra pedantic lsp server that warns about discarding return values. And because I have been hit by such bugs before, I decided to not disable it.

And yes, pop because there's one case where component IDs won't be in target_power, and that's when the first request ever sent to a battery pool is a None, (None, None).

Copy link
Contributor

Choose a reason for hiding this comment

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

Which linter is that? I did a quick search and didn't found any linter that has that feature. I agree is a good lint to have, otherwise it looks very arbitrary, as we have many other places where values are silently discarded. It would be nice to enabled it for everyone so we don't end up with inconsistent code (that it might also be very noisy for the people using the pendantic tool).

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I've been using https://docs.basedpyright.com/latest/ and enjoying it a lot. I've been using it as an LSP server, but it is also available as a CLI tool.

# succeed. And it will fail until then.
with pytest.raises(
NotImplementedError,
match=re.escape(
Copy link
Contributor

Choose a reason for hiding this comment

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

TIL: re.escape. :D

@shsms shsms added this pull request to the merge queue Jan 27, 2025
github-merge-queue bot pushed a commit that referenced this pull request Jan 27, 2025
If buckets remain for ever in the power manager's Matryoshka instances,
proposals with overlapping component IDs will never get accepted. But if
empty buckets go away as soon as they become empty, then it becomes
possible to propose requests for components without conflicting with old
unused component ID buckets.
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Jan 27, 2025
@shsms shsms added this pull request to the merge queue Jan 27, 2025
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Jan 27, 2025
@shsms shsms added this pull request to the merge queue Jan 27, 2025
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Jan 27, 2025
@llucax
Copy link
Contributor

llucax commented Jan 27, 2025

This is getting a weird error saying bash: nox: command not found when trying to install dependencies :-/

@shsms shsms added this pull request to the merge queue Jan 27, 2025
Merged via the queue into frequenz-floss:v1.x.x with commit e2d4536 Jan 27, 2025
18 checks passed
@shsms shsms deleted the drop-old-buckets branch January 27, 2025 12:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

part:docs Affects the documentation part:microgrid Affects the interactions with the microgrid part:tests Affects the unit, integration and performance (benchmarks) tests

Projects

Development

Successfully merging this pull request may close these issues.

propose_power(None) doesn't clear old buckets from the power manager

2 participants