From 4d8ef28976933c0f0117b3b322988b357313f43a Mon Sep 17 00:00:00 2001 From: Sven Urbanski Date: Fri, 4 Oct 2024 14:56:29 +0200 Subject: [PATCH] fix: consider deleted release in delete env from app When there was a deleted release, deleteEnvFromApp would crash. Ref: SRX-YNEAHU --- pkg/db/db.go | 18 ++++++++++++++++++ .../cd-service/pkg/repository/transformer.go | 6 +++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/pkg/db/db.go b/pkg/db/db.go index bc2548946d..070699df52 100644 --- a/pkg/db/db.go +++ b/pkg/db/db.go @@ -680,6 +680,24 @@ func (h *DBHandler) processReleaseManifestRows(ctx context.Context, err error, r return result, nil } +func (h *DBHandler) DBSelectReleasesByAppIncludingDeleted(ctx context.Context, tx *sql.Tx, app string, ignorePrepublishes bool) ([]*DBReleaseWithMetaData, error) { + span, ctx := tracer.StartSpanFromContext(ctx, "DBSelectReleasesByApp") + defer span.Finish() + selectQuery := h.AdaptQuery(fmt.Sprintf( + "SELECT eslVersion, created, appName, metadata, manifests, releaseVersion, deleted " + + " FROM releases " + + " WHERE appName=? " + + " ORDER BY releaseVersion DESC, eslVersion DESC, created DESC;")) + span.SetTag("query", selectQuery) + rows, err := tx.QueryContext( + ctx, + selectQuery, + app, + ) + + return h.processReleaseRows(ctx, err, rows, ignorePrepublishes) +} + func (h *DBHandler) DBSelectReleasesByApp(ctx context.Context, tx *sql.Tx, app string, deleted bool, ignorePrepublishes bool) ([]*DBReleaseWithMetaData, error) { span, ctx := tracer.StartSpanFromContext(ctx, "DBSelectReleasesByApp") defer span.Finish() diff --git a/services/cd-service/pkg/repository/transformer.go b/services/cd-service/pkg/repository/transformer.go index 3a07da84ab..eab08f453b 100644 --- a/services/cd-service/pkg/repository/transformer.go +++ b/services/cd-service/pkg/repository/transformer.go @@ -1689,12 +1689,16 @@ func (u *DeleteEnvFromApp) Transform( return "", err } if state.DBHandler.ShouldUseOtherTables() { - releases, err := state.DBHandler.DBSelectReleasesByApp(ctx, transaction, u.Application, false, true) + releases, err := state.DBHandler.DBSelectReleasesByAppIncludingDeleted(ctx, transaction, u.Application, true) if err != nil { return "", err } for _, dbReleaseWithMetadata := range releases { + if dbReleaseWithMetadata.Deleted { + // the release is already deleted, so we can skip it + continue + } newManifests := make(map[string]string) for envName, manifest := range dbReleaseWithMetadata.Manifests.Manifests { if envName != u.Environment {