Skip to content

Commit 53d15fa

Browse files
committed
Handle error seen when testing in prod
1 parent e76441c commit 53d15fa

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

src/scripts/migrate-dynamo-data.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1446,6 +1446,29 @@ function isInvalidUtf8Error (err) {
14461446
return message.includes('invalid byte sequence for encoding "UTF8"') || message.includes('0x00')
14471447
}
14481448

1449+
function isUniqueConstraintError (err) {
1450+
if (!err) {
1451+
return false
1452+
}
1453+
if (err.code === 'P2002') {
1454+
return true
1455+
}
1456+
const message = err.message || ''
1457+
return message.includes('Unique constraint failed')
1458+
}
1459+
1460+
function logUniqueConstraintSkip (memberItem, err) {
1461+
const identifier = compactObject({
1462+
userId: memberItem?.userId,
1463+
handle: memberItem?.handle,
1464+
handleLower: memberItem?.handleLower
1465+
})
1466+
logWarn('Skipping member due to unique constraint violation', {
1467+
...identifier,
1468+
target: err?.meta?.target
1469+
})
1470+
}
1471+
14491472
async function createMembersIndividually (memberItems) {
14501473
for (const memberItem of memberItems) {
14511474
try {
@@ -1457,6 +1480,10 @@ async function createMembersIndividually (memberItems) {
14571480
timeout: TRANSACTION_TIMEOUT_MS
14581481
}))
14591482
} catch (err) {
1483+
if (isUniqueConstraintError(err)) {
1484+
logUniqueConstraintSkip(memberItem, err)
1485+
continue
1486+
}
14601487
if (isInvalidUtf8Error(err)) {
14611488
console.warn(`Skipping member ${memberItem.userId || memberItem.handleLower || 'unknown'} due to invalid UTF-8 data`)
14621489
continue
@@ -1495,6 +1522,11 @@ async function createMembers (memberItems) {
14951522
await createMembersIndividually(memberItems)
14961523
return
14971524
}
1525+
if (isUniqueConstraintError(err)) {
1526+
console.warn('Batch insert failed due to unique constraint violation. Falling back to per-member inserts.')
1527+
await createMembersIndividually(memberItems)
1528+
return
1529+
}
14981530
throw err
14991531
}
15001532
}

0 commit comments

Comments
 (0)