Skip to content

Commit 1e884b0

Browse files
committed
🐛 Do not attempt to re-create Redis executable multiples times in RedisHighAvailabilityContextCustomizer
1 parent 6caa161 commit 1e884b0

File tree

2 files changed

+28
-27
lines changed

2 files changed

+28
-27
lines changed

src/main/kotlin/io/github/tobi/laa/spring/boot/embedded/redis/cluster/RedisClusterContextCustomizer.kt

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import redis.clients.jedis.JedisCluster
1414
import redis.embedded.RedisServer
1515
import redis.embedded.RedisServer.newRedisServer
1616
import redis.embedded.RedisShardedCluster
17-
import redis.embedded.core.ExecutableProvider
17+
import redis.embedded.core.ExecutableProvider.newJarResourceProvider
1818
import redis.embedded.core.RedisServerBuilder
1919
import java.io.File
2020
import java.time.Duration
@@ -25,8 +25,8 @@ import kotlin.streams.toList
2525
private const val CLUSTER_IP = "127.0.0.1"
2626

2727
internal class RedisClusterContextCustomizer(
28-
private val config: EmbeddedRedisCluster,
29-
private val portProvider: PortProvider = PortProvider()
28+
private val config: EmbeddedRedisCluster,
29+
private val portProvider: PortProvider = PortProvider()
3030
) : ContextCustomizer {
3131

3232
private val log = LoggerFactory.getLogger(javaClass)
@@ -56,9 +56,9 @@ internal class RedisClusterContextCustomizer(
5656
val shards = config.shards.map { createShard(it, ports) }
5757
val nodes = shards.map { it.second + it.first }.flatten().toList()
5858
val replicasPortsByMainNodePort =
59-
shards.associate { s -> s.first.ports().first() to s.second.map { it.ports() }.flatten().toSet() }
59+
shards.associate { s -> s.first.ports().first() to s.second.map { it.ports() }.flatten().toSet() }
6060
val cluster =
61-
RedisShardedCluster(nodes, replicasPortsByMainNodePort, Duration.ofSeconds(config.initializationTimeout))
61+
RedisShardedCluster(nodes, replicasPortsByMainNodePort, Duration.ofSeconds(config.initializationTimeout))
6262
return cluster
6363
}
6464

@@ -80,8 +80,8 @@ internal class RedisClusterContextCustomizer(
8080
}
8181

8282
private fun createShard(
83-
shard: EmbeddedRedisCluster.Shard,
84-
ports: Iterator<Int>
83+
shard: EmbeddedRedisCluster.Shard,
84+
ports: Iterator<Int>
8585
): Pair<RedisServer, List<RedisServer>> {
8686
val name = shard.name.ifEmpty { BirdNameProvider.next() }
8787

@@ -96,22 +96,22 @@ internal class RedisClusterContextCustomizer(
9696

9797
private fun createNodeBuilder(port: Int): RedisServerBuilder {
9898
val builder = newRedisServer()
99-
.bind(CLUSTER_IP)
100-
.port(port)
101-
.setting("cluster-enabled yes")
102-
.setting("cluster-config-file nodes-replica-$port.conf")
103-
.setting("cluster-node-timeout 5000")
104-
.setting("appendonly no")
99+
.bind(CLUSTER_IP)
100+
.port(port)
101+
.setting("cluster-enabled yes")
102+
.setting("cluster-config-file nodes-replica-$port.conf")
103+
.setting("cluster-node-timeout 5000")
104+
.setting("appendonly no")
105105
if (config.executeInDirectory.isNotEmpty()) {
106-
builder.executableProvider(ExecutableProvider.newJarResourceProvider(File(config.executeInDirectory)))
106+
builder.executableProvider(newJarResourceProvider(File(config.executeInDirectory)))
107107
}
108108
return builder
109109
}
110110

111111
private fun parseAddresses(cluster: RedisShardedCluster): List<Pair<String, Int>> =
112-
cluster.servers()
113-
.map { CLUSTER_IP to it.ports().first() }
114-
.toList()
112+
cluster.servers()
113+
.map { CLUSTER_IP to it.ports().first() }
114+
.toList()
115115

116116
private fun createClient(addresses: List<Pair<String, Int>>): RedisClient {
117117
val jedisCluster = JedisCluster(addresses.map { HostAndPort(it.first, it.second) }.toSet())
@@ -120,16 +120,16 @@ internal class RedisClusterContextCustomizer(
120120

121121
private fun setSpringProperties(context: ConfigurableApplicationContext, addresses: List<Pair<String, Int>>) {
122122
TestPropertyValues.of(
123-
mapOf(
124-
"spring.data.redis.cluster.nodes" to addresses.joinToString(",") { createAddress(it.first, it.second) }
125-
)
123+
mapOf(
124+
"spring.data.redis.cluster.nodes" to addresses.joinToString(",") { createAddress(it.first, it.second) }
125+
)
126126
).applyTo(context.environment)
127127
}
128128

129129
private fun addShutdownListener(
130-
context: ConfigurableApplicationContext,
131-
cluster: RedisShardedCluster,
132-
client: RedisClient
130+
context: ConfigurableApplicationContext,
131+
cluster: RedisShardedCluster,
132+
client: RedisClient
133133
) {
134134
context.addApplicationListener { event ->
135135
if (event is ContextClosedEvent) {

src/main/kotlin/io/github/tobi/laa/spring/boot/embedded/redis/highavailability/RedisHighAvailabilityContextCustomizer.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import redis.embedded.core.ExecutableProvider
2020
import redis.embedded.core.ExecutableProvider.newJarResourceProvider
2121
import redis.embedded.core.ExecutableProvider.newProvidedVersionsMap
2222
import redis.embedded.core.RedisServerBuilder
23-
import redis.embedded.model.OsArchitecture
23+
import redis.embedded.model.OsArchitecture.detectOSandArchitecture
2424
import redis.embedded.util.IO.writeResourceToExecutableFile
2525
import java.nio.file.Files.exists
2626
import java.util.stream.IntStream
@@ -44,13 +44,14 @@ internal class RedisHighAvailabilityContextCustomizer(
4444
private var nodeProvider: NodeProvider? = null
4545
private val customizer = config.customizer.map { c -> c.createInstance() }.toList()
4646
private val executableProvider = if (config.executeInDirectory.isNotEmpty()) {
47-
val osArch = OsArchitecture.detectOSandArchitecture()
48-
val executable = Path(config.executeInDirectory, newProvidedVersionsMap()[osArch]!!)
47+
val osArch = detectOSandArchitecture()
48+
val resourcePath = newProvidedVersionsMap()[osArch]!!
49+
val executable = Path(config.executeInDirectory, resourcePath)
4950
ExecutableProvider {
5051
if (exists(executable)) {
5152
executable.toFile()
5253
} else {
53-
writeResourceToExecutableFile(executable.parent.toFile(), executable.fileName.toString())
54+
writeResourceToExecutableFile(executable.parent.toFile(), resourcePath)
5455
}
5556
}
5657
} else {

0 commit comments

Comments
 (0)