From 93fdf9ffe7766d2b4d00e55acbaa024fbd4bdba1 Mon Sep 17 00:00:00 2001 From: Juan Godfrid <124616594+juangod-wise@users.noreply.github.com> Date: Tue, 9 Apr 2024 17:36:13 +0100 Subject: [PATCH 1/2] fix(SqlExecutionRepository): fixed bug in sql repository in orca-sql module --- .../sql/pipeline/persistence/SqlExecutionRepository.kt | 10 +++++++--- ...dPipelineCleanupPollingNotificationAgentSpec.groovy | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/orca-sql/src/main/kotlin/com/netflix/spinnaker/orca/sql/pipeline/persistence/SqlExecutionRepository.kt b/orca-sql/src/main/kotlin/com/netflix/spinnaker/orca/sql/pipeline/persistence/SqlExecutionRepository.kt index fbced65724..59f8e35756 100644 --- a/orca-sql/src/main/kotlin/com/netflix/spinnaker/orca/sql/pipeline/persistence/SqlExecutionRepository.kt +++ b/orca-sql/src/main/kotlin/com/netflix/spinnaker/orca/sql/pipeline/persistence/SqlExecutionRepository.kt @@ -1105,12 +1105,16 @@ class SqlExecutionRepository( type, conditions = { if (cursor == null) { - it.where("1=1") + if (where == null) { + it.where("1=1") + } else { + where(it) + } } else { if (where == null) { - it.where(field("id").gt(cursor)) + it.where(field("id").lt(cursor)) } else { - where(it).and(field("id").gt(cursor)) + where(it).and(field("id").lt(cursor)) } } }, diff --git a/orca-sql/src/test/groovy/com/netflix/spinnaker/orca/sql/cleanup/OldPipelineCleanupPollingNotificationAgentSpec.groovy b/orca-sql/src/test/groovy/com/netflix/spinnaker/orca/sql/cleanup/OldPipelineCleanupPollingNotificationAgentSpec.groovy index 2636d202d8..2a2f1cb6f1 100644 --- a/orca-sql/src/test/groovy/com/netflix/spinnaker/orca/sql/cleanup/OldPipelineCleanupPollingNotificationAgentSpec.groovy +++ b/orca-sql/src/test/groovy/com/netflix/spinnaker/orca/sql/cleanup/OldPipelineCleanupPollingNotificationAgentSpec.groovy @@ -100,7 +100,7 @@ abstract class OldPipelineCleanupPollingNotificationAgentSpec extends Specificat def allExecutions = executionRepository.retrievePipelinesForApplication(app).toList().toBlocking().first().unique() then: - allExecutions.size() == 10 + allExecutions.size() == 12 when: cleanupAgent.tick() @@ -125,7 +125,7 @@ abstract class OldPipelineCleanupPollingNotificationAgentSpec extends Specificat def allExecutions = executionRepository.retrievePipelinesForApplication(app).toList().toBlocking().first().unique() then: - allExecutions.size() == 10 + allExecutions.size() == 12 when: cleanupAgent.tick() From 42081af6a7d4169569a9b0ef21d58b3f7f1b63c6 Mon Sep 17 00:00:00 2001 From: David Byron Date: Mon, 15 Apr 2024 09:26:07 -0700 Subject: [PATCH 2/2] test(sql): demonstrate behavior of retrievePipelinesForApplication which also verifies the behavior of selectExections when cursor is null --- .../persistence/SqlExecutionRepositoryTest.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/orca-sql/src/test/kotlin/com/netflix/spinnaker/orca/sql/pipeline/persistence/SqlExecutionRepositoryTest.kt b/orca-sql/src/test/kotlin/com/netflix/spinnaker/orca/sql/pipeline/persistence/SqlExecutionRepositoryTest.kt index d0007e87d6..e48209448d 100644 --- a/orca-sql/src/test/kotlin/com/netflix/spinnaker/orca/sql/pipeline/persistence/SqlExecutionRepositoryTest.kt +++ b/orca-sql/src/test/kotlin/com/netflix/spinnaker/orca/sql/pipeline/persistence/SqlExecutionRepositoryTest.kt @@ -244,6 +244,21 @@ class SqlExecutionRepositoryTest : JUnit5Minutests { assertThat(actualPipelineExecution).isEqualTo(pipelineExecution) } } + + context("retrievePipelinesForApplication") { + val pipelineExecution1 = PipelineExecutionImpl(ExecutionType.PIPELINE, "application-1") + val pipelineExecution2 = PipelineExecutionImpl(ExecutionType.PIPELINE, "application-2") + + test("correctly use where clause") { + // Store pipelines in two different applications + sqlExecutionRepository.store(pipelineExecution1) + sqlExecutionRepository.store(pipelineExecution2) + + val observable = sqlExecutionRepository.retrievePipelinesForApplication("application-2") + val executions = observable.toList().toBlocking().single() + assertThat(executions.map(PipelineExecution::getApplication).single()).isEqualTo("application-2") + } + } } private inner class Fixture {