From bd7f6524987f225f812d92323cfc62751bfa4626 Mon Sep 17 00:00:00 2001 From: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> Date: Fri, 30 Dec 2022 14:57:36 +0000 Subject: [PATCH 1/6] EventScript for when a deployment dir is cleared --- .../Components/Deployment/DmbFactory.cs | 10 ++++++++++ .../Components/Events/EventType.cs | 6 ++++++ .../Components/InstanceFactory.cs | 1 + 3 files changed, 17 insertions(+) diff --git a/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs b/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs index cb6497e3a4..d8d584a803 100644 --- a/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs +++ b/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs @@ -9,6 +9,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using Tgstation.Server.Host.Components.Deployment.Remote; +using Tgstation.Server.Host.Components.Events; using Tgstation.Server.Host.Database; using Tgstation.Server.Host.IO; using Tgstation.Server.Host.Models; @@ -53,6 +54,11 @@ namespace Tgstation.Server.Host.Components.Deployment /// readonly ILogger logger; + /// + /// The for . + /// + readonly IEventConsumer eventConsumer; + /// /// The for the . /// @@ -95,18 +101,21 @@ namespace Tgstation.Server.Host.Components.Deployment /// The value of . /// The value of . /// The value of . + /// The value of . /// The value of . public DmbFactory( IDatabaseContextFactory databaseContextFactory, IIOManager ioManager, IRemoteDeploymentManagerFactory remoteDeploymentManagerFactory, ILogger logger, + IEventConsumer eventConsumer, Api.Models.Instance metadata) { this.databaseContextFactory = databaseContextFactory ?? throw new ArgumentNullException(nameof(databaseContextFactory)); this.ioManager = ioManager ?? throw new ArgumentNullException(nameof(ioManager)); this.remoteDeploymentManagerFactory = remoteDeploymentManagerFactory ?? throw new ArgumentNullException(nameof(remoteDeploymentManagerFactory)); this.logger = logger ?? throw new ArgumentNullException(nameof(logger)); + this.eventConsumer = eventConsumer ?? throw new ArgumentNullException(nameof(eventConsumer)); this.metadata = metadata ?? throw new ArgumentNullException(nameof(metadata)); cleanupTask = Task.CompletedTask; @@ -358,6 +367,7 @@ namespace Tgstation.Server.Host.Components.Deployment try { ++deleting; + await eventConsumer.HandleEvent(EventType.DeploymentCleanedUp, new List { x }, cancellationToken); await ioManager.DeleteDirectory(x, cancellationToken); } catch (OperationCanceledException) diff --git a/src/Tgstation.Server.Host/Components/Events/EventType.cs b/src/Tgstation.Server.Host/Components/Events/EventType.cs index ba91a25f4f..dc5fea1cec 100644 --- a/src/Tgstation.Server.Host/Components/Events/EventType.cs +++ b/src/Tgstation.Server.Host/Components/Events/EventType.cs @@ -155,5 +155,11 @@ /// [EventScript("PreDreamMaker")] PreDreamMaker, + + /// + /// Whenever a deployment folder is deleted from disk. Parameters: Game directory path + /// + [EventScript("DeploymentCleanedUp")] + DeploymentCleanedUp, } } diff --git a/src/Tgstation.Server.Host/Components/InstanceFactory.cs b/src/Tgstation.Server.Host/Components/InstanceFactory.cs index ff4fc85c11..75fb2f0695 100644 --- a/src/Tgstation.Server.Host/Components/InstanceFactory.cs +++ b/src/Tgstation.Server.Host/Components/InstanceFactory.cs @@ -287,6 +287,7 @@ namespace Tgstation.Server.Host.Components gameIoManager, remoteDeploymentManagerFactory, loggerFactory.CreateLogger(), + eventConsumer, metadata); try { From 5693363d2ce4289baae92891b248ce08bc5528fb Mon Sep 17 00:00:00 2001 From: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> Date: Thu, 5 Jan 2023 19:42:10 +0000 Subject: [PATCH 2/6] Cybbtweaks --- .../Components/Deployment/DmbFactory.cs | 10 ++++++---- .../Components/Deployment/DreamMaker.cs | 1 + .../Components/Events/EventType.cs | 4 ++-- .../Components/InstanceFactory.cs | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs b/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs index d8d584a803..775c8ce270 100644 --- a/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs +++ b/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs @@ -100,22 +100,22 @@ namespace Tgstation.Server.Host.Components.Deployment /// The value of . /// The value of . /// The value of . - /// The value of . /// The value of . + /// The value of . /// The value of . public DmbFactory( IDatabaseContextFactory databaseContextFactory, IIOManager ioManager, IRemoteDeploymentManagerFactory remoteDeploymentManagerFactory, - ILogger logger, IEventConsumer eventConsumer, + ILogger logger, Api.Models.Instance metadata) { this.databaseContextFactory = databaseContextFactory ?? throw new ArgumentNullException(nameof(databaseContextFactory)); this.ioManager = ioManager ?? throw new ArgumentNullException(nameof(ioManager)); this.remoteDeploymentManagerFactory = remoteDeploymentManagerFactory ?? throw new ArgumentNullException(nameof(remoteDeploymentManagerFactory)); - this.logger = logger ?? throw new ArgumentNullException(nameof(logger)); this.eventConsumer = eventConsumer ?? throw new ArgumentNullException(nameof(eventConsumer)); + this.logger = logger ?? throw new ArgumentNullException(nameof(logger)); this.metadata = metadata ?? throw new ArgumentNullException(nameof(metadata)); cleanupTask = Task.CompletedTask; @@ -367,7 +367,7 @@ namespace Tgstation.Server.Host.Components.Deployment try { ++deleting; - await eventConsumer.HandleEvent(EventType.DeploymentCleanedUp, new List { x }, cancellationToken); + await eventConsumer.HandleEvent(EventType.DeploymentCleanup, new List { x }, cancellationToken); await ioManager.DeleteDirectory(x, cancellationToken); } catch (OperationCanceledException) @@ -400,6 +400,8 @@ namespace Tgstation.Server.Host.Components.Deployment { async Task HandleCleanup() { + // This needs to happen first + await eventConsumer.HandleEvent(EventType.DeploymentCleanup, new List { job.DirectoryName.ToString() }, cleanupCts.Token); var deleteJob = ioManager.DeleteDirectory(job.DirectoryName.ToString(), cleanupCts.Token); var remoteDeploymentManager = remoteDeploymentManagerFactory.CreateRemoteDeploymentManager( metadata, diff --git a/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs b/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs index ffb2935ac9..e8464b0d89 100644 --- a/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs +++ b/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs @@ -929,6 +929,7 @@ namespace Tgstation.Server.Host.Components.Deployment try { // DCT: None available + await eventConsumer.HandleEvent(EventType.DeploymentCleanup, new List { jobPath }, default); await ioManager.DeleteDirectory(jobPath, default); } catch (Exception e) diff --git a/src/Tgstation.Server.Host/Components/Events/EventType.cs b/src/Tgstation.Server.Host/Components/Events/EventType.cs index dc5fea1cec..f67a4bea87 100644 --- a/src/Tgstation.Server.Host/Components/Events/EventType.cs +++ b/src/Tgstation.Server.Host/Components/Events/EventType.cs @@ -159,7 +159,7 @@ /// /// Whenever a deployment folder is deleted from disk. Parameters: Game directory path /// - [EventScript("DeploymentCleanedUp")] - DeploymentCleanedUp, + [EventScript("DeploymentCleanup")] + DeploymentCleanup, } } diff --git a/src/Tgstation.Server.Host/Components/InstanceFactory.cs b/src/Tgstation.Server.Host/Components/InstanceFactory.cs index 75fb2f0695..1bb8121c9d 100644 --- a/src/Tgstation.Server.Host/Components/InstanceFactory.cs +++ b/src/Tgstation.Server.Host/Components/InstanceFactory.cs @@ -286,8 +286,8 @@ namespace Tgstation.Server.Host.Components databaseContextFactory, gameIoManager, remoteDeploymentManagerFactory, - loggerFactory.CreateLogger(), eventConsumer, + loggerFactory.CreateLogger(), metadata); try { From c4f05dcb07db9d9510f9b071ffa464af4e12a1c5 Mon Sep 17 00:00:00 2001 From: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> Date: Fri, 20 Jan 2023 20:17:23 +0000 Subject: [PATCH 3/6] I think I did it --- .../Components/Deployment/DmbFactory.cs | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs b/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs index 775c8ce270..ebec279d77 100644 --- a/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs +++ b/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs @@ -75,7 +75,7 @@ namespace Tgstation.Server.Host.Components.Deployment readonly IDictionary jobLockCounts; /// - /// representing calls to . + /// representing calls to . /// Task cleanupTask; @@ -254,7 +254,7 @@ namespace Tgstation.Server.Host.Components.Deployment void CleanupAction() { if (providerSubmitted) - CleanJob(compileJob); + CleanRegisteredCompileJob(compileJob); } var newProvider = new DmbProvider(compileJob, ioManager, CleanupAction); @@ -367,8 +367,7 @@ namespace Tgstation.Server.Host.Components.Deployment try { ++deleting; - await eventConsumer.HandleEvent(EventType.DeploymentCleanup, new List { x }, cancellationToken); - await ioManager.DeleteDirectory(x, cancellationToken); + await DeleteCompileJobContent(x, cancellationToken); } catch (OperationCanceledException) { @@ -396,21 +395,19 @@ namespace Tgstation.Server.Host.Components.Deployment /// Delete the of . /// /// The to clean. - void CleanJob(CompileJob job) + void CleanRegisteredCompileJob(CompileJob job) { async Task HandleCleanup() { - // This needs to happen first - await eventConsumer.HandleEvent(EventType.DeploymentCleanup, new List { job.DirectoryName.ToString() }, cleanupCts.Token); - var deleteJob = ioManager.DeleteDirectory(job.DirectoryName.ToString(), cleanupCts.Token); - var remoteDeploymentManager = remoteDeploymentManagerFactory.CreateRemoteDeploymentManager( - metadata, - job); + // First kill the GitHub deployment + var remoteDeploymentManager = remoteDeploymentManagerFactory.CreateRemoteDeploymentManager(metadata, job); // DCT: None available var deploymentJob = remoteDeploymentManager.MarkInactive(job, default); + + var deleteTask = DeleteCompileJobContent(job.DirectoryName.ToString(), cleanupCts.Token); var otherTask = cleanupTask; - await Task.WhenAll(otherTask, deleteJob, deploymentJob); + await Task.WhenAll(otherTask, deleteTask, deploymentJob); } lock (jobLockCounts) @@ -426,5 +423,18 @@ namespace Tgstation.Server.Host.Components.Deployment logger.LogTrace("Compile job {0} lock count now: {1}", job.Id, decremented); } } + + /// + /// Handles cleaning the resources of a . + /// + /// The directory to cleanup. + /// The for this . + /// The deletion task + async Task DeleteCompileJobContent(string directory, CancellationToken cancellationToken) + { + // Then call the cleanup event, waiting here first + await eventConsumer.HandleEvent(EventType.DeploymentCleanup, new List { directory }, cancellationToken); + await ioManager.DeleteDirectory(directory, cancellationToken); + } } } From fce2288afd00a59026ab1bd326fba7cf226be3c5 Mon Sep 17 00:00:00 2001 From: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> Date: Fri, 20 Jan 2023 20:43:40 +0000 Subject: [PATCH 4/6] AAAAAAAAA --- src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs b/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs index ebec279d77..c3d56bfd60 100644 --- a/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs +++ b/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs @@ -429,7 +429,7 @@ namespace Tgstation.Server.Host.Components.Deployment /// /// The directory to cleanup. /// The for this . - /// The deletion task + /// The deletion task. async Task DeleteCompileJobContent(string directory, CancellationToken cancellationToken) { // Then call the cleanup event, waiting here first From 719aa44b463dc2070d6939bd0e0125b47b995f93 Mon Sep 17 00:00:00 2001 From: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> Date: Fri, 20 Jan 2023 21:34:26 +0000 Subject: [PATCH 5/6] lol --- src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs b/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs index c3d56bfd60..981698834a 100644 --- a/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs +++ b/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs @@ -429,7 +429,7 @@ namespace Tgstation.Server.Host.Components.Deployment /// /// The directory to cleanup. /// The for this . - /// The deletion task. + /// The deletion . async Task DeleteCompileJobContent(string directory, CancellationToken cancellationToken) { // Then call the cleanup event, waiting here first From 914d25d4dbecf107d8883180c38464f046013720 Mon Sep 17 00:00:00 2001 From: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> Date: Sat, 21 Jan 2023 14:35:04 +0000 Subject: [PATCH 6/6] Update src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs Co-authored-by: Jordan Dominion --- src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs b/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs index 981698834a..e2f9fd442a 100644 --- a/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs +++ b/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs @@ -433,7 +433,7 @@ namespace Tgstation.Server.Host.Components.Deployment async Task DeleteCompileJobContent(string directory, CancellationToken cancellationToken) { // Then call the cleanup event, waiting here first - await eventConsumer.HandleEvent(EventType.DeploymentCleanup, new List { directory }, cancellationToken); + await eventConsumer.HandleEvent(EventType.DeploymentCleanup, new List { ioManager.ResolvePath(directory) }, cancellationToken); await ioManager.DeleteDirectory(directory, cancellationToken); } }