SyncCoordinator
Coordinates sync operations between replicas. Main entry point for pull/push sync operations. Implements spec Section 11 (Bi-Directional Sync Protocol).
public static class SyncCoordinator
Example
// Perform a bidirectional sync
using var connection = new SqliteConnection("Data Source=local.db");
connection.Open();
var result = SyncCoordinator.Sync(
myOriginId: "client-uuid-123",
lastServerVersion: 100,
lastPushVersion: 50,
config: new BatchConfig(BatchSize: 1000),
fetchRemoteChanges: (version, limit) => httpClient.GetChanges(version, limit),
applyLocalChange: entry => ApplyChange(connection, entry),
enableTriggerSuppression: () => EnableSuppression(connection),
disableTriggerSuppression: () => DisableSuppression(connection),
updateLastServerVersion: v => UpdateServerVersion(connection, v),
fetchLocalChanges: (version, limit) => GetLocalChanges(connection, version, limit),
sendToRemote: entries => httpClient.PushChanges(entries),
updateLastPushVersion: v => UpdatePushVersion(connection, v),
logger: logger
);
Methods
Pull(string, long, BatchConfig, Func<long, int, Result<IReadOnlyList<SyncLogEntry>, SyncError>>, Func<SyncLogEntry, Result<bool, SyncError>>, Func<Result<bool, SyncError>>, Func<Result<bool, SyncError>>, Action<long>, ILogger)
public static Result<PullResult, SyncError> Pull(string myOriginId, long lastSyncedVersion, BatchConfig config, Func<long, int, Result<IReadOnlyList<SyncLogEntry>, SyncError>> fetchRemoteChanges, Func<SyncLogEntry, Result<bool, SyncError>> applyLocalChange, Func<Result<bool, SyncError>> enableTriggerSuppression, Func<Result<bool, SyncError>> disableTriggerSuppression, Action<long> updateLastSyncedVersion, ILogger logger)
Pulls changes from a remote source and applies them locally.
Parameters:
| Name | Type | Description |
|---|---|---|
myOriginId |
String |
This replica's origin ID. |
lastSyncedVersion |
Int64 |
Last synced version to start from. |
config |
BatchConfig |
Batch configuration. |
fetchRemoteChanges |
SyncError>> |
Function to fetch changes from remote. |
applyLocalChange |
SyncError>> |
Function to apply a change locally. |
enableTriggerSuppression |
SyncError>> |
Function to enable trigger suppression. |
disableTriggerSuppression |
SyncError>> |
Function to disable trigger suppression. |
updateLastSyncedVersion |
Int64> |
Action to update last synced version. |
logger |
ILogger |
Logger for sync operations. |
Returns: SyncError> - Pull result or sync error.
Push(long, BatchConfig, Func<long, int, Result<IReadOnlyList<SyncLogEntry>, SyncError>>, Func<IReadOnlyList<SyncLogEntry>, Result<bool, SyncError>>, Action<long>, ILogger)
public static Result<PushResult, SyncError> Push(long lastPushedVersion, BatchConfig config, Func<long, int, Result<IReadOnlyList<SyncLogEntry>, SyncError>> fetchLocalChanges, Func<IReadOnlyList<SyncLogEntry>, Result<bool, SyncError>> sendToRemote, Action<long> updateLastPushedVersion, ILogger logger)
Pushes local changes to a remote destination.
Parameters:
| Name | Type | Description |
|---|---|---|
lastPushedVersion |
Int64 |
Last pushed version to start from. |
config |
BatchConfig |
Batch configuration. |
fetchLocalChanges |
SyncError>> |
Function to fetch local changes. |
sendToRemote |
SyncError>> |
Function to send changes to remote. |
updateLastPushedVersion |
Int64> |
Action to update last pushed version. |
logger |
ILogger |
Logger for sync operations. |
Returns: SyncError> - Push result or sync error.
Sync(string, long, long, BatchConfig, Func<long, int, Result<IReadOnlyList<SyncLogEntry>, SyncError>>, Func<SyncLogEntry, Result<bool, SyncError>>, Func<Result<bool, SyncError>>, Func<Result<bool, SyncError>>, Action<long>, Func<long, int, Result<IReadOnlyList<SyncLogEntry>, SyncError>>, Func<IReadOnlyList<SyncLogEntry>, Result<bool, SyncError>>, Action<long>, ILogger)
public static Result<SyncResult, SyncError> Sync(string myOriginId, long lastServerVersion, long lastPushVersion, BatchConfig config, Func<long, int, Result<IReadOnlyList<SyncLogEntry>, SyncError>> fetchRemoteChanges, Func<SyncLogEntry, Result<bool, SyncError>> applyLocalChange, Func<Result<bool, SyncError>> enableTriggerSuppression, Func<Result<bool, SyncError>> disableTriggerSuppression, Action<long> updateLastServerVersion, Func<long, int, Result<IReadOnlyList<SyncLogEntry>, SyncError>> fetchLocalChanges, Func<IReadOnlyList<SyncLogEntry>, Result<bool, SyncError>> sendToRemote, Action<long> updateLastPushVersion, ILogger logger)
Performs a full bidirectional sync: pull then push.
Parameters:
| Name | Type | Description |
|---|---|---|
myOriginId |
String |
This replica's origin ID. |
lastServerVersion |
Int64 |
Last server version to pull from. |
lastPushVersion |
Int64 |
Last push version to push from. |
config |
BatchConfig |
Batch configuration. |
fetchRemoteChanges |
SyncError>> |
Function to fetch remote changes. |
applyLocalChange |
SyncError>> |
Function to apply a change locally. |
enableTriggerSuppression |
SyncError>> |
Function to enable trigger suppression. |
disableTriggerSuppression |
SyncError>> |
Function to disable trigger suppression. |
updateLastServerVersion |
Int64> |
Action to update last server version. |
fetchLocalChanges |
SyncError>> |
Function to fetch local changes. |
sendToRemote |
SyncError>> |
Function to send changes to remote. |
updateLastPushVersion |
Int64> |
Action to update last push version. |
logger |
ILogger |
Logger for sync operations. |
Returns: SyncError> - Sync result or sync error.