Compare commits

...

2 Commits

Author SHA1 Message Date
Tatyana Kostromskaya
0d1eb56adb Small refactoring 2022-06-10 11:25:57 +00:00
Tatyana Kostromskaya
fa0dd79c30 Add common retry func 2022-06-10 11:21:14 +00:00
2 changed files with 55 additions and 1 deletions

View File

@@ -13,6 +13,12 @@ using GitHub.Runner.Listener.Configuration;
using GitHub.Runner.Sdk;
using GitHub.Services.WebApi;
using Pipelines = GitHub.DistributedTask.Pipelines;
using GitHub.DistributedTask.Pipelines;
using GitHub.Services.Common;
using System.Runtime.Serialization;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
namespace GitHub.Runner.Listener
{
@@ -477,7 +483,14 @@ namespace GitHub.Runner.Listener
// todo: add retries https://github.com/github/actions-broker/issues/49
var runServer = HostContext.CreateService<IRunServer>();
await runServer.ConnectAsync(new Uri(settings.ServerUrl), creds);
var jobMessage = await runServer.GetJobMessageAsync(messageRef.RunnerRequestId);
var jobMessage = await RetriesHelper<AgentJobRequestMessage>.RetryWithTimeoutAsync(async () =>
{
return await runServer.GetJobMessageAsync(messageRef.RunnerRequestId);
},
TimeSpan.FromSeconds(5),
TimeSpan.FromSeconds(10),
5);
jobDispatcher.Run(jobMessage, runOnce);
if (runOnce)

View File

@@ -0,0 +1,41 @@
using System;
using System.ComponentModel;
using System.Threading.Tasks;
namespace GitHub.Services.Common
{
[EditorBrowsable(EditorBrowsableState.Never)]
public static class RetriesHelper<T>
{
public static async Task<T> RetryWithTimeoutAsync(
Func<Task<T>> retriableAction,
TimeSpan minBackoff,
TimeSpan maxBackoff,
int maxTimeoutMinutes = 5
)
{
var remainingTime = TimeSpan.FromMinutes(maxTimeoutMinutes);
while (true)
{
try
{
return await retriableAction();
}
catch
{
if (remainingTime > TimeSpan.Zero)
{
var backOff = BackoffTimerHelper.GetRandomBackoff(minBackoff, maxBackoff);
remainingTime -= backOff;
await Task.Delay(backOff);
}
else
{
throw;
}
}
}
}
}
}