Skip to content

Commit d9a6d6f

Browse files
harden responses
1 parent 8fa73ab commit d9a6d6f

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

PoolManager.cs

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
9393
{
9494
_logger.LogInformation("Cleaning runners...");
9595

96+
var staleRemoved = _queues.CreatedRunners.RemoveStale(TimeSpan.FromMinutes(15));
97+
if (staleRemoved > 0)
98+
_logger.LogWarning("Removed {Count} stale entries from CreatedRunnersTracking", staleRemoved);
99+
96100
var checkInId = SentrySdk.CaptureCheckIn("CheckForStuckRunners", CheckInStatus.InProgress);
97101
try
98102
{
@@ -106,13 +110,25 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
106110
SentrySdk.CaptureException(ex);
107111
}
108112

109-
await CleanUpRunners(targetConfig);
110-
111-
await StartPoolRunners(targetConfig);
113+
try
114+
{
115+
await CleanUpRunners(targetConfig);
116+
}
117+
catch (Exception ex)
118+
{
119+
_logger.LogError($"Unable to clean up runners: {ex.GetFullExceptionDetails()}");
120+
SentrySdk.CaptureException(ex);
121+
}
112122

113-
var staleRemoved = _queues.CreatedRunners.RemoveStale(TimeSpan.FromMinutes(30));
114-
if (staleRemoved > 0)
115-
_logger.LogWarning("Removed {Count} stale entries from CreatedRunnersTracking", staleRemoved);
123+
try
124+
{
125+
await StartPoolRunners(targetConfig);
126+
}
127+
catch (Exception ex)
128+
{
129+
_logger.LogError($"Unable to start pool runners: {ex.GetFullExceptionDetails()}");
130+
SentrySdk.CaptureException(ex);
131+
}
116132

117133
await CheckForStuckJobs(targetConfig);
118134

Program.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,12 @@ private static async Task<IResult> RunnerStateReportHandler(HttpRequest request,
459459
{
460460
await using var db = new ActionsRunnerContext();
461461
var runner = await db.Runners.Include(x => x.Lifecycle).Include(x => x.Job).FirstOrDefaultAsync(x => x.Hostname == hostname);
462+
if (runner == null)
463+
{
464+
logger.LogError("Runner {Hostname} not found in database during state report ({State}). Removing tracking entry.", hostname, state);
465+
runnerQueue.CreatedRunners.Remove(hostname, out _);
466+
return Results.StatusCode(404);
467+
}
462468
switch (state)
463469
{
464470
case "ok":
@@ -560,6 +566,10 @@ private static async Task<IResult> RunnerStateReportHandler(HttpRequest request,
560566
await db.SaveChangesAsync();
561567
}
562568

569+
break;
570+
default:
571+
logger.LogWarning("Runner {Hostname} reported unknown state '{State}'. Removing tracking entry.", hostname, state);
572+
runnerQueue.CreatedRunners.Remove(hostname, out _);
563573
break;
564574
}
565575

0 commit comments

Comments
 (0)