From c169193bc643b22d8397b76e458a541e204dcb63 Mon Sep 17 00:00:00 2001 From: Nikita Date: Thu, 17 May 2018 14:35:19 +0300 Subject: [PATCH] refactoring --- .../java/org/redisson/BaseRemoteService.java | 2 +- .../main/java/org/redisson/RedissonNode.java | 3 +- .../org/redisson/RedissonRemoteService.java | 2 +- .../org/redisson/codec/DefenceModule.java | 75 ------------------- .../org/redisson/codec/JsonJacksonCodec.java | 2 - .../MasterSlaveConnectionManager.java | 2 +- .../RedissonScheduledExecutorServiceTest.java | 29 ++++++- 7 files changed, 33 insertions(+), 82 deletions(-) delete mode 100644 redisson/src/main/java/org/redisson/codec/DefenceModule.java diff --git a/redisson/src/main/java/org/redisson/BaseRemoteService.java b/redisson/src/main/java/org/redisson/BaseRemoteService.java index 692e670e8..113aaa6e6 100644 --- a/redisson/src/main/java/org/redisson/BaseRemoteService.java +++ b/redisson/src/main/java/org/redisson/BaseRemoteService.java @@ -719,7 +719,7 @@ public abstract class BaseRemoteService { } RMap canceledRequests = redisson.getMap(mapName, codec); - RFuture future = canceledRequests.getAsync(requestId.toString()); + RFuture future = canceledRequests.removeAsync(requestId.toString()); future.addListener(new FutureListener() { @Override public void operationComplete(Future future) throws Exception { diff --git a/redisson/src/main/java/org/redisson/RedissonNode.java b/redisson/src/main/java/org/redisson/RedissonNode.java index 5b90838f5..5106eecfe 100644 --- a/redisson/src/main/java/org/redisson/RedissonNode.java +++ b/redisson/src/main/java/org/redisson/RedissonNode.java @@ -19,6 +19,7 @@ import java.io.File; import java.io.IOException; import java.net.InetSocketAddress; import java.util.Map.Entry; +import java.util.concurrent.TimeUnit; import org.redisson.api.RExecutorService; import org.redisson.api.RFuture; @@ -116,7 +117,7 @@ public class RedissonNode { */ public void shutdown() { if (hasRedissonInstance) { - redisson.shutdown(); + redisson.shutdown(0, 15, TimeUnit.MINUTES); log.info("Redisson node has been shutdown successfully"); } } diff --git a/redisson/src/main/java/org/redisson/RedissonRemoteService.java b/redisson/src/main/java/org/redisson/RedissonRemoteService.java index b46ff7dbd..18c19e97b 100644 --- a/redisson/src/main/java/org/redisson/RedissonRemoteService.java +++ b/redisson/src/main/java/org/redisson/RedissonRemoteService.java @@ -220,10 +220,10 @@ public class RedissonRemoteService extends BaseRemoteService implements RRemoteS return; } - final String responseName = getResponseQueueName(request.getExecutorId()); // send the ack only if expected if (request.getOptions().isAckExpected()) { + final String responseName = getResponseQueueName(request.getExecutorId()); String ackName = getAckName(request.getId()); RFuture ackClientsFuture = commandExecutor.evalWriteAsync(responseName, LongCodec.INSTANCE, RedisCommands.EVAL_BOOLEAN, diff --git a/redisson/src/main/java/org/redisson/codec/DefenceModule.java b/redisson/src/main/java/org/redisson/codec/DefenceModule.java deleted file mode 100644 index 6c0e54a15..000000000 --- a/redisson/src/main/java/org/redisson/codec/DefenceModule.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Copyright 2018 Nikita Koksharov - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.redisson.codec; - -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -import com.fasterxml.jackson.databind.BeanDescription; -import com.fasterxml.jackson.databind.DeserializationConfig; -import com.fasterxml.jackson.databind.deser.ValueInstantiator; -import com.fasterxml.jackson.databind.deser.ValueInstantiators.Base; -import com.fasterxml.jackson.databind.module.SimpleModule; - -/** - * Fix for https://github.com/FasterXML/jackson-databind/issues/1599 - * - * @author Nikita Koksharov - * - * TODO remove after update to latest version of Jackson - * - */ -public class DefenceModule extends SimpleModule { - - private static final long serialVersionUID = -429891510707420220L; - - public static class DefenceValueInstantiator extends Base { - - protected final static Set DEFAULT_NO_DESER_CLASS_NAMES; - static { - Set s = new HashSet(); - // Courtesy of [https://github.com/kantega/notsoserial]: - // (and wrt [databind#1599] - s.add("org.apache.commons.collections.functors.InvokerTransformer"); - s.add("org.apache.commons.collections.functors.InstantiateTransformer"); - s.add("org.apache.commons.collections4.functors.InvokerTransformer"); - s.add("org.apache.commons.collections4.functors.InstantiateTransformer"); - s.add("org.codehaus.groovy.runtime.ConvertedClosure"); - s.add("org.codehaus.groovy.runtime.MethodClosure"); - s.add("org.springframework.beans.factory.ObjectFactory"); - s.add("com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl"); - DEFAULT_NO_DESER_CLASS_NAMES = Collections.unmodifiableSet(s); - } - - @Override - public ValueInstantiator findValueInstantiator(DeserializationConfig config, BeanDescription beanDesc, - ValueInstantiator defaultInstantiator) { - if (DEFAULT_NO_DESER_CLASS_NAMES.contains(beanDesc.getClassInfo().getRawType().getName())) { - throw new IllegalArgumentException("Illegal type " + beanDesc.getClassInfo().getRawType().getName() + " to deserialize: prevented for security reasons"); - } - - return super.findValueInstantiator(config, beanDesc, defaultInstantiator); - } - - } - - @Override - public void setupModule(SetupContext context) { - context.addValueInstantiators(new DefenceValueInstantiator()); - } - -} diff --git a/redisson/src/main/java/org/redisson/codec/JsonJacksonCodec.java b/redisson/src/main/java/org/redisson/codec/JsonJacksonCodec.java index cb00e6472..f8e5145f3 100755 --- a/redisson/src/main/java/org/redisson/codec/JsonJacksonCodec.java +++ b/redisson/src/main/java/org/redisson/codec/JsonJacksonCodec.java @@ -153,8 +153,6 @@ public class JsonJacksonCodec extends BaseCodec { } protected void init(ObjectMapper objectMapper) { - objectMapper.registerModule(new DefenceModule()); - objectMapper.setSerializationInclusion(Include.NON_NULL); objectMapper.setVisibility(objectMapper.getSerializationConfig() .getDefaultVisibilityChecker() diff --git a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java index 7dc2f0b19..3c6c1965f 100644 --- a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java @@ -627,7 +627,6 @@ public class MasterSlaveConnectionManager implements ConnectionManager { if (dnsMonitor != null) { dnsMonitor.stop(); } - resolverGroup.close(); if (cfg.getExecutor() == null) { executor.shutdown(); @@ -651,6 +650,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager { } result.awaitUninterruptibly(timeout, unit); + resolverGroup.close(); if (cfg.getEventLoopGroup() == null) { group.shutdownGracefully(quietPeriod, timeout, unit).syncUninterruptibly(); diff --git a/redisson/src/test/java/org/redisson/executor/RedissonScheduledExecutorServiceTest.java b/redisson/src/test/java/org/redisson/executor/RedissonScheduledExecutorServiceTest.java index 36c920b65..98090be02 100644 --- a/redisson/src/test/java/org/redisson/executor/RedissonScheduledExecutorServiceTest.java +++ b/redisson/src/test/java/org/redisson/executor/RedissonScheduledExecutorServiceTest.java @@ -79,7 +79,7 @@ public class RedissonScheduledExecutorServiceTest extends BaseTest { } for (RScheduledFuture future : futures) { - assertThat(future.awaitUninterruptibly(5000)).isTrue(); + assertThat(future.awaitUninterruptibly(5100)).isTrue(); } node.shutdown(); @@ -111,6 +111,9 @@ public class RedissonScheduledExecutorServiceTest extends BaseTest { cancel(future1); Thread.sleep(2000); assertThat(redisson.getAtomicLong("executed1").isExists()).isFalse(); + + redisson.getKeys().delete("executed1"); + assertThat(redisson.getKeys().count()).isZero(); } @Test @@ -121,6 +124,9 @@ public class RedissonScheduledExecutorServiceTest extends BaseTest { Thread.sleep(2000); assertThat(redisson.getAtomicLong("executed1").isExists()).isFalse(); assertThat(executor.delete()).isFalse(); + + redisson.getKeys().delete("executed1"); + assertThat(redisson.getKeys().count()).isZero(); } @Test @@ -135,6 +141,9 @@ public class RedissonScheduledExecutorServiceTest extends BaseTest { Thread.sleep(2000); assertThat(executor.cancelTask(futureAsync.getTaskId())).isTrue(); assertThat(redisson.getBucket("executed2").get()).isBetween(1000L, Long.MAX_VALUE); + + redisson.getKeys().delete("executed1", "executed2"); + assertThat(redisson.getKeys().count()).isZero(); } @Test @@ -155,6 +164,9 @@ public class RedissonScheduledExecutorServiceTest extends BaseTest { assertThat(executor.cancelTask(futureAsync.getTaskId())).isTrue(); Thread.sleep(3000); assertThat(redisson.getAtomicLong("executed2").get()).isEqualTo(2); + + redisson.getKeys().delete("executed1", "executed2"); + assertThat(redisson.getKeys().count()).isZero(); } @Test @@ -180,6 +192,9 @@ public class RedissonScheduledExecutorServiceTest extends BaseTest { Thread.sleep(3000); assertThat(redisson.getAtomicLong("counter").get()).isEqualTo(3); + + redisson.getKeys().delete("counter", "executed1", "executed2"); + assertThat(redisson.getKeys().count()).isZero(); } private void cancel(ScheduledFuture future1) throws InterruptedException, ExecutionException { @@ -204,6 +219,9 @@ public class RedissonScheduledExecutorServiceTest extends BaseTest { Thread.sleep(3000); assertThat(redisson.getAtomicLong("executed1").get()).isEqualTo(5); + + redisson.getKeys().delete("executed1"); + assertThat(redisson.getKeys().count()).isZero(); } @@ -223,6 +241,9 @@ public class RedissonScheduledExecutorServiceTest extends BaseTest { assertThat(redisson.getAtomicLong("executed1").get()).isEqualTo(1); assertThat(redisson.getAtomicLong("executed2").get()).isEqualTo(1); assertThat(redisson.getAtomicLong("executed3").get()).isEqualTo(1); + + redisson.getKeys().delete("executed1", "executed2", "executed3"); + assertThat(redisson.getKeys().count()).isZero(); } @Test @@ -239,6 +260,9 @@ public class RedissonScheduledExecutorServiceTest extends BaseTest { assertThat(redisson.getAtomicLong("executed1").get()).isEqualTo(1); assertThat(redisson.getAtomicLong("executed2").get()).isEqualTo(1); assertThat(redisson.getAtomicLong("executed3").get()).isEqualTo(1); + + redisson.getKeys().delete("executed1", "executed2", "executed3"); + assertThat(redisson.getKeys().count()).isZero(); } @Test @@ -249,6 +273,9 @@ public class RedissonScheduledExecutorServiceTest extends BaseTest { future.get(); assertThat(System.currentTimeMillis() - startTime).isBetween(5000L, 5200L); assertThat(redisson.getAtomicLong("executed").get()).isEqualTo(1); + + redisson.getKeys().delete("executed"); + assertThat(redisson.getKeys().count()).isZero(); } @Test