fix: 修复队列已满导致 Task 添加失败后仍判定为加入队列成功的问题.
This commit is contained in:
parent
b8f7340d5f
commit
376113a0b6
@ -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)
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user