Skip to content
This repository has been archived by the owner on Apr 12, 2023. It is now read-only.

Commit

Permalink
Fix the issue that the timing of saving lastCreated is inappropriate
Browse files Browse the repository at this point in the history
  • Loading branch information
keiji committed Mar 21, 2021
1 parent 047b12b commit 43275b8
Showing 1 changed file with 29 additions and 30 deletions.
59 changes: 29 additions & 30 deletions Covid19Radar/Covid19Radar/Services/ExposureNotificationHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ await Device.InvokeOnMainThreadAsync(() =>
public async Task FetchExposureKeyBatchFilesFromServerAsync(Func<IEnumerable<string>, Task> submitBatches, CancellationToken cancellationToken)
{
var loggerService = LoggerService;
var exposureNotificationService = ExposureNotificationService;

if (Interlocked.Exchange(ref fetchExposureKeysIsRunning, 1) == 1)
{
Expand All @@ -148,35 +149,40 @@ public async Task FetchExposureKeyBatchFilesFromServerAsync(Func<IEnumerable<str

foreach (var serverRegion in AppSettings.Instance.SupportedRegions)
{
var lastCreated = exposureNotificationService.GetLastProcessTekTimestamp(serverRegion);
loggerService.Info($"region: {serverRegion}, lastCreated: {lastCreated}");

cancellationToken.ThrowIfCancellationRequested();

loggerService.Info("Start download files");
var (batchNumber, downloadedFiles) = await DownloadBatchAsync(serverRegion, cancellationToken);

var (batchNumber, newCreated, downloadedFiles) = await DownloadBatchAsync(serverRegion, lastCreated, cancellationToken);
loggerService.Info("End to download files");
loggerService.Info($"Batch number: {batchNumber}, Downloaded files: {downloadedFiles.Count}");
loggerService.Info($"Batch number: {batchNumber}, Downloaded files: {downloadedFiles.Count}, newCreated: {newCreated}");

if (batchNumber == 0)
if (batchNumber == 0 || newCreated == -1 || downloadedFiles.Count == 0)
{
continue;
}

if (downloadedFiles.Count > 0)
{
loggerService.Info("C19R Submit Batches");
await submitBatches(downloadedFiles);
loggerService.Info("C19R Submit Batches");
await submitBatches(downloadedFiles);

// delete all temporary files
foreach (var file in downloadedFiles)
lastCreated = newCreated;
exposureNotificationService.SetLastProcessTekTimestamp(serverRegion, lastCreated);
loggerService.Info($"region: {serverRegion}, lastCreated: {lastCreated}");

// delete all temporary files
foreach (var file in downloadedFiles)
{
try
{
try
{
File.Delete(file);
}
catch (Exception ex)
{
// no-op
loggerService.Exception("Fail to delete downloaded files", ex);
}
File.Delete(file);
}
catch (Exception ex)
{
// no-op
loggerService.Exception("Fail to delete downloaded files", ex);
}
}
}
Expand All @@ -193,7 +199,7 @@ public async Task FetchExposureKeyBatchFilesFromServerAsync(Func<IEnumerable<str
}
}

private async Task<(int, List<string>)> DownloadBatchAsync(string region, CancellationToken cancellationToken)
private async Task<(int, long, List<string>)> DownloadBatchAsync(string region, long lastCreated, CancellationToken cancellationToken)
{
var loggerService = LoggerService;
loggerService.StartMethod();
Expand All @@ -214,28 +220,24 @@ public async Task FetchExposureKeyBatchFilesFromServerAsync(Func<IEnumerable<str
loggerService.Exception("Failed to create directory", ex);
loggerService.EndMethod();
// catch error return batchnumber 0 / fileList 0
return (batchNumber, downloadedFiles);
return (batchNumber, -1, downloadedFiles);
}

var httpDataService = HttpDataService;
var exposureNotificationService = ExposureNotificationService;

List<TemporaryExposureKeyExportFileModel> tekList = await httpDataService.GetTemporaryExposureKeyList(region, cancellationToken);
if (tekList.Count == 0)
{
loggerService.EndMethod();
return (batchNumber, downloadedFiles);
return (batchNumber, -1, downloadedFiles);
}
Debug.WriteLine("C19R Fetch Exposure Key");

var lastCreated = exposureNotificationService.GetLastProcessTekTimestamp(region);
loggerService.Info($"lastCreated: {lastCreated}");

var newCreated = lastCreated;
foreach (var tekItem in tekList)
{
loggerService.Info($"tekItem.Created: {tekItem.Created}");
if (tekItem.Created > lastCreated || lastCreated == 0)
if (tekItem.Created > newCreated || newCreated == 0)
{
var tmpFile = Path.Combine(tmpDir, Guid.NewGuid().ToString() + ".zip");
Debug.WriteLine(Utils.SerializeToJson(tekItem));
Expand Down Expand Up @@ -263,12 +265,9 @@ public async Task FetchExposureKeyBatchFilesFromServerAsync(Func<IEnumerable<str
}
loggerService.Info($"Batch number: {batchNumber}, Downloaded files: {downloadedFiles.Count()}");

exposureNotificationService.SetLastProcessTekTimestamp(region, newCreated);
loggerService.Info($"region: {region}, newCreated: {newCreated}");

loggerService.EndMethod();

return (batchNumber, downloadedFiles);
return (batchNumber, newCreated, downloadedFiles);
}

// this will be called when the user is submitting a diagnosis and the local keys need to go to the server
Expand Down

0 comments on commit 43275b8

Please sign in to comment.