Skip to content

Commit c97ed8f

Browse files
committed
Fix #35726: re-create Redis container in needed
1 parent 13a35c6 commit c97ed8f

File tree

1 file changed

+38
-35
lines changed
  • src/main/kotlin/eu/openanalytics/shinyproxyoperator/impl/docker

1 file changed

+38
-35
lines changed

src/main/kotlin/eu/openanalytics/shinyproxyoperator/impl/docker/RedisConfig.kt

Lines changed: 38 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import eu.openanalytics.shinyproxyoperator.Config
2424
import eu.openanalytics.shinyproxyoperator.FileManager
2525
import io.github.oshai.kotlinlogging.KotlinLogging
2626
import kotlinx.coroutines.Dispatchers
27-
import kotlinx.coroutines.IO
2827
import kotlinx.coroutines.withContext
2928
import org.apache.commons.lang3.RandomStringUtils
3029
import org.mandas.docker.client.DockerClient
@@ -71,47 +70,51 @@ class RedisConfig(private val dockerClient: DockerClient,
7170

7271
suspend fun reconcile() {
7372
dockerActions.stopAndRemoveNotRunningContainer(containerName)
74-
if (dockerActions.getContainerByName(containerName) == null) {
75-
withContext(Dispatchers.IO) {
76-
fileManager.createDirectories(dataDir.resolve("data"))
77-
}
78-
logger.info { "[Redis] Pulling image" }
79-
dockerActions.pullImage(redisImage)
73+
if (dockerActions.isContainerRunning(containerName, redisImage)) {
74+
logger.info { "[Redis] Ok" }
75+
return
76+
}
77+
withContext(Dispatchers.IO) {
78+
fileManager.createDirectories(dataDir.resolve("data"))
79+
}
80+
logger.info { "[Redis] Reconciling" }
81+
dockerActions.stopAndRemoveContainer(containerName)
82+
logger.info { "[Redis] Pulling image" }
83+
dockerActions.pullImage(redisImage)
8084

81-
withContext(Dispatchers.IO) {
82-
fileManager.writeFile(dataDir.resolve("redis.conf"),
83-
"""save 60 1
85+
withContext(Dispatchers.IO) {
86+
fileManager.writeFile(dataDir.resolve("redis.conf"),
87+
"""save 60 1
8488
|appendonly yes
8589
|requirepass $redisPassword
8690
|""".trimMargin())
87-
}
91+
}
8892

89-
val hostConfig = HostConfig.builder()
90-
.networkMode(DockerOrchestrator.SHARED_NETWORK_NAME)
91-
.binds(HostConfig.Bind.builder()
92-
.from(dataDir.resolve("data").toString())
93-
.to("/data")
94-
.build(),
95-
HostConfig.Bind.builder()
96-
.from(dataDir.resolve("redis.conf").toString())
97-
.to("/etc/redis.conf")
98-
.build()
99-
)
100-
.restartPolicy(HostConfig.RestartPolicy.always())
101-
.build()
93+
val hostConfig = HostConfig.builder()
94+
.networkMode(DockerOrchestrator.SHARED_NETWORK_NAME)
95+
.binds(HostConfig.Bind.builder()
96+
.from(dataDir.resolve("data").toString())
97+
.to("/data")
98+
.build(),
99+
HostConfig.Bind.builder()
100+
.from(dataDir.resolve("redis.conf").toString())
101+
.to("/etc/redis.conf")
102+
.build()
103+
)
104+
.restartPolicy(HostConfig.RestartPolicy.always())
105+
.build()
102106

103-
val containerConfig = ContainerConfig.builder()
104-
.image(redisImage)
105-
.hostConfig(hostConfig)
106-
.labels(mapOf("app" to "redis"))
107-
.cmd(listOf("redis-server", "/etc/redis.conf"))
108-
.user(dataDirUid.toString())
109-
.build()
107+
val containerConfig = ContainerConfig.builder()
108+
.image(redisImage)
109+
.hostConfig(hostConfig)
110+
.labels(mapOf("app" to "redis"))
111+
.cmd(listOf("redis-server", "/etc/redis.conf"))
112+
.user(dataDirUid.toString())
113+
.build()
110114

111-
logger.info { "[Redis] Creating new container" }
112-
val containerId = dockerClient.createContainer(containerConfig, containerName).id()!!
113-
dockerClient.startContainer(containerId)
114-
}
115+
logger.info { "[Redis] Creating new container" }
116+
val containerId = dockerClient.createContainer(containerConfig, containerName).id()!!
117+
dockerClient.startContainer(containerId)
115118
}
116119

117120
private fun readPasswordFile(path: String): String? {

0 commit comments

Comments
 (0)