SyncCoordinator

Classes > Sync > 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.