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

View File

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