Fixes ConcurrentExceptions on Event outbox tentative management

This commit is contained in:
Vitor Pamplona
2025-11-24 10:50:58 -05:00
parent 4f019c6e49
commit 1e00c08f7d
@@ -52,9 +52,9 @@ class PoolEventOutboxState(
fun newTry(url: NormalizedRelayUrl) { fun newTry(url: NormalizedRelayUrl) {
val currentTries = tries[url] val currentTries = tries[url]
if (currentTries != null) { if (currentTries != null) {
currentTries.tries.add(TimeUtils.now()) currentTries.addTriedTime(TimeUtils.now())
} else { } else {
tries = tries + (url to Tries(mutableListOf(TimeUtils.now()))) tries = tries + (url to Tries(listOf(TimeUtils.now())))
} }
} }
@@ -65,13 +65,13 @@ class PoolEventOutboxState(
) { ) {
val currentTries = tries[url] val currentTries = tries[url]
if (currentTries != null) { if (currentTries != null) {
currentTries.responses.add(Response(success, message)) currentTries.addResponse(Response(success, message))
} else { } else {
tries = tries + ( tries = tries + (
url to url to
Tries( Tries(
mutableListOf(TimeUtils.now() - 1), listOf(TimeUtils.now() - 1),
mutableListOf(Response(success, message)), listOf(Response(success, message)),
) )
) )
} }
@@ -79,10 +79,18 @@ class PoolEventOutboxState(
// Tries 3 times // Tries 3 times
class Tries( class Tries(
val tries: MutableList<Long> = mutableListOf(), var tries: List<Long> = listOf(),
val responses: MutableList<Response> = mutableListOf(), var responses: List<Response> = listOf(),
) { ) {
fun isDone() = responses.any { it.success } || responses.size > 2 || tries.size > 3 fun isDone() = responses.any { it.success } || responses.size > 2 || tries.size > 3
fun addResponse(r: Response) {
responses += r
}
fun addTriedTime(tried: Long) {
tries += tried
}
} }
class Response( class Response(