Skip to content

Commit d9177f9

Browse files
fix deletion
1 parent a63e738 commit d9177f9

File tree

1 file changed

+31
-9
lines changed

1 file changed

+31
-9
lines changed

PoolManager.cs

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -171,23 +171,45 @@ private async Task CleanupDatabase()
171171

172172
if (oldRunnerIds.Count > 0)
173173
{
174+
_logger.LogInformation($"Removing {oldRunnerIds.Count} runners older than 30 days from database");
175+
176+
// Delete RunnerLifecycles first (they reference runners)
177+
var oldLifecycles = await db.RunnerLifecycles.Where(rl => oldRunnerIds.Contains(rl.RunnerId)).ToListAsync();
178+
db.RunnerLifecycles.RemoveRange(oldLifecycles);
179+
await db.SaveChangesAsync();
180+
181+
// Break circular dependencies by nulling out foreign keys
174182
var oldRunners = await db.Runners.Where(r => oldRunnerIds.Contains(r.RunnerId)).ToListAsync();
175-
_logger.LogInformation($"Removing {oldRunners.Count} runners older than 30 days from database");
183+
var oldJobs = await db.Jobs.Where(j => oldRunnerIds.Contains(j.RunnerId.Value)).ToListAsync();
184+
185+
// Null out the foreign keys to break circular reference
186+
foreach (var runner in oldRunners)
187+
{
188+
runner.JobId = null;
189+
}
190+
foreach (var job in oldJobs)
191+
{
192+
job.RunnerId = null;
193+
}
194+
await db.SaveChangesAsync();
195+
196+
// Now delete the runners and jobs
176197
db.Runners.RemoveRange(oldRunners);
198+
db.Jobs.RemoveRange(oldJobs);
199+
await db.SaveChangesAsync();
177200
}
178201

179-
// Remove old jobs - only remove completed jobs older than 30 days
180-
var oldJobs = await db.Jobs
181-
.Where(j => j.CompleteTime < cutoffTime && j.CompleteTime != DateTime.MinValue)
202+
// Remove old completed jobs - only remove completed jobs older than 30 days
203+
var oldCompletedJobs = await db.Jobs
204+
.Where(j => j.CompleteTime < cutoffTime && j.CompleteTime != DateTime.MinValue && j.RunnerId == null)
182205
.ToListAsync();
183206

184-
if (oldJobs.Count > 0)
207+
if (oldCompletedJobs.Count > 0)
185208
{
186-
_logger.LogInformation($"Removing {oldJobs.Count} jobs older than 30 days from database");
187-
db.Jobs.RemoveRange(oldJobs);
209+
_logger.LogInformation($"Removing {oldCompletedJobs.Count} completed jobs older than 30 days from database");
210+
db.Jobs.RemoveRange(oldCompletedJobs);
211+
await db.SaveChangesAsync();
188212
}
189-
190-
await db.SaveChangesAsync();
191213
}
192214

193215
private async Task CheckForStuckRunners(List<GithubTargetConfiguration> targetConfig)

0 commit comments

Comments
 (0)