-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: integrate sync and project invites #362
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
For now this simplifies the API (because we are only supporting local sync, not remote sync over the internet) to: - `project.$sync.getState()` - `project.$sync.start()` - `project.$sync.stop()` - Events - `sync-state` It's currently not possible to stop local discovery, nor is it possible to stop sync of the metadata namespaces (auth, config, blobIndex). The start and stop methods stop the sync of the data and blob namespaces. Fixes #134. Stacked on #360, #358 and #356.
Fixes Add project method to download auth + config cores #233 Rather than call this inside the `client.addProject()` method, instead I think it is better for the API consumer to call `project.$waitForInitialSync()` after adding a project, since this allows the implementer to give user feedback about what is happening.
2 tasks
gmaclennan
changed the title
feat: Add project.$waitForInitialSync() method
feat: wait for initial sync when adding a project
Oct 27, 2023
This was referenced Oct 27, 2023
Failing tests need to be addressed |
gmaclennan
added a commit
that referenced
this pull request
Nov 28, 2023
gmaclennan
added a commit
that referenced
this pull request
Nov 29, 2023
gmaclennan
added a commit
that referenced
this pull request
Nov 29, 2023
This was referenced Apr 11, 2024
This was referenced Jun 20, 2024
This was referenced Jul 25, 2024
This was referenced Aug 21, 2024
This was referenced Aug 29, 2024
This was referenced Sep 11, 2024
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
This PR integrates work done in #361, #360, #358 and #356 and fixes #233 (Add project method to download auth + config cores).
The
manager.addProject()
method now waits for the config and auth cores to sync before the project is added to the invitee's device, this ensures they have the presets and fields necessary to collect data, and they have the capability records that enable them to sync with others in the project who have not yet synced with the invitor. This does mean that a device could end up invited to the project as far as existing members are concerned, but that project not actually be added to the invitee's device. Have opened a separate issue #363 to address this situation later.More broadly this PR also integrates earlier sync and discovery work by connecting invites, peer discovery and sync. This integration uncovered several bugs and implementation errors that have been resolved here. This PR also changes how sync is controlled - previously we used
ReplicationStateMachine
and the coreManager.replicate() method, but now we use the new SyncApi methods which authorises peers, starts auth, config and blobIndex sync automatically, and starts data and blob sync when the user callsproject.$sync.start()
. This change broke a lot of unit tests that relied on the core manager sync, so I have implemented a newcoreManager.replicate()
function for tests that replicates all cores in the project. I moved some unit tests to end-to-end tests (e.g. all the PeerSyncController unit tests are now covered in the e2e tests), but more could probably be changed to e2e tests in the future.The full list of changes and fixes in this PR:
capabilities.getAll()
addProject()
method wait for initial sync - only resolves and adds the project if the role record (authorizing project membership) and project config has synced (see new internal #waitForInitialSync() method)start()
andstop()
methods that start and stop the server - the server should start and stop when the app goes into the background, which can be controlled by the backend, but discovery should probably be controlled by the user / frontend, so starting and stopping discovery needs to be methods that can be called from the frontend.peer-add
from the creator core we know has the project key).dataToSync: boolean
andcoreCount: number
properties to the sync state