Skip to content

Commit dc7cc4e

Browse files
committed
Minor rewrite of ExecutableProviders
1 parent 91b6f8a commit dc7cc4e

19 files changed

+96
-85
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
<groupId>com.github.codemonstur</groupId>
55
<artifactId>embedded-redis</artifactId>
6-
<version>1.3.0</version>
6+
<version>1.4.0</version>
77
<packaging>jar</packaging>
88

99
<name>embedded-redis</name>

src/main/java/redis/embedded/RedisShardedCluster.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
import java.util.stream.IntStream;
1414

1515
public final class RedisShardedCluster implements Redis {
16-
public static final String CLUSTER_IP = "127.0.0.1";
16+
17+
private static final String CLUSTER_IP = "127.0.0.1";
1718
private static final int MAX_NUMBER_OF_SLOTS_PER_CLUSTER = 16384;
1819
private static final Duration SLEEP_DURATION = Duration.ofMillis(300);
1920
private static final long SLEEP_DURATION_IN_MILLIS = SLEEP_DURATION.toMillis();
@@ -26,8 +27,7 @@ public final class RedisShardedCluster implements Redis {
2627
public RedisShardedCluster(
2728
final List<Redis> servers,
2829
final Map<Integer, Set<Integer>> replicasPortsByMainNodePort,
29-
final Duration initializationTimeout
30-
) {
30+
final Duration initializationTimeout) {
3131
this.servers.addAll(servers);
3232
this.replicasPortsByMainNodePort.putAll(replicasPortsByMainNodePort);
3333
this.initializationTimeout = initializationTimeout;
@@ -98,21 +98,21 @@ private void meetMainNodes(final Integer clusterMeetTarget) throws RedisClusterS
9898
// for every shard meet the main node (except the 1st shard) and add their slots manually
9999
final List<Integer> shardsMainNodePorts = new LinkedList<>(replicasPortsByMainNodePort.keySet());
100100
final int slotsPerShard = MAX_NUMBER_OF_SLOTS_PER_CLUSTER / shardsMainNodePorts.size();
101-
for(int i = 0; i < shardsMainNodePorts.size(); i++) {
101+
for (int i = 0; i < shardsMainNodePorts.size(); i++) {
102102
final Integer port = shardsMainNodePorts.get(i);
103-
int startSlot = i * slotsPerShard;
104-
int endSlot = i == shardsMainNodePorts.size() - 1
103+
final int startSlot = i * slotsPerShard;
104+
final int endSlot = i == shardsMainNodePorts.size() - 1
105105
? MAX_NUMBER_OF_SLOTS_PER_CLUSTER - 1
106106
: startSlot + slotsPerShard - 1;
107107
try (final Jedis jedis = new Jedis(CLUSTER_IP, port)) {
108-
if(!port.equals(clusterMeetTarget)){
108+
if (!port.equals(clusterMeetTarget)) {
109109
jedis.clusterMeet(CLUSTER_IP, clusterMeetTarget);
110110
}
111111

112112
final String nodeId = jedis.clusterMyId();
113113
mainNodeIdsByPort.put(port, nodeId);
114114
jedis.clusterAddSlots(IntStream.range(startSlot, endSlot + 1).toArray());
115-
} catch (Exception e) {
115+
} catch (final Exception e) {
116116
throw new RedisClusterSetupException("Failed creating main node instance at port: " + port, e);
117117
}
118118
}

src/main/java/redis/embedded/core/ExecutableProvider.java

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package redis.embedded.core;
22

33
import redis.embedded.model.OsArchitecture;
4+
import redis.embedded.util.IO;
5+
import redis.embedded.util.IOSupplier;
46

57
import java.io.*;
68
import java.net.HttpURLConnection;
@@ -14,8 +16,7 @@
1416
import static java.nio.file.StandardOpenOption.*;
1517
import static java.nio.file.attribute.PosixFilePermissions.fromString;
1618
import static redis.embedded.model.OsArchitecture.*;
17-
import static redis.embedded.util.IO.findBinaryInPath;
18-
import static redis.embedded.util.IO.writeResourceToExecutableFile;
19+
import static redis.embedded.util.IO.*;
1920

2021
public interface ExecutableProvider {
2122

@@ -26,16 +27,31 @@ public interface ExecutableProvider {
2627

2728
File get() throws IOException;
2829

29-
static ExecutableProvider newEmbeddedRedisProvider() {
30-
final Map<OsArchitecture, String> executables = newProvidedVersionsMap();
31-
return () -> writeResourceToExecutableFile(executables.get(detectOSandArchitecture()));
30+
static ExecutableProvider newJarResourceProvider() {
31+
final Map<OsArchitecture, String> map = newProvidedVersionsMap();
32+
return newJarResourceProvider(IO::newTempDirForBinary, map);
33+
}
34+
35+
static ExecutableProvider newJarResourceProvider(final File tempDirectory) {
36+
final Map<OsArchitecture, String> map = newProvidedVersionsMap();
37+
return newJarResourceProvider(() -> tempDirectory, map);
38+
}
39+
40+
static ExecutableProvider newJarResourceProvider(final Map<OsArchitecture, String> executables) {
41+
return newJarResourceProvider(IO::newTempDirForBinary, executables);
42+
}
43+
44+
static ExecutableProvider newJarResourceProvider(final IOSupplier<File> tempDirectory, final Map<OsArchitecture, String> executables) {
45+
final OsArchitecture osArch = detectOSandArchitecture();
46+
return () -> writeResourceToExecutableFile(tempDirectory.get(), executables.get(osArch));
3247
}
3348

3449
static ExecutableProvider newFileThenJarResourceProvider(final Map<OsArchitecture, String> executables) {
3550
return () -> {
3651
final String executablePath = executables.get(detectOSandArchitecture());
3752
final File executable = new File(executablePath);
38-
return executable.isFile() ? executable : writeResourceToExecutableFile(executablePath);
53+
final File tempDir = newTempDirForBinary();
54+
return executable.isFile() ? executable : writeResourceToExecutableFile(tempDir, executablePath);
3955
};
4056
}
4157

@@ -53,10 +69,6 @@ static ExecutableProvider newSystemPropertyProvider(final String propertyName) {
5369
return () -> new File(System.getProperty(propertyName));
5470
}
5571

56-
static ExecutableProvider newJarResourceProvider(final Map<OsArchitecture, String> executables) {
57-
return () -> writeResourceToExecutableFile(executables.get(detectOSandArchitecture()));
58-
}
59-
6072
static ExecutableProvider newExecutableInPath(final String executableName) throws FileNotFoundException {
6173
return findBinaryInPath(executableName)::toFile;
6274
}

src/main/java/redis/embedded/core/ExecutableProviderBuilder.java

Lines changed: 0 additions & 36 deletions
This file was deleted.

src/main/java/redis/embedded/core/PortProvider.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import java.util.concurrent.atomic.AtomicInteger;
88

99
public interface PortProvider {
10-
//Redis uses a cluster bus port as the first node port + 10000, so we need to make sure we use ports lower than
10+
// Redis uses a cluster bus port as the first node port + 10000, so we need to make sure we use ports lower than
1111
// 55535 to ensure we always get a valid cluster bus port. We chose 50000 in order to have a safe margin.
1212
// Theoretically we could use the "cluster-port" as documented here:
1313
// https://redis.io/docs/reference/cluster-spec/#the-cluster-bus
@@ -21,7 +21,7 @@ static PortProvider newEphemeralPortProvider() {
2121
try (final ServerSocket socket = new ServerSocket(0)) {
2222
socket.setReuseAddress(false);
2323
return socket.getLocalPort();
24-
} catch (IOException e) {
24+
} catch (final IOException e) {
2525
throw new IllegalArgumentException("Could not provide ephemeral port", e);
2626
}
2727
};
@@ -53,4 +53,5 @@ static PortProvider newSequencePortProvider(final int start) {
5353
final AtomicInteger currentPort = new AtomicInteger(start);
5454
return currentPort::getAndIncrement;
5555
}
56+
5657
}

src/main/java/redis/embedded/core/RedisSentinelBuilder.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@
1111

1212
import static java.nio.charset.StandardCharsets.UTF_8;
1313
import static redis.embedded.Redis.DEFAULT_REDIS_PORT;
14-
import static redis.embedded.core.ExecutableProvider.newEmbeddedRedisProvider;
14+
import static redis.embedded.core.ExecutableProvider.newJarResourceProvider;
1515

1616
public final class RedisSentinelBuilder {
17+
1718
private static final String
1819
LINE_SEPARATOR = System.getProperty("line.separator"),
1920
CONF_FILENAME = "embedded-redis-sentinel",
@@ -24,7 +25,7 @@ public final class RedisSentinelBuilder {
2425
LINE_PORT = "port %d";
2526

2627
private File executable;
27-
private ExecutableProvider executableProvider = newEmbeddedRedisProvider();
28+
private ExecutableProvider executableProvider = newJarResourceProvider();
2829
private String bind = "127.0.0.1";
2930
private Integer port = 26379;
3031
private int masterPort = DEFAULT_REDIS_PORT;
@@ -184,4 +185,5 @@ private List<String> buildCommandArgs() {
184185

185186
return args;
186187
}
188+
187189
}

src/main/java/redis/embedded/core/RedisServerBuilder.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@
1515

1616
import static java.nio.charset.StandardCharsets.UTF_8;
1717
import static redis.embedded.Redis.DEFAULT_REDIS_PORT;
18-
import static redis.embedded.core.ExecutableProvider.newEmbeddedRedisProvider;
18+
import static redis.embedded.core.ExecutableProvider.newJarResourceProvider;
1919

2020
public final class RedisServerBuilder {
2121

2222
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
2323

2424
private File executable;
25-
private ExecutableProvider provider = newEmbeddedRedisProvider();
25+
private ExecutableProvider provider = newJarResourceProvider();
2626
private String bindAddress = "127.0.0.1";
2727
private int bindPort = DEFAULT_REDIS_PORT;
2828
private InetSocketAddress slaveOf;
@@ -97,7 +97,7 @@ public void reset() {
9797
this.executable = null;
9898
this.slaveOf = null;
9999
this.redisConfigBuilder = new StringBuilder();
100-
this.provider = newEmbeddedRedisProvider();
100+
this.provider = newJarResourceProvider();
101101
this.bindAddress = "127.0.0.1";
102102
this.bindPort = DEFAULT_REDIS_PORT;
103103
this.soutListener = null;

src/main/java/redis/embedded/core/RedisShardedClusterBuilder.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import static redis.embedded.core.PortProvider.*;
1313

1414
public final class RedisShardedClusterBuilder {
15+
1516
private static final Duration DEFAULT_INITIALIZATION_TIMEOUT = Duration.ofSeconds(20);
1617

1718
private RedisServerBuilder serverBuilder = new RedisServerBuilder();
@@ -89,4 +90,5 @@ private RedisServer buildMainNode(final Shard shard) throws IOException {
8990
serverBuilder.setting("appendonly no");
9091
return serverBuilder.port(shard.mainNodePort).build();
9192
}
93+
9294
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package redis.embedded.error;
22

33
public class OsArchitectureNotFound extends RuntimeException {
4+
45
public OsArchitectureNotFound(final Throwable cause) {
56
super(cause);
67
}
8+
79
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package redis.embedded.error;
22

33
public class RedisClusterSetupException extends Exception {
4+
45
public RedisClusterSetupException(final String message) { super(message); }
56

67
public RedisClusterSetupException(final String message, final Throwable cause) { super(message, cause); }
8+
79
}

0 commit comments

Comments
 (0)