From 5a1ad8d741e899632a02e0bedcc06fe049006108 Mon Sep 17 00:00:00 2001 From: Evan Anderson Date: Wed, 6 Dec 2023 12:17:45 -0800 Subject: [PATCH] Avoid attempting to lock other deleted resources (#1835) * Avoid attempting to lock other deleted resources * 'Fix' cyclomatic complexity warning --- internal/eea/eea.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/internal/eea/eea.go b/internal/eea/eea.go index ebb24378ce..314a42d316 100644 --- a/internal/eea/eea.go +++ b/internal/eea/eea.go @@ -76,6 +76,7 @@ func (e *EEA) AggregateMiddleware(h message.HandlerFunc) message.HandlerFunc { } } +// nolint:gocyclo // TODO: hacking in the TODO about foreign keys pushed this over the limit. func (e *EEA) aggregate(msg *message.Message) (*message.Message, error) { ctx := msg.Context() inf, err := engine.ParseEntityEvent(msg) @@ -91,13 +92,29 @@ func (e *EEA) aggregate(msg *message.Message) (*message.Message, error) { Str("repository_id", repoID.String()) // We need to check that the resources still exist before attempting to lock them. - // TODO: handle artifact_id and pull_request_id or refactor this to remove the foreign keys. + // TODO: consider whether we need foreign key checks on the locks. if _, err := e.querier.GetRepositoryByID(ctx, repoID); err != nil { if errors.Is(err, sql.ErrNoRows) { logger.Msg("Skipping event because repository no longer exists") return nil, nil } } + if artifactID.Valid { + if _, err := e.querier.GetArtifactByID(ctx, artifactID.UUID); err != nil { + if errors.Is(err, sql.ErrNoRows) { + logger.Msg("Skipping event because artifact no longer exists") + return nil, nil + } + } + } + if pullRequestID.Valid { + if _, err := e.querier.GetPullRequestByID(ctx, pullRequestID.UUID); err != nil { + if errors.Is(err, sql.ErrNoRows) { + logger.Msg("Skipping event because pull request no longer exists") + return nil, nil + } + } + } res, err := e.querier.LockIfThresholdNotExceeded(ctx, db.LockIfThresholdNotExceededParams{ Entity: entities.EntityTypeToDB(inf.Type),