[Feature] Implement web sync locks #119
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
This uses the Navigator locks in the
Mutex
class from here powersync-ja/sqlite_async.dart#54 to limit the number of active sync implementations when multiple tabs are used.This is only a stop-gap to prevent multiple tabs with multiple
StreamingSyncImplementation
s from applying sync bucket changes at the same time (this can leave the local SQLite DB in an inconsistent or broken state).This method enhances the safety of using multiple tabs, but is far from complete multiple tab support.
This should address the issue of "Flutter web + PowerSync still has the issue where multiple open tabs will cause sqlite to get messed up" from #11
Testing
Note that the app works when switching between tabs. The sync status is isolated per tab - only 1 tab is ever connected or uploading at a time.
locked_tabs.mp4
Todos: