fix: infinite loop in knowledge queue processing (#11856)

* fix: infinite loop in knowledge queue processing

* fix: address review comments
This commit is contained in:
defi-failure 2025-12-12 15:15:49 +08:00 committed by GitHub
parent 512d872ac3
commit be9a8b8699
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 24 additions and 2 deletions

View File

@ -163,6 +163,7 @@ export const useKnowledge = (baseId: string) => {
processingProgress: 0,
processingError: '',
uniqueId: undefined,
retryCount: 0,
updated_at: Date.now()
})
checkAllBases()
@ -182,6 +183,7 @@ export const useKnowledge = (baseId: string) => {
processingProgress: 0,
processingError: '',
uniqueId: undefined,
retryCount: 0,
updated_at: Date.now()
})
setTimeout(() => KnowledgeQueue.checkAllBases(), 0)

View File

@ -75,7 +75,7 @@ class KnowledgeQueue {
let processableItem = findProcessableItem()
while (processableItem) {
this.processItem(baseId, processableItem).then()
await this.processItem(baseId, processableItem)
processableItem = findProcessableItem()
}
} finally {
@ -99,7 +99,27 @@ class KnowledgeQueue {
const userId = getStoreSetting('userId')
try {
if (item.retryCount && item.retryCount >= this.MAX_RETRIES) {
logger.info(`Item ${item.id} has reached max retries, skipping`)
const errorMessage = item.processingError
? `Max retries exceeded: ${item.processingError}`
: 'Max retries exceeded'
logger.warn(`Item ${item.id} has reached max retries, marking as failed`)
notificationService.send({
id: uuid(),
type: 'error',
title: t('common.knowledge_base'),
message: t('notification.knowledge.error', { error: errorMessage }),
silent: false,
timestamp: Date.now(),
source: 'knowledge'
})
store.dispatch(
updateItemProcessingStatus({
baseId,
itemId: item.id,
status: 'failed',
error: errorMessage
})
)
return
}