make jedis unit tests pass to Redis 2.8.1
* increase sentinel instance to test JedisSentinelTest ** clear() called, slave promoted to master (slave of no one), New Sentinel force to restore it (demote) -> slave is not reusable * ipv6 applied at Redis 2.8 -> localhost / 127.0.0.1 / ::1 is now all same * Makefile: sleep some time for launch each sentinel (workaround to sentinel's issue) ** issue to sentinel leader vote: https://github.com/antirez/redis/issues/1419 *** sentinel may confused to vote with sentinels launched approximately same time
This commit is contained in:
79
Makefile
79
Makefile
@@ -50,6 +50,17 @@ save ""
|
|||||||
appendonly no
|
appendonly no
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define REDIS6_CONF
|
||||||
|
daemonize yes
|
||||||
|
port 6384
|
||||||
|
requirepass foobared
|
||||||
|
masterauth foobared
|
||||||
|
pidfile /tmp/redis6.pid
|
||||||
|
logfile /tmp/redis6.log
|
||||||
|
save ""
|
||||||
|
appendonly no
|
||||||
|
endef
|
||||||
|
|
||||||
define REDIS_SENTINEL1
|
define REDIS_SENTINEL1
|
||||||
port 26379
|
port 26379
|
||||||
daemonize yes
|
daemonize yes
|
||||||
@@ -91,6 +102,7 @@ export REDIS2_CONF
|
|||||||
export REDIS3_CONF
|
export REDIS3_CONF
|
||||||
export REDIS4_CONF
|
export REDIS4_CONF
|
||||||
export REDIS5_CONF
|
export REDIS5_CONF
|
||||||
|
export REDIS6_CONF
|
||||||
export REDIS_SENTINEL1
|
export REDIS_SENTINEL1
|
||||||
export REDIS_SENTINEL2
|
export REDIS_SENTINEL2
|
||||||
export REDIS_SENTINEL3
|
export REDIS_SENTINEL3
|
||||||
@@ -101,8 +113,11 @@ start:
|
|||||||
echo "$$REDIS3_CONF" | redis-server -
|
echo "$$REDIS3_CONF" | redis-server -
|
||||||
echo "$$REDIS4_CONF" | redis-server -
|
echo "$$REDIS4_CONF" | redis-server -
|
||||||
echo "$$REDIS5_CONF" | redis-server -
|
echo "$$REDIS5_CONF" | redis-server -
|
||||||
|
echo "$$REDIS6_CONF" | redis-server -
|
||||||
echo "$$REDIS_SENTINEL1" > /tmp/sentinel1.conf && redis-server /tmp/sentinel1.conf --sentinel
|
echo "$$REDIS_SENTINEL1" > /tmp/sentinel1.conf && redis-server /tmp/sentinel1.conf --sentinel
|
||||||
|
@sleep 0.5
|
||||||
echo "$$REDIS_SENTINEL2" > /tmp/sentinel2.conf && redis-server /tmp/sentinel2.conf --sentinel
|
echo "$$REDIS_SENTINEL2" > /tmp/sentinel2.conf && redis-server /tmp/sentinel2.conf --sentinel
|
||||||
|
@sleep 0.5
|
||||||
echo "$$REDIS_SENTINEL3" > /tmp/sentinel3.conf && redis-server /tmp/sentinel3.conf --sentinel
|
echo "$$REDIS_SENTINEL3" > /tmp/sentinel3.conf && redis-server /tmp/sentinel3.conf --sentinel
|
||||||
|
|
||||||
stop:
|
stop:
|
||||||
@@ -112,76 +127,26 @@ stop:
|
|||||||
kill `cat /tmp/redis3.pid` || true
|
kill `cat /tmp/redis3.pid` || true
|
||||||
kill `cat /tmp/redis4.pid` || true
|
kill `cat /tmp/redis4.pid` || true
|
||||||
kill `cat /tmp/redis5.pid` || true
|
kill `cat /tmp/redis5.pid` || true
|
||||||
|
kill `cat /tmp/redis6.pid` || true
|
||||||
kill `cat /tmp/sentinel1.pid`
|
kill `cat /tmp/sentinel1.pid`
|
||||||
kill `cat /tmp/sentinel2.pid`
|
kill `cat /tmp/sentinel2.pid`
|
||||||
kill `cat /tmp/sentinel3.pid`
|
kill `cat /tmp/sentinel3.pid`
|
||||||
|
|
||||||
test:
|
test:
|
||||||
echo "$$REDIS1_CONF" | redis-server -
|
make start
|
||||||
echo "$$REDIS2_CONF" | redis-server -
|
|
||||||
echo "$$REDIS3_CONF" | redis-server -
|
|
||||||
echo "$$REDIS4_CONF" | redis-server -
|
|
||||||
echo "$$REDIS5_CONF" | redis-server -
|
|
||||||
echo "$$REDIS_SENTINEL1" | redis-server - --sentinel
|
|
||||||
echo "$$REDIS_SENTINEL2" | redis-server - --sentinel
|
|
||||||
echo "$$REDIS_SENTINEL3" | redis-server - --sentinel
|
|
||||||
|
|
||||||
mvn clean compile test
|
mvn clean compile test
|
||||||
|
make stop
|
||||||
kill `cat /tmp/redis1.pid`
|
|
||||||
kill `cat /tmp/redis2.pid`
|
|
||||||
# this get's segfaulted by the tests
|
|
||||||
kill `cat /tmp/redis3.pid` || true
|
|
||||||
kill `cat /tmp/redis4.pid` || true
|
|
||||||
kill `cat /tmp/redis5.pid` || true
|
|
||||||
kill `cat /tmp/sentinel1.pid`
|
|
||||||
kill `cat /tmp/sentinel2.pid`
|
|
||||||
kill `cat /tmp/sentinel3.pid`
|
|
||||||
|
|
||||||
deploy:
|
deploy:
|
||||||
echo "$$REDIS1_CONF" | redis-server -
|
make start
|
||||||
echo "$$REDIS2_CONF" | redis-server -
|
|
||||||
echo "$$REDIS3_CONF" | redis-server -
|
|
||||||
echo "$$REDIS4_CONF" | redis-server -
|
|
||||||
echo "$$REDIS5_CONF" | redis-server -
|
|
||||||
echo "$$REDIS_SENTINEL1" | redis-server - --sentinel
|
|
||||||
echo "$$REDIS_SENTINEL2" | redis-server - --sentinel
|
|
||||||
echo "$$REDIS_SENTINEL3" | redis-server - --sentinel
|
|
||||||
|
|
||||||
mvn clean deploy
|
mvn clean deploy
|
||||||
|
make stop
|
||||||
kill `cat /tmp/redis1.pid`
|
|
||||||
kill `cat /tmp/redis2.pid`
|
|
||||||
# this get's segfaulted by the tests
|
|
||||||
kill `cat /tmp/redis3.pid` || true
|
|
||||||
kill `cat /tmp/redis4.pid` || true
|
|
||||||
kill `cat /tmp/redis5.pid` || true
|
|
||||||
kill `cat /tmp/sentinel1.pid`
|
|
||||||
kill `cat /tmp/sentinel2.pid`
|
|
||||||
kill `cat /tmp/sentinel3.pid`
|
|
||||||
|
|
||||||
release:
|
release:
|
||||||
echo "$$REDIS1_CONF" | redis-server -
|
make start
|
||||||
echo "$$REDIS2_CONF" | redis-server -
|
|
||||||
echo "$$REDIS3_CONF" | redis-server -
|
|
||||||
echo "$$REDIS4_CONF" | redis-server -
|
|
||||||
echo "$$REDIS5_CONF" | redis-server -
|
|
||||||
echo "$$REDIS_SENTINEL1" | redis-server - --sentinel
|
|
||||||
echo "$$REDIS_SENTINEL2" | redis-server - --sentinel
|
|
||||||
echo "$$REDIS_SENTINEL3" | redis-server - --sentinel
|
|
||||||
|
|
||||||
mvn release:clean
|
mvn release:clean
|
||||||
mvn release:prepare
|
mvn release:prepare
|
||||||
mvn release:perform
|
mvn release:perform
|
||||||
|
make stop
|
||||||
kill `cat /tmp/redis1.pid`
|
|
||||||
kill `cat /tmp/redis2.pid`
|
|
||||||
# this get's segfaulted by the tests
|
|
||||||
kill `cat /tmp/redis3.pid` || true
|
|
||||||
kill `cat /tmp/redis4.pid` || true
|
|
||||||
kill `cat /tmp/redis5.pid` || true
|
|
||||||
kill `cat /tmp/sentinel1.pid`
|
|
||||||
kill `cat /tmp/sentinel2.pid`
|
|
||||||
kill `cat /tmp/sentinel3.pid`
|
|
||||||
|
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
|
|||||||
4
pom.xml
4
pom.xml
@@ -45,8 +45,8 @@
|
|||||||
</scm>
|
</scm>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<redis-hosts>localhost:6379,localhost:6380,localhost:6381,localhost:6382,localhost:6383</redis-hosts>
|
<redis-hosts>localhost:6379,localhost:6380,localhost:6381,localhost:6382,localhost:6383,localhost:6384</redis-hosts>
|
||||||
<sentinel-hosts>localhost:26379,localhost:26380</sentinel-hosts>
|
<sentinel-hosts>localhost:26379,localhost:26380,localhost:26381</sentinel-hosts>
|
||||||
<github.global.server>github</github.global.server>
|
<github.global.server>github</github.global.server>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package redis.clients.jedis;
|
package redis.clients.jedis;
|
||||||
|
|
||||||
public class HostAndPort {
|
public class HostAndPort {
|
||||||
|
public static final String LOCALHOST_STR = "localhost";
|
||||||
|
|
||||||
private String host;
|
private String host;
|
||||||
private int port;
|
private int port;
|
||||||
|
|
||||||
@@ -22,11 +24,11 @@ public class HostAndPort {
|
|||||||
if (obj instanceof HostAndPort) {
|
if (obj instanceof HostAndPort) {
|
||||||
HostAndPort hp = (HostAndPort) obj;
|
HostAndPort hp = (HostAndPort) obj;
|
||||||
|
|
||||||
// localhost and 127.0.0.1 is same
|
String thisHost = convertHost(host);
|
||||||
|
String hpHost = convertHost(hp.host);
|
||||||
return port == hp.port &&
|
return port == hp.port &&
|
||||||
(host.equals(hp.host) ||
|
thisHost.equals(hpHost);
|
||||||
(host.equals("localhost") && hp.host.equals("127.0.0.1")) ||
|
|
||||||
(host.equals("127.0.0.1") && hp.host.equals("localhost")) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@@ -36,4 +38,13 @@ public class HostAndPort {
|
|||||||
public String toString() {
|
public String toString() {
|
||||||
return host + ":" + port;
|
return host + ":" + port;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String convertHost(String host) {
|
||||||
|
if (host.equals("127.0.0.1"))
|
||||||
|
return LOCALHOST_STR;
|
||||||
|
else if (host.equals("::1"))
|
||||||
|
return LOCALHOST_STR;
|
||||||
|
|
||||||
|
return host;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,15 +27,18 @@ public class HostAndPortUtil {
|
|||||||
HostAndPort defaulthnp5 = new HostAndPort("localhost", Protocol.DEFAULT_PORT + 4);
|
HostAndPort defaulthnp5 = new HostAndPort("localhost", Protocol.DEFAULT_PORT + 4);
|
||||||
redisHostAndPortList.add(defaulthnp5);
|
redisHostAndPortList.add(defaulthnp5);
|
||||||
|
|
||||||
HostAndPort defaulthnp6 = new HostAndPort("localhost", Protocol.DEFAULT_SENTINEL_PORT);
|
HostAndPort defaulthnp6 = new HostAndPort("localhost", Protocol.DEFAULT_PORT + 5);
|
||||||
sentinelHostAndPortList.add(defaulthnp6);
|
redisHostAndPortList.add(defaulthnp6);
|
||||||
|
|
||||||
HostAndPort defaulthnp7 = new HostAndPort("localhost", Protocol.DEFAULT_SENTINEL_PORT + 1);
|
HostAndPort defaulthnp7 = new HostAndPort("localhost", Protocol.DEFAULT_SENTINEL_PORT);
|
||||||
sentinelHostAndPortList.add(defaulthnp7);
|
sentinelHostAndPortList.add(defaulthnp7);
|
||||||
|
|
||||||
HostAndPort defaulthnp8 = new HostAndPort("localhost", Protocol.DEFAULT_SENTINEL_PORT + 2);
|
HostAndPort defaulthnp8 = new HostAndPort("localhost", Protocol.DEFAULT_SENTINEL_PORT + 1);
|
||||||
sentinelHostAndPortList.add(defaulthnp8);
|
sentinelHostAndPortList.add(defaulthnp8);
|
||||||
|
|
||||||
|
HostAndPort defaulthnp9 = new HostAndPort("localhost", Protocol.DEFAULT_SENTINEL_PORT + 2);
|
||||||
|
sentinelHostAndPortList.add(defaulthnp9);
|
||||||
|
|
||||||
String envRedisHosts = System.getProperty("redis-hosts");
|
String envRedisHosts = System.getProperty("redis-hosts");
|
||||||
String envSentinelHosts = System.getProperty("sentinel-hosts");
|
String envSentinelHosts = System.getProperty("sentinel-hosts");
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ public class JedisSentinelTest extends JedisTestBase {
|
|||||||
|
|
||||||
protected static HostAndPort master = HostAndPortUtil.getRedisServers()
|
protected static HostAndPort master = HostAndPortUtil.getRedisServers()
|
||||||
.get(0);
|
.get(0);
|
||||||
protected static HostAndPort slave = HostAndPortUtil.getRedisServers().get(
|
protected static HostAndPort slave = HostAndPortUtil.getRedisServers()
|
||||||
1);
|
.get(5);
|
||||||
protected static HostAndPort sentinel = HostAndPortUtil
|
protected static HostAndPort sentinel = HostAndPortUtil
|
||||||
.getSentinelServers().get(0);
|
.getSentinelServers().get(0);
|
||||||
|
|
||||||
@@ -44,14 +44,14 @@ public class JedisSentinelTest extends JedisTestBase {
|
|||||||
|
|
||||||
@After
|
@After
|
||||||
public void clear() throws InterruptedException {
|
public void clear() throws InterruptedException {
|
||||||
Jedis j = new Jedis("localhost", 6380);
|
// New Sentinel (after 2.8.1)
|
||||||
j.auth("foobared");
|
// when slave promoted to master (slave of no one), New Sentinel force to restore it (demote)
|
||||||
j.slaveofNoOne();
|
// so, promote(slaveof) slave to master has no effect, not same to old Sentinel's behavior
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void sentinel() {
|
public void sentinel() {
|
||||||
Jedis j = new Jedis("localhost", 26379);
|
Jedis j = new Jedis(sentinel.getHost(), sentinel.getPort());
|
||||||
List<Map<String, String>> masters = j.sentinelMasters();
|
List<Map<String, String>> masters = j.sentinelMasters();
|
||||||
final String masterName = masters.get(0).get("name");
|
final String masterName = masters.get(0).get("name");
|
||||||
|
|
||||||
@@ -59,12 +59,13 @@ public class JedisSentinelTest extends JedisTestBase {
|
|||||||
|
|
||||||
List<String> masterHostAndPort = j
|
List<String> masterHostAndPort = j
|
||||||
.sentinelGetMasterAddrByName(masterName);
|
.sentinelGetMasterAddrByName(masterName);
|
||||||
assertEquals("127.0.0.1", masterHostAndPort.get(0));
|
HostAndPort masterFromSentinel = new HostAndPort(masterHostAndPort.get(0),
|
||||||
assertEquals("6379", masterHostAndPort.get(1));
|
Integer.parseInt(masterHostAndPort.get(1)));
|
||||||
|
assertEquals(master, masterFromSentinel);
|
||||||
|
|
||||||
List<Map<String, String>> slaves = j.sentinelSlaves(masterName);
|
List<Map<String, String>> slaves = j.sentinelSlaves(masterName);
|
||||||
assertTrue(slaves.size() > 0);
|
assertTrue(slaves.size() > 0);
|
||||||
assertEquals("6379", slaves.get(0).get("master-port"));
|
assertEquals(master.getPort(), Integer.parseInt(slaves.get(0).get("master-port")));
|
||||||
|
|
||||||
// DO NOT RE-RUN TEST TOO FAST, RESET TAKES SOME TIME TO... RESET
|
// DO NOT RE-RUN TEST TOO FAST, RESET TAKES SOME TIME TO... RESET
|
||||||
assertEquals(Long.valueOf(1), j.sentinelReset(masterName));
|
assertEquals(Long.valueOf(1), j.sentinelReset(masterName));
|
||||||
|
|||||||
Reference in New Issue
Block a user