Skip to content

Commit 087d6d2

Browse files
committed
fix(knowledge): record a member failure only under the lease
A listing that ran past the lease TTL and then failed wrote its backoff over the replacement run's counters and schedule. The failure ladder now lands under the same lease guard as every other member write.
1 parent 9ea67ba commit 087d6d2

1 file changed

Lines changed: 13 additions & 10 deletions

File tree

apps/sim/lib/knowledge/connectors/member-sync-engine.ts

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -728,20 +728,23 @@ async function countDueMembers(
728728
}
729729

730730
async function recordMemberFailure(
731+
run: MemberSyncRun,
731732
member: MemberRow,
732733
error: unknown,
733734
syncIntervalMinutes: number
734735
): Promise<void> {
735736
const failures = member.consecutiveFailures + 1
736-
await db
737-
.update(knowledgeConnectorMember)
738-
.set({
739-
consecutiveFailures: failures,
740-
nextAttemptAt: new Date(Date.now() + memberFailureBackoffMs(failures, syncIntervalMinutes)),
741-
lastError: getErrorMessage(error),
742-
updatedAt: new Date(),
743-
})
744-
.where(eq(knowledgeConnectorMember.id, member.id))
737+
await withMemberLease(run, (tx) =>
738+
tx
739+
.update(knowledgeConnectorMember)
740+
.set({
741+
consecutiveFailures: failures,
742+
nextAttemptAt: new Date(Date.now() + memberFailureBackoffMs(failures, syncIntervalMinutes)),
743+
lastError: getErrorMessage(error),
744+
updatedAt: new Date(),
745+
})
746+
.where(eq(knowledgeConnectorMember.id, member.id))
747+
)
745748
}
746749

747750
/**
@@ -904,7 +907,7 @@ async function listForMember(input: {
904907
memberId: member.id,
905908
error: getErrorMessage(error),
906909
})
907-
await recordMemberFailure(member, error, input.syncIntervalMinutes)
910+
await recordMemberFailure(input.run, member, error, input.syncIntervalMinutes)
908911
run.result.membersFailed += 1
909912
return { kind: 'failed' }
910913
}

0 commit comments

Comments
 (0)