Skip to content

Commit ba904df

Browse files
jreynard-codelalepee
authored andcommitted
feat: add configuration for scheduled runner cleanup task with delay customization
1 parent e16f97a commit ba904df

8 files changed

Lines changed: 62 additions & 29 deletions

File tree

api/src/integrationTest/kotlin/com/cosmotech/api/home/runner/RunnerControllerTests.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,7 @@ class RunnerControllerTests : ControllerTestBase() {
636636
@Test
637637
fun delete_runner() {
638638
val expectedRunId = "run-genid12345"
639-
every { eventPublisher.publishEvent(match { it is RunStart }) } answers
639+
every { eventPublisher.publishEvent(any<RunStart>()) } answers
640640
{
641641
firstArg<RunStart>().response = expectedRunId
642642
}

api/src/main/resources/application.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,10 @@ csm:
155155
host: localhost:5000
156156
username: csmenginesdev
157157
password: "my_registry_password"
158+
tasks:
159+
cleanUpArchivedRunners:
160+
enabled: true
161+
delay: 300
158162

159163
springdoc:
160164
# See https://springdoc.org/#properties

common/src/main/kotlin/com/cosmotech/common/config/CsmPlatformProperties.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,23 @@ data class CsmPlatformProperties(
4343

4444
/** Persistent metrics configuration */
4545
val metrics: Metrics = Metrics(),
46+
47+
/** Tasks configuration */
48+
val tasks: CsmTasks = CsmTasks(),
4649
) {
4750

51+
data class CsmTasks(
52+
/** Clean up archived runners task */
53+
val cleanUpArchivedRunners: CsmTask = CsmTask()
54+
) {
55+
data class CsmTask(
56+
/** Enabled or disabled the task */
57+
val enabled: Boolean = true,
58+
/** Fixed delay in seconds (default 5min) */
59+
val delay: Long = 300,
60+
)
61+
}
62+
4863
data class Metrics(
4964
/** Enable Metrics service */
5065
val enabled: Boolean = true,

runner/src/integrationTest/kotlin/com/cosmotech/runner/service/RunnerServiceIntegrationTest.kt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import com.cosmotech.runner.RunnerApiServiceInterface
4141
import com.cosmotech.runner.domain.*
4242
import com.cosmotech.runner.domain.ResourceSizeInfo
4343
import com.cosmotech.runner.domain.RunnerRole
44-
import com.cosmotech.runner.scheduled.RunnerScheduledTasks
44+
import com.cosmotech.runner.tasks.RunnerScheduledTasks
4545
import com.cosmotech.solution.SolutionApiServiceInterface
4646
import com.cosmotech.solution.domain.*
4747
import com.cosmotech.workspace.WorkspaceApiServiceInterface
@@ -161,7 +161,7 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
161161
every { getCurrentAccountGroups(any()) } returns listOf("myTestGroup")
162162
every { getCurrentAuthenticatedUserName(csmPlatformProperties) } returns "test.user"
163163
every { getCurrentAuthenticatedRoles(any()) } returns listOf(ROLE_ORGANIZATION_USER)
164-
every { eventPublisher.publishEvent(match { it is RunStart }) } answers
164+
every { eventPublisher.publishEvent(any<RunStart>()) } answers
165165
{
166166
firstArg<RunStart>().response = GEN_RUN_ID
167167
}
@@ -435,11 +435,11 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
435435
logger.info("should delete the Runner and assert there is one less Runner left")
436436
runnerApiService.deleteRunner(organizationSaved.id, workspaceSaved.id, newRunnerSaved.id)
437437
// force trigger scheduled cleanup
438-
every { eventPublisher.publishEvent(match { it is UpdateRunnerStatus }) } answers
438+
every { eventPublisher.publishEvent(any<UpdateRunnerStatus>()) } answers
439439
{
440440
firstArg<UpdateRunnerStatus>().response = "Successful"
441441
}
442-
every { eventPublisher.publishEvent(match { it is CleanUpRun }) } answers
442+
every { eventPublisher.publishEvent(any<CleanUpRun>()) } answers
443443
{
444444
firstArg<CleanUpRun>().response = true
445445
}
@@ -994,7 +994,7 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
994994
RunnerUpdateRequest(),
995995
)
996996

997-
every { eventPublisher.publishEvent(match { it is HasRunningRuns }) } answers
997+
every { eventPublisher.publishEvent(any<HasRunningRuns>()) } answers
998998
{
999999
firstArg<HasRunningRuns>().response = true
10001000
}
@@ -1015,11 +1015,11 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
10151015
fun `test on runner delete keep bases datasets but not parameters dataset`() {
10161016
runnerApiService.deleteRunner(organizationSaved.id, workspaceSaved.id, runnerSaved.id)
10171017
// force trigger scheduled cleanup
1018-
every { eventPublisher.publishEvent(match { it is UpdateRunnerStatus }) } answers
1018+
every { eventPublisher.publishEvent(any<UpdateRunnerStatus>()) } answers
10191019
{
10201020
firstArg<UpdateRunnerStatus>().response = "Successful"
10211021
}
1022-
every { eventPublisher.publishEvent(match { it is CleanUpRun }) } answers
1022+
every { eventPublisher.publishEvent(any<CleanUpRun>()) } answers
10231023
{
10241024
firstArg<CleanUpRun>().response = true
10251025
}
@@ -1850,7 +1850,7 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
18501850
@Test
18511851
fun `test getRunner when runner has been stopped`() {
18521852

1853-
every { eventPublisher.publishEvent(match { it is UpdateRunnerStatus }) } answers
1853+
every { eventPublisher.publishEvent(any<UpdateRunnerStatus>()) } answers
18541854
{
18551855
firstArg<UpdateRunnerStatus>().response = "Running"
18561856
} andThenAnswer
@@ -1871,7 +1871,7 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
18711871

18721872
@Test
18731873
fun `test to stop a runner when is already finished but lastRunInfo is not updated to Successful`() {
1874-
every { eventPublisher.publishEvent(match { it is UpdateRunnerStatus }) } answers
1874+
every { eventPublisher.publishEvent(any<UpdateRunnerStatus>()) } answers
18751875
{
18761876
firstArg<UpdateRunnerStatus>().response = "Successful"
18771877
}
@@ -1885,7 +1885,7 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
18851885

18861886
@Test
18871887
fun `test to stop a runner when is already finished but lastRunInfo is not updated to Failed`() {
1888-
every { eventPublisher.publishEvent(match { it is UpdateRunnerStatus }) } answers
1888+
every { eventPublisher.publishEvent(any<UpdateRunnerStatus>()) } answers
18891889
{
18901890
firstArg<UpdateRunnerStatus>().response = "Failed"
18911891
}

runner/src/integrationTest/kotlin/com/cosmotech/runner/service/RunnerServiceRBACTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ class RunnerServiceRBACTest : CsmTestBase() {
115115
containerRegistryService,
116116
)
117117
every { containerRegistryService.getImageLabel(any(), any(), any()) } returns null
118-
every { eventPublisher.publishEvent(match { it is RunStart }) } answers
118+
every { eventPublisher.publishEvent(any<RunStart>()) } answers
119119
{
120120
firstArg<RunStart>().response = "run-gen12345"
121121
}

runner/src/integrationTest/resources/application-runner-test.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,3 +127,6 @@ csm:
127127
accessKeyId: "s3_username"
128128
secretAccessKey: "s3_password"
129129
region: "dummy"
130+
tasks:
131+
cleanUpArchivedRunners:
132+
enabled: true

runner/src/main/kotlin/com/cosmotech/runner/scheduled/RunnerScheduledTasks.kt

Lines changed: 0 additions & 17 deletions
This file was deleted.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Copyright (c) Cosmo Tech.
2+
// Licensed under the MIT license.
3+
package com.cosmotech.runner.tasks
4+
5+
import com.cosmotech.runner.service.RunnerService
6+
import java.util.concurrent.TimeUnit
7+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
8+
import org.springframework.scheduling.annotation.Scheduled
9+
import org.springframework.stereotype.Component
10+
11+
@Component
12+
@ConditionalOnProperty(
13+
name = ["csm.platform.tasks.cleanUpArchivedRunners.enabled"],
14+
havingValue = "true",
15+
matchIfMissing = false,
16+
)
17+
class RunnerScheduledTasks(
18+
private val runnerService: RunnerService,
19+
) {
20+
21+
@Scheduled(
22+
timeUnit = TimeUnit.SECONDS,
23+
fixedDelayString = "\${csm.platform.tasks.cleanUpArchivedRunners.delay}",
24+
)
25+
fun cleanupArchivedRunners() {
26+
runnerService.cleanupArchived()
27+
}
28+
}

0 commit comments

Comments
 (0)