Skip to content

Commit 0335d6f

Browse files
committed
fix(tests): await observable document lock contention
1 parent 4fda239 commit 0335d6f

1 file changed

Lines changed: 14 additions & 22 deletions

File tree

‎apps/sim/lib/knowledge/__integration__/connector-lease-pages.integration.ts‎

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,18 @@ describe('connector lease ACL pages in PostgreSQL', () => {
379379
})
380380
})
381381

382+
async function waitForDocumentLock(): Promise<number> {
383+
return vi.waitFor(async () => {
384+
const [row] = await db.execute<{ pid: number }>(sql`
385+
SELECT pid FROM pg_stat_activity
386+
WHERE wait_event_type = 'Lock' AND datname = current_database()
387+
AND (query ILIKE 'update "document" set "acl"%'
388+
OR query ILIKE 'select "id", "chunk_count" from "document"%for update')`)
389+
if (!row) throw new Error('Document ACL writer has not reached the held row')
390+
return row.pid
391+
})
392+
}
393+
382394
describe('fence-last pages', () => {
383395
/**
384396
* A processing commit holds a document row for its whole write. A page waiting on it must not
@@ -409,17 +421,7 @@ describe('connector lease ACL pages in PostgreSQL', () => {
409421
leaseTransaction(ids.connectorId, adminLease())
410422
)
411423
try {
412-
let waiter: number | undefined
413-
for (let attempt = 0; attempt < 100 && waiter === undefined; attempt++) {
414-
const [row] = await db.execute<{ pid: number }>(sql`
415-
SELECT pid FROM pg_stat_activity
416-
WHERE wait_event_type = 'Lock' AND datname = current_database()
417-
AND (query ILIKE 'update "document" set "acl"%'
418-
OR query ILIKE 'select "id", "chunk_count" from "document"%for update')`)
419-
waiter = row?.pid
420-
if (waiter === undefined) await new Promise<void>((resolve) => setImmediate(resolve))
421-
}
422-
expect(waiter).toBeDefined()
424+
const waiter = await waitForDocumentLock()
423425
const connectorLocks = await db.execute<{ mode: string }>(sql`
424426
SELECT mode FROM pg_locks
425427
WHERE pid = ${waiter} AND relation = 'knowledge_connector'::regclass`)
@@ -522,17 +524,7 @@ describe('connector lease ACL pages in PostgreSQL', () => {
522524
lease: createMemberSyncLease(members.connectorId, members.runId),
523525
})
524526
try {
525-
let waiter: number | undefined
526-
for (let attempt = 0; attempt < 200 && waiter === undefined; attempt++) {
527-
const [row] = await db.execute<{ pid: number }>(sql`
528-
SELECT pid FROM pg_stat_activity
529-
WHERE wait_event_type = 'Lock' AND datname = current_database()
530-
AND (query ILIKE 'update "document" set "acl"%'
531-
OR query ILIKE 'select "id", "chunk_count" from "document"%for update')`)
532-
waiter = row?.pid
533-
if (waiter === undefined) await new Promise<void>((resolve) => setImmediate(resolve))
534-
}
535-
expect(waiter).toBeDefined()
527+
const waiter = await waitForDocumentLock()
536528
const connectorLocks = await db.execute<{ mode: string }>(sql`
537529
SELECT mode FROM pg_locks
538530
WHERE pid = ${waiter} AND relation = 'knowledge_connector'::regclass`)

0 commit comments

Comments
 (0)