use of org.redisson.RedisRunner.RedisProcess in project redisson by redisson.
the class RedissonTest method testReconnection.
@Test
public void testReconnection() throws IOException, InterruptedException, TimeoutException {
RedisProcess runner = new RedisRunner().appendonly(true).randomDir().randomPort().run();
Config config = new Config();
config.useSingleServer().setAddress(runner.getRedisServerAddressAndPort());
RedissonClient r = Redisson.create(config);
r.getBucket("myBucket").set(1);
assertThat(r.getBucket("myBucket").get()).isEqualTo(1);
Assertions.assertEquals(0, runner.stop());
AtomicBoolean hasError = new AtomicBoolean();
try {
r.getBucket("myBucket").get();
} catch (Exception e) {
// skip error
hasError.set(true);
}
assertThat(hasError.get()).isTrue();
RedisProcess pp = new RedisRunner().appendonly(true).port(runner.getRedisServerPort()).dir(runner.getDefaultDir()).run();
assertThat(r.getBucket("myBucket").get()).isEqualTo(1);
r.shutdown();
Assertions.assertEquals(0, pp.stop());
}
use of org.redisson.RedisRunner.RedisProcess in project redisson by redisson.
the class RedissonTest method testMemoryScript.
@Test
public void testMemoryScript() throws IOException, InterruptedException {
RedisProcess p = redisTestSmallMemory();
Config config = new Config();
config.useSingleServer().setAddress(p.getRedisServerAddressAndPort()).setTimeout(100000);
Assertions.assertThrows(RedisOutOfMemoryException.class, () -> {
RedissonClient r = null;
try {
r = Redisson.create(config);
r.getKeys().flushall();
for (int i = 0; i < 10000; i++) {
r.getMap("test").put("" + i, "" + i);
}
} finally {
r.shutdown();
p.stop();
}
});
}
use of org.redisson.RedisRunner.RedisProcess in project redisson by redisson.
the class RedissonTest method testFailoverInCluster.
@Test
public void testFailoverInCluster() throws Exception {
RedisRunner master1 = new RedisRunner().port(6890).randomDir().nosave();
RedisRunner master2 = new RedisRunner().port(6891).randomDir().nosave();
RedisRunner master3 = new RedisRunner().port(6892).randomDir().nosave();
RedisRunner slave1 = new RedisRunner().port(6900).randomDir().nosave();
RedisRunner slave2 = new RedisRunner().port(6901).randomDir().nosave();
RedisRunner slave3 = new RedisRunner().port(6902).randomDir().nosave();
RedisRunner slave4 = new RedisRunner().port(6903).randomDir().nosave();
ClusterRunner clusterRunner = new ClusterRunner().addNode(master1, slave1, slave4).addNode(master2, slave2).addNode(master3, slave3);
ClusterProcesses process = clusterRunner.run();
Thread.sleep(5000);
Config config = new Config();
config.useClusterServers().setLoadBalancer(new RandomLoadBalancer()).addNodeAddress(process.getNodes().stream().findAny().get().getRedisServerAddressAndPort());
RedissonClient redisson = Redisson.create(config);
RedisProcess master = process.getNodes().stream().filter(x -> x.getRedisServerPort() == master1.getPort()).findFirst().get();
List<RFuture<?>> futures = new ArrayList<RFuture<?>>();
CountDownLatch latch = new CountDownLatch(1);
Thread t = new Thread() {
public void run() {
for (int i = 0; i < 2000; i++) {
RFuture<?> f1 = redisson.getBucket("i" + i).getAsync();
RFuture<?> f2 = redisson.getBucket("i" + i).setAsync("");
RFuture<?> f3 = redisson.getTopic("topic").publishAsync("testmsg");
futures.add(f1);
futures.add(f2);
futures.add(f3);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (i % 100 == 0) {
System.out.println("step: " + i);
}
}
latch.countDown();
}
};
t.start();
t.join(1000);
Set<InetSocketAddress> oldMasters = new HashSet<>();
Collection<RedisClusterMaster> masterNodes = redisson.getRedisNodes(RedisNodes.CLUSTER).getMasters();
for (RedisClusterMaster clusterNode : masterNodes) {
oldMasters.add(clusterNode.getAddr());
}
master.stop();
System.out.println("master " + master.getRedisServerAddressAndPort() + " has been stopped!");
Thread.sleep(TimeUnit.SECONDS.toMillis(90));
RedisProcess newMaster = null;
Collection<RedisClusterMaster> newMasterNodes = redisson.getRedisNodes(RedisNodes.CLUSTER).getMasters();
for (RedisClusterMaster clusterNode : newMasterNodes) {
if (!oldMasters.contains(clusterNode.getAddr())) {
newMaster = process.getNodes().stream().filter(x -> x.getRedisServerPort() == clusterNode.getAddr().getPort()).findFirst().get();
break;
}
}
assertThat(newMaster).isNotNull();
Thread.sleep(30000);
newMaster.stop();
System.out.println("new master " + newMaster.getRedisServerAddressAndPort() + " has been stopped!");
Thread.sleep(TimeUnit.SECONDS.toMillis(80));
assertThat(latch.await(30, TimeUnit.SECONDS)).isTrue();
int errors = 0;
int success = 0;
int readonlyErrors = 0;
for (RFuture<?> rFuture : futures) {
try {
rFuture.toCompletableFuture().join();
} catch (Exception e) {
// skip
}
if (!rFuture.isSuccess()) {
errors++;
} else {
success++;
}
}
redisson.shutdown();
process.shutdown();
assertThat(readonlyErrors).isZero();
assertThat(errors).isLessThan(1000);
assertThat(success).isGreaterThan(5000);
}
use of org.redisson.RedisRunner.RedisProcess in project redisson by redisson.
the class JCacheTest method testRedissonConfig.
@Test
public void testRedissonConfig() throws InterruptedException, IllegalArgumentException, IOException {
RedisProcess runner = new RedisRunner().nosave().randomDir().port(6311).run();
URL configUrl = getClass().getResource("redisson-jcache.yaml");
Config cfg = Config.fromYAML(configUrl);
Configuration<String, String> config = RedissonConfiguration.fromConfig(cfg);
Cache<String, String> cache = Caching.getCachingProvider().getCacheManager().createCache("test", config);
cache.put("1", "2");
Assertions.assertEquals("2", cache.get("1"));
cache.put("key", "value");
String result = cache.getAndRemove("key");
Assertions.assertEquals("value", result);
Assertions.assertNull(cache.get("key"));
cache.put("key", "value");
cache.remove("key");
Assertions.assertNull(cache.get("key"));
cache.close();
runner.stop();
}
use of org.redisson.RedisRunner.RedisProcess in project redisson by redisson.
the class JCacheTest method testUpdateWithoutOldValue.
@Test
public void testUpdateWithoutOldValue() throws IOException, InterruptedException, URISyntaxException {
RedisProcess runner = new RedisRunner().nosave().randomDir().port(6311).run();
MutableConfiguration<String, String> config = new MutableConfiguration<>();
config.setStoreByValue(true);
URI configUri = getClass().getResource("redisson-jcache.yaml").toURI();
Cache<String, String> cache = Caching.getCachingProvider().getCacheManager(configUri, null).createCache("test", config);
CountDownLatch latch = new CountDownLatch(1);
String key = "123";
UpdatedListener secondClientListener = new UpdatedListener(latch, key, null, "90");
MutableCacheEntryListenerConfiguration<String, String> secondListenerConfiguration = new MutableCacheEntryListenerConfiguration<>(FactoryBuilder.factoryOf(secondClientListener), null, false, true);
cache.registerCacheEntryListener(secondListenerConfiguration);
cache.put(key, "80");
assertThat(cache.get(key)).isNotNull();
cache.put(key, "90");
latch.await();
assertThat(cache.get(key)).isNotNull();
cache.close();
runner.stop();
}
Aggregations