Skip to content

Commit 4a5bafc

Browse files
committed
🐛 Do not attempt to re-create Redis executable multiples times in RedisHighAvailabilityContextCustomizer
1 parent 3ba676b commit 4a5bafc

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,15 @@ import redis.embedded.RedisSentinel
1818
import redis.embedded.RedisServer
1919
import redis.embedded.core.ExecutableProvider
2020
import redis.embedded.core.ExecutableProvider.newJarResourceProvider
21+
import redis.embedded.core.ExecutableProvider.newProvidedVersionsMap
2122
import redis.embedded.core.RedisServerBuilder
23+
import redis.embedded.model.OsArchitecture
24+
import redis.embedded.util.IO.writeResourceToExecutableFile
2225
import java.io.File
26+
import java.nio.file.Files
27+
import java.nio.file.Files.exists
2328
import java.util.stream.IntStream
29+
import kotlin.io.path.Path
2430
import kotlin.reflect.full.createInstance
2531
import kotlin.streams.toList
2632

@@ -40,7 +46,15 @@ internal class RedisHighAvailabilityContextCustomizer(
4046
private var nodeProvider: NodeProvider? = null
4147
private val customizer = config.customizer.map { c -> c.createInstance() }.toList()
4248
private val executableProvider = if (config.executeInDirectory.isNotEmpty()) {
43-
newJarResourceProvider(File(config.executeInDirectory))
49+
val osArch = OsArchitecture.detectOSandArchitecture()
50+
val executable = Path(config.executeInDirectory, newProvidedVersionsMap()[osArch]!!)
51+
ExecutableProvider {
52+
if (exists(executable)) {
53+
executable.toFile()
54+
} else {
55+
writeResourceToExecutableFile(executable.parent.toFile(), executable.fileName.toString())
56+
}
57+
}
4458
} else {
4559
newJarResourceProvider()
4660
}

0 commit comments

Comments
 (0)