From be785263263386aa9fecb8227d70130a0ee13b48 Mon Sep 17 00:00:00 2001 From: Sheikah45 Date: Sun, 26 Nov 2023 11:21:50 -0500 Subject: [PATCH] Make the xirsys channel create idempotent --- .../service/xirsys/XirsysApiAdapter.kt | 20 ++++++++++++------- .../service/xirsys/XirsysResponse.kt | 1 + .../service/xirsys/XirsysSessionHandler.kt | 8 -------- src/main/resources/application.yaml | 2 ++ 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/main/kotlin/com/faforever/icebreaker/service/xirsys/XirsysApiAdapter.kt b/src/main/kotlin/com/faforever/icebreaker/service/xirsys/XirsysApiAdapter.kt index 3848813..5afa598 100644 --- a/src/main/kotlin/com/faforever/icebreaker/service/xirsys/XirsysApiAdapter.kt +++ b/src/main/kotlin/com/faforever/icebreaker/service/xirsys/XirsysApiAdapter.kt @@ -42,14 +42,20 @@ class XirsysApiAdapter( } @Retry - fun createChannel(channelName: String): Map = - parseAndUnwrap { - xirsysApiClient.createChannel( - namespace = xirsysProperties.channelNamespace(), - environment = fafProperties.environment(), - channelName = channelName, - ) + fun createChannel(channelName: String) { + try { + parseAndUnwrap> { + xirsysApiClient.createChannel( + namespace = xirsysProperties.channelNamespace(), + environment = fafProperties.environment(), + channelName = channelName, + ) + } + } catch (e: XirsysSpecifiedApiException) { + if (!e.errorCode.equals(PATH_EXISTS, true)) throw e + LOG.debug("Channel $channelName already exists") } + } @Retry fun deleteChannel(channelName: String) { diff --git a/src/main/kotlin/com/faforever/icebreaker/service/xirsys/XirsysResponse.kt b/src/main/kotlin/com/faforever/icebreaker/service/xirsys/XirsysResponse.kt index 0b90832..9af632f 100644 --- a/src/main/kotlin/com/faforever/icebreaker/service/xirsys/XirsysResponse.kt +++ b/src/main/kotlin/com/faforever/icebreaker/service/xirsys/XirsysResponse.kt @@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonSubTypes import com.fasterxml.jackson.annotation.JsonTypeInfo const val NOT_FOUND = "not_found" +const val PATH_EXISTS = "path_exists" @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "s") @JsonSubTypes( diff --git a/src/main/kotlin/com/faforever/icebreaker/service/xirsys/XirsysSessionHandler.kt b/src/main/kotlin/com/faforever/icebreaker/service/xirsys/XirsysSessionHandler.kt index 3e547d9..007286e 100644 --- a/src/main/kotlin/com/faforever/icebreaker/service/xirsys/XirsysSessionHandler.kt +++ b/src/main/kotlin/com/faforever/icebreaker/service/xirsys/XirsysSessionHandler.kt @@ -23,13 +23,7 @@ class XirsysSessionHandler( override val active = xirsysProperties.enabled() override fun createSession(id: String) { - if (listSessions().contains(id)) { - LOG.debug("Session id $id already exists") - return - } - LOG.debug("Creating session id $id") - xirsysApiAdapter.createChannel(id) } @@ -37,8 +31,6 @@ class XirsysSessionHandler( xirsysApiAdapter.deleteChannel(channelName = id) } - private fun listSessions(): List = xirsysApiAdapter.listChannel() - override fun getIceServers() = listOf(Server(id = SERVER_NAME, region = "Global")) override fun getIceServersSession(sessionId: String): List = diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 2f23c1e..dcc416d 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -37,4 +37,6 @@ xirsys: log: category: "org.hibernate.SQL": + level: DEBUG + "com.faforever": level: DEBUG \ No newline at end of file