fix: memberToMerge and memberToMergeRaw fall out of sync (CM-1339) - #4347
fix: memberToMerge and memberToMergeRaw fall out of sync (CM-1339)#4347joanagmaia wants to merge 3 commits into
Conversation
Signed-off-by: Joana Maia <jmaia@contractor.linuxfoundation.org>
PR SummaryMedium Risk Overview This aligns removal with flows that already update both tables (e.g. LLM merge processing) and addresses Reviewed by Cursor Bugbot for commit 97fd8b9. Bugbot is set up for automated code reviews on this repo. Configure here. |
There was a problem hiding this comment.
Pull request overview
This PR fixes consistency issues between the filtered merge-suggestion table (memberToMerge) and its raw source table (memberToMergeRaw) so that merge candidates don’t get re-queued indefinitely and inserts don’t leave orphaned rows.
Changes:
- Extend
removeMemberToMergeto also delete the corresponding entry frommemberToMergeRaw. - Extend the enrichment worker’s
addMemberToMergeto also insert intomemberToMergeRaw, and addON CONFLICT DO NOTHINGto both inserts (also removing a stray").
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
services/libs/data-access-layer/src/old/apps/members_enrichment_worker/index.ts |
Inserts merge candidates into both memberToMerge and memberToMergeRaw (with conflict handling). |
services/libs/data-access-layer/src/member_merge/index.ts |
Cleans up memberToMergeRaw when removing a merge candidate from memberToMerge. |
Comments suppressed due to low confidence (2)
services/libs/data-access-layer/src/old/apps/members_enrichment_worker/index.ts:356
- Both INSERTs omit "createdAt"/"updatedAt". Per the Flyway schema for "memberToMerge" these columns are NOT NULL (see backend/src/database/migrations/V1666966941__initial.sql:305-310). If the DB doesn’t have defaults/triggers, this statement will fail at runtime. Even if it currently works, explicitly setting timestamps here keeps the insert portable and consistent with other codepaths (e.g. backend memberRepository inserts NOW(), NOW()).
AND mi.value in ($(values:csv))
AND mi.type = $(type)
AND EXISTS (SELECT 1 FROM "memberSegments" ms WHERE ms."memberId" = mi."memberId")`,
services/libs/data-access-layer/src/old/apps/members_enrichment_worker/index.ts:362
- This INSERT into "memberToMergeRaw" also omits NOT NULL "createdAt"/"updatedAt" columns (see backend/src/database/migrations/V1715071755__rawSuggestionTables.sql:1-9). Without defaults/triggers, it will fail and prevent enqueueing merge suggestions. Consider inserting timestamps explicitly (matching how other merge-suggestion inserts populate NOW(), NOW()).
platform,
values,
type,
},
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| ` | ||
| DELETE FROM "memberToMergeRaw" | ||
| WHERE "memberId" = $(memberId) | ||
| AND "toMergeId" = $(toMergeId) | ||
| `, |
| await tx.query( | ||
| `INSERT INTO "memberToMerge" ("memberId", "toMergeId", similarity) | ||
| VALUES ($1, $2, $3);"`, | ||
| VALUES ($1, $2, $3) ON CONFLICT DO NOTHING`, |
…1339) Signed-off-by: Joana Maia <jmaia@contractor.linuxfoundation.org>
| DELETE FROM "memberToMergeRaw" | ||
| WHERE "memberId" = $(memberId) | ||
| AND "toMergeId" = $(toMergeId) |
| memberId, | ||
| toMergeId, | ||
| }, | ||
| ) |
Summary
removeMemberToMergeindata-access-layer/src/member_merge/index.tsonly deleted frommemberToMerge. After a merge the correspondingmemberToMergeRawrow was never removed, leaving the pair eligible to be re-queued.addMemberToMergein the enrichment worker DAL was also investigated as a potential source of orphans, but turned out to be dead code with no callers — no fix needed there.DB findings at time of discovery
memberToMergeRawtotal rowsmemberToMergeRawrows with similarity > 0.75memberToMergetotal rowsmemberToMergewith no raw entrymemberToMergeChanges
services/libs/data-access-layer/src/member_merge/index.ts—removeMemberToMergenow also deletes frommemberToMergeRawJira: CM-1339