fix: 修复队列已满导致 Task 添加失败后仍判定为加入队列成功的问题.

This commit is contained in:
LamGC 2024-03-25 11:32:30 +08:00
parent b8f7340d5f
commit 376113a0b6
Signed by: LamGC
GPG Key ID: 6C5AE2A913941E1D
2 changed files with 30 additions and 23 deletions

View File

@ -29,11 +29,9 @@ import java.util.concurrent.*
object OneDriveTransferCenter { object OneDriveTransferCenter {
val executor = val executor =
OneDriveTransferTaskExecutor(1, DefaultOneDriveTransferCallback, ArrayBlockingQueue(100)) OneDriveTransferTaskExecutor(1, DefaultOneDriveTransferCallback, ArrayBlockingQueue(Integer.MAX_VALUE))
fun submitUploadTask(task: OneDriveTransferTask) { fun submitUploadTask(task: OneDriveTransferTask): Boolean = executor.submitTransferTask(task)
executor.submitTransferTask(task)
}
fun cancelUploadTask(task: OneDriveTransferTask): Boolean = executor.cancelTransferTask(task) fun cancelUploadTask(task: OneDriveTransferTask): Boolean = executor.cancelTransferTask(task)
@ -291,9 +289,12 @@ class OneDriveTransferTaskExecutor(
} }
} }
fun submitTransferTask(task: OneDriveTransferTask) { fun submitTransferTask(task: OneDriveTransferTask): Boolean {
if (taskQueue.remainingCapacity() > 0) {
callback.onTransferTaskCreated(task) callback.onTransferTaskCreated(task)
taskQueue.offer(task) return taskQueue.offer(task)
}
return false
} }
fun cancelTransferTask(task: OneDriveTransferTask): Boolean { fun cancelTransferTask(task: OneDriveTransferTask): Boolean {
@ -348,9 +349,13 @@ class OneDriveTransferTaskExecutor(
} }
logger.warn(e) { "OneDrive 中转任务执行失败: ${e.message}" } logger.warn(e) { "OneDrive 中转任务执行失败: ${e.message}" }
progress.status = OneDriveTransferStatus.FAILURE progress.status = OneDriveTransferStatus.FAILURE
try {
callback.onTransferFailure(task, progress.apply { callback.onTransferFailure(task, progress.apply {
this.exception = e this.exception = e
}) })
} catch (e: Exception) {
logger.warn(e) { "OneDrive 中转任务失败回调失败: ${e.message}" }
}
} finally { } finally {
logger.info { "线程 $id 任务执行完毕: ${task.document.fileName}" } logger.info { "线程 $id 任务执行完毕: ${task.document.fileName}" }
threadStatusMap.remove(id) threadStatusMap.remove(id)

View File

@ -109,8 +109,7 @@ class OneDriveTransferService(
fun submitUploadDocumentTask(userId: Long, messageId: Int, document: Document) { fun submitUploadDocumentTask(userId: Long, messageId: Int, document: Document) {
val transferSetting = val transferSetting =
accountManager.getTransferSetting(userId) ?: throw OneDriveNotLoginException() accountManager.getTransferSetting(userId) ?: throw OneDriveNotLoginException()
OneDriveTransferCenter.submitUploadTask( val task = OneDriveTransferTask(
OneDriveTransferTask(
userId, userId,
bot, bot,
this, this,
@ -120,8 +119,11 @@ class OneDriveTransferService(
).apply { ).apply {
extra["chatId"] = userId extra["chatId"] = userId
extra["messageId"] = messageId extra["messageId"] = messageId
}.also { tasks.add(it) } }
) val submitted = OneDriveTransferCenter.submitUploadTask(task)
if (submitted) {
tasks.add(task)
}
} }
fun cancelTask(userId: Long, replyMessageId: Int): Boolean { fun cancelTask(userId: Long, replyMessageId: Int): Boolean {