Skip to content

Commit 51cfc1d

Browse files
limit stuck job creation and make private networking optional
1 parent 7c65f09 commit 51cfc1d

8 files changed

Lines changed: 255 additions & 15 deletions

CloudController.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ private async Task<string> GenerateName()
6464
return name;
6565
}
6666

67-
public async Task<Machine> CreateNewRunner(string arch, string size, string runnerToken, string targetName, bool isCustom = false, string profileName = "default")
67+
public async Task<Machine> CreateNewRunner(string arch, string size, string runnerToken, string targetName, bool isCustom = false, string profileName = "default", bool usePrivateNetworks = false)
6868
{
6969

7070
// Select VM size for job - All AMD
@@ -164,7 +164,9 @@ public async Task<Machine> CreateNewRunner(string arch, string size, string runn
164164
}
165165
try
166166
{
167-
newSrv = await _client.Server.Create(dataCenters[ct], imageId.Value, name, srvType.Value, userData: cloudInitcontent, sshKeysIds: srvKeys, privateNetoworksIds: networks.Select(x => x.Id).ToList());
167+
var privateNetworks = usePrivateNetworks ? networks.Select(x => x.Id).ToList() : new List<long>();
168+
169+
newSrv = await _client.Server.Create(dataCenters[ct], imageId.Value, name, srvType.Value, userData: cloudInitcontent, sshKeysIds: srvKeys, privateNetoworksIds: privateNetworks);
168170
success = true;
169171
}
170172
catch (Exception ex)

Database/DbContext.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ public DateTime LastStateTime
108108
}
109109

110110
public bool StuckJobReplacement { get; set; } = false;
111+
public bool UsePrivateNetwork { get; set; }
111112
}
112113

113114
public enum RunnerStatus

Migrations/20241030082800_add-private-net-flag.Designer.cs

Lines changed: 194 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using Microsoft.EntityFrameworkCore.Migrations;
2+
3+
#nullable disable
4+
5+
namespace GithubActionsOrchestrator.Migrations
6+
{
7+
/// <inheritdoc />
8+
public partial class addprivatenetflag : Migration
9+
{
10+
/// <inheritdoc />
11+
protected override void Up(MigrationBuilder migrationBuilder)
12+
{
13+
migrationBuilder.AddColumn<bool>(
14+
name: "UsePrivateNetwork",
15+
table: "Runners",
16+
type: "boolean",
17+
nullable: false,
18+
defaultValue: false);
19+
}
20+
21+
/// <inheritdoc />
22+
protected override void Down(MigrationBuilder migrationBuilder)
23+
{
24+
migrationBuilder.DropColumn(
25+
name: "UsePrivateNetwork",
26+
table: "Runners");
27+
}
28+
}
29+
}

Migrations/ActionsRunnerContextModelSnapshot.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,9 @@ protected override void BuildModel(ModelBuilder modelBuilder)
118118
b.Property<bool>("StuckJobReplacement")
119119
.HasColumnType("boolean");
120120

121+
b.Property<bool>("UsePrivateNetwork")
122+
.HasColumnType("boolean");
123+
121124
b.HasKey("RunnerId");
122125

123126
b.HasIndex("JobId")

Models/CreateRunnerTask.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ public record CreateRunnerTask
99
public TargetType TargetType { get; set; }
1010
public string RepoName { get; set; }
1111
public int RunnerDbId { get; set; }
12+
public bool IsStuckReplacement { get; set; }
1213
}

PoolManager.cs

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,14 @@ private async Task CheckForStuckJobs(List<GithubTargetConfiguration> targetConfi
266266
_logger.LogError($"Unable to get owner for stuck job. {stuckJob.JobId}");
267267
continue;
268268
}
269-
269+
int replacementsInQueue = _queues.CreateTasks.Count(x => x.IsStuckReplacement);
270+
271+
if (replacementsInQueue > 25)
272+
{
273+
_logger.LogWarning($"Creating queue already has {replacementsInQueue} stuck jobs replacements. No adding more strain");
274+
continue;
275+
}
276+
270277
string runnerToken = owner.Target switch
271278
{
272279
TargetType.Repository => await GitHubApi.GetRunnerTokenForRepo(owner.GitHubToken, owner.Name),
@@ -300,15 +307,15 @@ private async Task CheckForStuckJobs(List<GithubTargetConfiguration> targetConfi
300307
};
301308
await db.Runners.AddAsync(newRunner);
302309
await db.SaveChangesAsync();
303-
304-
_queues.CreateTasks.Enqueue(new CreateRunnerTask
305-
{
306-
RunnerToken = runnerToken,
307-
RepoName = stuckJob.Repository,
308-
TargetType = owner.Target,
309-
RunnerDbId = newRunner.RunnerId,
310-
311-
});
310+
311+
_queues.CreateTasks.Enqueue(new CreateRunnerTask
312+
{
313+
RunnerToken = runnerToken,
314+
RepoName = stuckJob.Repository,
315+
TargetType = owner.Target,
316+
RunnerDbId = newRunner.RunnerId,
317+
IsStuckReplacement = true
318+
});
312319
}
313320
}
314321

@@ -543,7 +550,7 @@ private async Task<bool> CreateRunner(CreateRunnerTask rt)
543550
TargetType.Organization => runner.Owner,
544551
_ => throw new ArgumentOutOfRangeException()
545552
};
546-
Machine newRunner = await _cc.CreateNewRunner(runner.Arch, runner.Size, rt.RunnerToken, targetName, runner.IsCustom, runner.Profile);
553+
Machine newRunner = await _cc.CreateNewRunner(runner.Arch, runner.Size, rt.RunnerToken, targetName, runner.IsCustom, runner.Profile, runner.UsePrivateNetwork);
547554
_logger.LogInformation($"New Runner {newRunner.Name} [{runner.Size} on {runner.Arch}] entering pool for {targetName}.");
548555
MachineCreatedCount.Labels(runner.Owner, runner.Size).Inc();
549556

Program.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,9 @@ private static async Task<IResult> RunnerStateReportHandler(HttpRequest request,
340340
Arch = runner.Arch,
341341
IPv4 = string.Empty,
342342
IsCustom = runner.IsCustom,
343-
Owner = runner.Owner
343+
Owner = runner.Owner,
344+
UsePrivateNetwork = runner.UsePrivateNetwork
345+
344346

345347
};
346348
await db.Runners.AddAsync(newRunner);
@@ -630,7 +632,8 @@ private static async Task JobQueued(ILogger<Program> logger, string repoName, Li
630632
Arch = arch,
631633
IPv4 = string.Empty,
632634
IsCustom = isCustom,
633-
Owner = owner
635+
Owner = owner,
636+
UsePrivateNetwork = labels.Contains("use-cache-server")
634637

635638
};
636639
await db.Runners.AddAsync(newRunner);

0 commit comments

Comments
 (0)