Skip to content

Commit ed3846a

Browse files
authored
fix: limit member identities to 75 to prevent OpenSearch clause overflow (CDP-721) (#3479)
1 parent a5c0bb3 commit ed3846a

1 file changed

Lines changed: 9 additions & 2 deletions

File tree

services/apps/merge_suggestions_worker/src/activities/memberMergeSuggestions.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
/* eslint-disable @typescript-eslint/no-explicit-any */
2+
import uniqBy from 'lodash.uniqby'
3+
24
import { addMemberNoMerge } from '@crowd/data-access-layer/src/member_merge'
35
import { MemberField, queryMembers } from '@crowd/data-access-layer/src/members'
46
import MemberMergeSuggestionsRepository from '@crowd/data-access-layer/src/old/apps/merge_suggestions_worker/memberMergeSuggestions.repo'
@@ -69,7 +71,12 @@ export async function getMemberMergeSuggestions(
6971
],
7072
}
7173

72-
if (fullMember.identities && fullMember.identities.length > 0) {
74+
// deduplicate identities, sort verified first
75+
const identities = uniqBy(fullMember.identities, (i) => `${i.platform}:${i.value}`).sort(
76+
(a, b) => (a.verified === b.verified ? 0 : a.verified ? -1 : 1),
77+
)
78+
79+
if (identities && identities.length > 0) {
7380
// push nested search scaffold for strong identities
7481
identitiesPartialQuery.should.push({
7582
nested: {
@@ -85,7 +92,7 @@ export async function getMemberMergeSuggestions(
8592
})
8693

8794
// prevent processing more than 100 identities because of opensearch limits (maxClauseCount = 1024)
88-
for (const identity of fullMember.identities.slice(0, 100)) {
95+
for (const identity of identities.slice(0, 75)) {
8996
if (identity.value && identity.value.length > 0) {
9097
// For verified identities (either email or username)
9198
// 1. Exact search the identity in other unverified identities

0 commit comments

Comments
 (0)