Skip to content

Conversation

@bok-
Copy link
Contributor

@bok- bok- commented Sep 28, 2025

📒 Description

With Vexil 3 we were relying on AsyncStream's unofficial handling of multiple subscribers/iterators. While it did work there were known bugs with cleanup of multi-iterators, and it was considered an accident that it supported before - it was not behaviour that was guaranteed.

Now that we've had more evidence of Vexil 3 used in production projects it is apparent that relying on AsyncStream's behaviour here leads to unreliable outcomes, so we need a custom solution.

This PR adds that, and modernises our locking infrastructure with a more modern backport.

🗳 Test Plan

Covered by unit tests.

🧯 Source Impact

Publicly this changes only one API — when subscribing to changes it now returns a custom AsyncSequence instead of an AsyncStream.

✅ Checklist

  • I've added at least one test that validates that my change is working, if appropriate
  • I've followed the code style of the rest of the project
  • I've read the Contribution Guidelines
  • I've updated the documentation if necessary

@bok- bok- added bug Something isn't working vexil3 Part of the Vexil 3 alpha/beta development labels Sep 28, 2025
@sonarqubecloud
Copy link

@bok- bok- merged commit a6f1cb3 into main Sep 28, 2025
30 of 33 checks passed
@bok- bok- deleted the bok/multi-subscribers branch September 28, 2025 14:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working vexil3 Part of the Vexil 3 alpha/beta development

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants