Skip to content

Commit a31d2fc

Browse files
committed
Exposing upload and download errors in SyncStatus.
1 parent ec51dd2 commit a31d2fc

File tree

2 files changed

+64
-9
lines changed

2 files changed

+64
-9
lines changed

PowerSync/PowerSync.Common/Client/Sync/Stream/StreamingSyncImplementation.cs

Lines changed: 49 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,10 @@ protected async Task StreamingSync(CancellationToken? signal, PowerSyncConnectio
297297
UpdateSyncStatus(new SyncStatusOptions
298298
{
299299
Connected = false,
300+
DataFlow = new SyncDataFlowStatus
301+
{
302+
DownloadError = ex
303+
}
300304
});
301305

302306
// On error, wait a little before retrying
@@ -466,7 +470,13 @@ protected async Task<StreamingSyncIterationResult> StreamingSyncIteration(Cancel
466470
{
467471
Connected = true,
468472
LastSyncedAt = DateTime.Now,
469-
DataFlow = new SyncDataFlowStatus { Downloading = false }
473+
DataFlow = new SyncDataFlowStatus
474+
{
475+
Downloading = false
476+
}
477+
}, new UpdateSyncStatusOptions
478+
{
479+
ClearDownloadError = true
470480
});
471481

472482
}
@@ -546,7 +556,9 @@ protected async Task<StreamingSyncIterationResult> StreamingSyncIteration(Cancel
546556
//
547557
await DelayRetry();
548558
return new StreamingSyncIterationResult { Retry = true };
549-
} else if (remainingSeconds < 30) {
559+
}
560+
else if (remainingSeconds < 30)
561+
{
550562
logger.LogDebug("Token will expire soon; reconnect");
551563
// Pre-emptively refresh the token
552564
Options.Remote.InvalidateCredentials();
@@ -563,8 +575,13 @@ protected async Task<StreamingSyncIterationResult> StreamingSyncIteration(Cancel
563575
UpdateSyncStatus(new SyncStatusOptions
564576
{
565577
Connected = true,
566-
LastSyncedAt = DateTime.Now
567-
});
578+
LastSyncedAt = DateTime.Now,
579+
},
580+
new UpdateSyncStatusOptions
581+
{
582+
ClearDownloadError = true
583+
}
584+
);
568585
}
569586
else if (validatedCheckpoint == targetCheckpoint)
570587
{
@@ -590,8 +607,12 @@ protected async Task<StreamingSyncIterationResult> StreamingSyncIteration(Cancel
590607
LastSyncedAt = DateTime.Now,
591608
DataFlow = new SyncDataFlowStatus
592609
{
593-
Downloading = false
610+
Downloading = false,
594611
}
612+
},
613+
new UpdateSyncStatusOptions
614+
{
615+
ClearDownloadError = true
595616
});
596617
}
597618
}
@@ -661,6 +682,14 @@ await locks.ObtainLock(new LockOptions<Task>
661682

662683
checkedCrudItem = nextCrudItem;
663684
await Options.UploadCrud();
685+
UpdateSyncStatus(new SyncStatusOptions
686+
{
687+
},
688+
new UpdateSyncStatusOptions
689+
{
690+
ClearUploadError = true
691+
});
692+
664693
}
665694
else
666695
{
@@ -672,7 +701,14 @@ await locks.ObtainLock(new LockOptions<Task>
672701
catch (Exception ex)
673702
{
674703
checkedCrudItem = null;
675-
UpdateSyncStatus(new SyncStatusOptions { DataFlow = new SyncDataFlowStatus { Uploading = false } });
704+
UpdateSyncStatus(new SyncStatusOptions
705+
{
706+
DataFlow = new SyncDataFlowStatus
707+
{
708+
Uploading = false,
709+
UploadError = ex
710+
}
711+
});
676712

677713
await DelayRetry();
678714

@@ -706,7 +742,10 @@ public async Task WaitForReady()
706742
await Task.CompletedTask;
707743
}
708744

709-
protected void UpdateSyncStatus(SyncStatusOptions options)
745+
protected record UpdateSyncStatusOptions(
746+
bool? ClearDownloadError = null, bool? ClearUploadError = null
747+
);
748+
protected void UpdateSyncStatus(SyncStatusOptions options, UpdateSyncStatusOptions? updateOptions = null)
710749
{
711750
var updatedStatus = new SyncStatus(new SyncStatusOptions
712751
{
@@ -716,7 +755,9 @@ protected void UpdateSyncStatus(SyncStatusOptions options)
716755
DataFlow = new SyncDataFlowStatus
717756
{
718757
Uploading = options.DataFlow?.Uploading ?? SyncStatus.DataFlowStatus.Uploading,
719-
Downloading = options.DataFlow?.Downloading ?? SyncStatus.DataFlowStatus.Downloading
758+
Downloading = options.DataFlow?.Downloading ?? SyncStatus.DataFlowStatus.Downloading,
759+
DownloadError = updateOptions?.ClearDownloadError == true ? null : options.DataFlow?.DownloadError ?? SyncStatus.DataFlowStatus.DownloadError,
760+
UploadError = updateOptions?.ClearUploadError == true ? null : options.DataFlow?.UploadError ?? SyncStatus.DataFlowStatus.UploadError,
720761
}
721762
});
722763

PowerSync/PowerSync.Common/DB/Crud/SyncStatus.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,20 @@ public class SyncDataFlowStatus
99

1010
[JsonProperty("uploading")]
1111
public bool Uploading { get; set; } = false;
12+
13+
/// <summary>
14+
/// Error during downloading (including connecting).
15+
/// Cleared on the next successful data download.
16+
/// </summary>
17+
[JsonProperty("downloadError")]
18+
public Exception? DownloadError { get; set; } = null;
19+
20+
/// <summary>
21+
/// Error during uploading.
22+
/// Cleared on the next successful upload.
23+
/// </summary>
24+
[JsonProperty("uploadError")]
25+
public Exception? UploadError { get; set; } = null;
1226
}
1327

1428
public class SyncStatusOptions
@@ -73,7 +87,7 @@ public bool IsEqual(SyncStatus status)
7387
public string GetMessage()
7488
{
7589
var dataFlow = DataFlowStatus;
76-
return $"SyncStatus<connected: {Connected} connecting: {Connecting} lastSyncedAt: {LastSyncedAt} hasSynced: {HasSynced}. Downloading: {dataFlow.Downloading}. Uploading: {dataFlow.Uploading}>";
90+
return $"SyncStatus<connected: {Connected} connecting: {Connecting} lastSyncedAt: {LastSyncedAt} hasSynced: {HasSynced}. Downloading: {dataFlow.Downloading}. Uploading: {dataFlow.Uploading}. UploadError: ${dataFlow.UploadError}, DownloadError?: ${dataFlow.DownloadError}>";
7791
}
7892

7993
public string ToJSON()

0 commit comments

Comments
 (0)