From 600d1b7d38eb53db8c24f6bc7069fbcc0fc783f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Kaan=20K=C3=B6se?= Date: Fri, 31 Oct 2025 12:13:54 +0100 Subject: [PATCH] Retry downloading in batches for Outlook --- .../Synchronizers/OutlookSynchronizer.cs | 85 ++++++++----------- 1 file changed, 36 insertions(+), 49 deletions(-) diff --git a/Wino.Core/Synchronizers/OutlookSynchronizer.cs b/Wino.Core/Synchronizers/OutlookSynchronizer.cs index 93e6d28e..c18340a6 100644 --- a/Wino.Core/Synchronizers/OutlookSynchronizer.cs +++ b/Wino.Core/Synchronizers/OutlookSynchronizer.cs @@ -4,7 +4,6 @@ using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.IO; using System.Linq; -using System.Net; using System.Net.Http; using System.Text; using System.Text.Json; @@ -21,8 +20,6 @@ using Microsoft.Graph.Models.ODataErrors; using Microsoft.Kiota.Abstractions; using Microsoft.Kiota.Abstractions.Authentication; using Microsoft.Kiota.Abstractions.Serialization; -using Microsoft.Kiota.Http.HttpClientLibrary.Middleware; -using Microsoft.Kiota.Http.HttpClientLibrary.Middleware.Options; using MimeKit; using MoreLinq.Extensions; using Serilog; @@ -122,14 +119,6 @@ public class OutlookSynchronizer : WinoSynchronizer a is RetryHandler); - if (existingRetryHandler != null) - handlers.Remove(existingRetryHandler); - - // Add custom one. - handlers.Add(GetRetryHandler()); - var httpClient = GraphClientFactory.Create(handlers); _graphClient = new GraphServiceClient(httpClient, new BaseBearerTokenAuthenticationProvider(tokenProvider)); @@ -141,30 +130,6 @@ public class OutlookSynchronizer : WinoSynchronizer new(); - private RetryHandler GetRetryHandler() - { - var options = new RetryHandlerOption() - { - ShouldRetry = (delay, attempt, httpResponse) => - { - var statusCode = httpResponse.StatusCode; - - return statusCode switch - { - HttpStatusCode.ServiceUnavailable => true, - HttpStatusCode.GatewayTimeout => true, - (HttpStatusCode)429 => true, - HttpStatusCode.Unauthorized => true, - _ => false - }; - }, - Delay = 3, - MaxRetry = 3 - }; - - return new RetryHandler(options); - } - #endregion @@ -193,7 +158,7 @@ public class OutlookSynchronizer : WinoSynchronizer - private async Task> DownloadMessageMetadataBatchAsync(List messageIds, MailItemFolder folder, CancellationToken cancellationToken) + private async Task> DownloadMessageMetadataBatchAsync(List messageIds, MailItemFolder folder, bool retryFailedOnce, CancellationToken cancellationToken) { if (messageIds == null || messageIds.Count == 0) return new List(); @@ -561,6 +526,10 @@ public class OutlookSynchronizer : WinoSynchronizer failedMessageIds = new(); + // Process in batches of MaximumAllowedBatchRequestSize (20) var batches = messagesToDownload.Batch((int)MaximumAllowedBatchRequestSize); @@ -623,6 +592,7 @@ public class OutlookSynchronizer : WinoSynchronizer