Skip to content

Commit 8d4f75e

Browse files
authored
fix(cdn): deduplicate run-result on getItems (#5841)
1 parent a28bde4 commit 8d4f75e

File tree

3 files changed

+27
-4
lines changed

3 files changed

+27
-4
lines changed

engine/cdn/item/dao.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -319,8 +319,20 @@ func LoadOldItemByStatusAndDuration(ctx context.Context, m *gorpmapper.Mapper, d
319319
return getItems(ctx, m, db, query, opts...)
320320
}
321321

322-
func LoadByRunID(ctx context.Context, m *gorpmapper.Mapper, db gorp.SqlExecutor, itemType sdk.CDNItemType, runID string) ([]sdk.CDNItem, error) {
323-
query := gorpmapper.NewQuery("SELECT * FROM item WHERE api_ref->>'run_id'::text = $1 AND type = $2 AND to_delete = false").Args(runID, itemType)
322+
func LoadRunResultByRunID(ctx context.Context, m *gorpmapper.Mapper, db gorp.SqlExecutor, runID string) ([]sdk.CDNItem, error) {
323+
query := gorpmapper.NewQuery(`
324+
WITH allResults AS (
325+
SELECT api_ref->>'artifact_name' as name, api_ref->>'run_job_id' as run_job_id, id
326+
FROM item
327+
WHERE api_ref->>'run_id'::text = $1 AND type = $2 AND to_delete = false
328+
),
329+
deduplication AS (
330+
SELECT distinct on (name) *
331+
FROM allResults
332+
ORDER BY name, run_job_id DESC
333+
)
334+
SELECT * FROM item WHERE id IN (SELECT id FROM deduplication)
335+
`).Args(runID, sdk.CDNTypeItemRunResult)
324336
return getItems(ctx, m, db, query)
325337

326338
}

engine/cdn/item_handler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ func (s *Service) getArtifacts(ctx context.Context, r *http.Request, w http.Resp
251251
if runID == "" {
252252
return sdk.WrapError(sdk.ErrWrongRequest, "invalid workflow run")
253253
}
254-
items, err := item.LoadByRunID(ctx, s.Mapper, s.mustDBWithCtx(ctx), sdk.CDNTypeItemRunResult, runID)
254+
items, err := item.LoadRunResultByRunID(ctx, s.Mapper, s.mustDBWithCtx(ctx), runID)
255255
if err != nil {
256256
return err
257257
}

engine/cdn/item_handler_test.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,17 @@ func TestGetItemsArtefactHandler(t *testing.T) {
378378
item2.APIRefHash = refhashLog
379379
require.NoError(t, item.Insert(context.Background(), s.Mapper, db, &item2))
380380

381+
workerSignature.JobID += 1
382+
item3 := sdk.CDNItem{
383+
Type: sdk.CDNTypeItemRunResult,
384+
Status: sdk.CDNStatusItemCompleted,
385+
APIRef: sdk.NewCDNRunResultApiRef(workerSignature),
386+
}
387+
refhash, err = item3.APIRef.ToHash()
388+
require.NoError(t, err)
389+
item3.APIRefHash = refhash
390+
require.NoError(t, item.Insert(context.Background(), s.Mapper, db, &item3))
391+
381392
vars := map[string]string{
382393
"type": string(sdk.CDNTypeItemRunResult),
383394
}
@@ -397,5 +408,5 @@ func TestGetItemsArtefactHandler(t *testing.T) {
397408
require.NoError(t, json.Unmarshal(rec.Body.Bytes(), &results))
398409

399410
require.Equal(t, 1, len(results))
400-
require.Equal(t, item1.ID, results[0].ID)
411+
require.Equal(t, item3.ID, results[0].ID)
401412
}

0 commit comments

Comments
 (0)