From 705511b53c7cbbbf31eefc9bd5f4022199ec6c3b Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Fri, 18 Jan 2019 17:06:33 +0300 Subject: [PATCH 1/5] Fixed - DNSNameResolver bug (workaround). #1646 #1625 #1486 #1693 --- .../MultiDnsAddressResolverGroupFactory.java | 12 +- .../connection/dns/GroupAddressResolver.java | 124 ------------------ .../dns/MultiDnsAddressResolverGroup.java | 80 ----------- 3 files changed, 9 insertions(+), 207 deletions(-) delete mode 100644 redisson/src/main/java/org/redisson/connection/dns/GroupAddressResolver.java delete mode 100644 redisson/src/main/java/org/redisson/connection/dns/MultiDnsAddressResolverGroup.java diff --git a/redisson/src/main/java/org/redisson/connection/MultiDnsAddressResolverGroupFactory.java b/redisson/src/main/java/org/redisson/connection/MultiDnsAddressResolverGroupFactory.java index b10924131..0c6f86fbf 100644 --- a/redisson/src/main/java/org/redisson/connection/MultiDnsAddressResolverGroupFactory.java +++ b/redisson/src/main/java/org/redisson/connection/MultiDnsAddressResolverGroupFactory.java @@ -15,11 +15,13 @@ */ package org.redisson.connection; -import org.redisson.connection.dns.MultiDnsAddressResolverGroup; - import io.netty.channel.socket.DatagramChannel; +import io.netty.channel.socket.nio.NioDatagramChannel; +import io.netty.resolver.ResolvedAddressTypes; import io.netty.resolver.dns.DnsAddressResolverGroup; +import io.netty.resolver.dns.DnsNameResolverBuilder; import io.netty.resolver.dns.DnsServerAddressStreamProvider; +import io.netty.resolver.dns.DnsServerAddressStreamProviders; /** * Workaround for https://github.com/netty/netty/issues/8261 @@ -32,7 +34,11 @@ public class MultiDnsAddressResolverGroupFactory implements AddressResolverGroup @Override public DnsAddressResolverGroup create(Class channelType, DnsServerAddressStreamProvider nameServerProvider) { - return new MultiDnsAddressResolverGroup(channelType, nameServerProvider); + + return new DnsAddressResolverGroup(new DnsNameResolverBuilder() + .channelType(NioDatagramChannel.class) + .nameServerProvider(DnsServerAddressStreamProviders.platformDefault()) + .resolvedAddressTypes(ResolvedAddressTypes.IPV4_ONLY)); } } diff --git a/redisson/src/main/java/org/redisson/connection/dns/GroupAddressResolver.java b/redisson/src/main/java/org/redisson/connection/dns/GroupAddressResolver.java deleted file mode 100644 index 5c9236624..000000000 --- a/redisson/src/main/java/org/redisson/connection/dns/GroupAddressResolver.java +++ /dev/null @@ -1,124 +0,0 @@ -/** - * Copyright (c) 2013-2019 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.connection.dns; - -import java.net.InetSocketAddress; -import java.net.SocketAddress; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; - -import io.netty.resolver.AddressResolver; -import io.netty.util.concurrent.Future; -import io.netty.util.concurrent.FutureListener; -import io.netty.util.concurrent.ImmediateEventExecutor; -import io.netty.util.concurrent.Promise; - -/** - * Workaround for https://github.com/netty/netty/issues/8261 - * - * @author Nikita Koksharov - * - */ -class GroupAddressResolver implements AddressResolver { - - private final List> resolvers; - - public GroupAddressResolver(List> resolvers) { - super(); - this.resolvers = resolvers; - } - - @Override - public boolean isSupported(SocketAddress address) { - for (AddressResolver addressResolver : resolvers) { - if (addressResolver.isSupported(address)) { - return true; - } - } - return false; - } - - @Override - public boolean isResolved(SocketAddress address) { - for (AddressResolver addressResolver : resolvers) { - if (addressResolver.isResolved(address)) { - return true; - } - } - return false; - } - - @Override - public Future resolve(SocketAddress address) { - final Promise promise = ImmediateEventExecutor.INSTANCE.newPromise(); - final AtomicInteger counter = new AtomicInteger(resolvers.size()); - for (AddressResolver addressResolver : resolvers) { - addressResolver.resolve(address).addListener(new FutureListener() { - @Override - public void operationComplete(Future future) throws Exception { - if (future.isSuccess()) { - promise.trySuccess(future.getNow()); - } - - if (counter.decrementAndGet() == 0) { - if (!future.isSuccess()) { - promise.tryFailure(future.cause()); - } - } - } - }); - } - return promise; - } - - @Override - public Future resolve(SocketAddress address, Promise promise) { - throw new UnsupportedOperationException(); - } - - @Override - public Future> resolveAll(SocketAddress address) { - final Promise> promise = ImmediateEventExecutor.INSTANCE.newPromise(); - final AtomicInteger counter = new AtomicInteger(resolvers.size()); - for (AddressResolver addressResolver : resolvers) { - addressResolver.resolveAll(address).addListener(new FutureListener>() { - @Override - public void operationComplete(Future> future) throws Exception { - if (future.isSuccess()) { - promise.trySuccess(future.getNow()); - } - - if (counter.decrementAndGet() == 0) { - if (!future.isSuccess()) { - promise.tryFailure(future.cause()); - } - } - } - }); - } - return promise; - } - - @Override - public Future> resolveAll(SocketAddress address, Promise> promise) { - throw new UnsupportedOperationException(); - } - - @Override - public void close() { - } - -} diff --git a/redisson/src/main/java/org/redisson/connection/dns/MultiDnsAddressResolverGroup.java b/redisson/src/main/java/org/redisson/connection/dns/MultiDnsAddressResolverGroup.java deleted file mode 100644 index b70e1f846..000000000 --- a/redisson/src/main/java/org/redisson/connection/dns/MultiDnsAddressResolverGroup.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright (c) 2013-2019 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.connection.dns; - -import java.net.InetSocketAddress; -import java.util.ArrayList; -import java.util.List; - -import io.netty.channel.ChannelFactory; -import io.netty.channel.EventLoop; -import io.netty.channel.socket.DatagramChannel; -import io.netty.resolver.AddressResolver; -import io.netty.resolver.dns.DnsAddressResolverGroup; -import io.netty.resolver.dns.DnsServerAddressStream; -import io.netty.resolver.dns.DnsServerAddressStreamProvider; -import io.netty.resolver.dns.SingletonDnsServerAddressStreamProvider; - -/** - * Workaround for https://github.com/netty/netty/issues/8261 - * - * @author Nikita Koksharov - * - */ -public class MultiDnsAddressResolverGroup extends DnsAddressResolverGroup { - - private final List groups = new ArrayList(); - - public MultiDnsAddressResolverGroup( - Class channelType, - DnsServerAddressStreamProvider nameServerProvider) { - super(channelType, nameServerProvider); - - DnsServerAddressStream t = nameServerProvider.nameServerAddressStream(""); - InetSocketAddress firstDNS = t.next(); - while (true) { - InetSocketAddress dns = t.next(); - DnsAddressResolverGroup group = new DnsAddressResolverGroup(channelType, - new SingletonDnsServerAddressStreamProvider(dns)); - groups.add(group); - if (dns == firstDNS) { - break; - } - } - - // workaround for short DNS names - groups.add(new DnsAddressResolverGroup(channelType, nameServerProvider)); - } - - @Override - protected AddressResolver newResolver(EventLoop eventLoop, - ChannelFactory channelFactory, DnsServerAddressStreamProvider nameServerProvider) - throws Exception { - List> resolvers = new ArrayList>(); - for (DnsAddressResolverGroup group : groups) { - resolvers.add(group.getResolver(eventLoop)); - } - return new GroupAddressResolver(resolvers); - } - - @Override - public void close() { - for (DnsAddressResolverGroup group : groups) { - group.close(); - } - } - -} From 319fa7109398c8fe1cf994a9c4747f1b4f935a2d Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Fri, 18 Jan 2019 17:10:26 +0300 Subject: [PATCH 2/5] Fixed - RRateLimiter RateType checking. #1870 --- redisson/src/main/java/org/redisson/RedissonRateLimiter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/redisson/src/main/java/org/redisson/RedissonRateLimiter.java b/redisson/src/main/java/org/redisson/RedissonRateLimiter.java index 1fc8cd3a2..fc8fded3b 100644 --- a/redisson/src/main/java/org/redisson/RedissonRateLimiter.java +++ b/redisson/src/main/java/org/redisson/RedissonRateLimiter.java @@ -197,7 +197,7 @@ public class RedissonRateLimiter extends RedissonObject implements RRateLimiter + "assert(rate ~= false and interval ~= false and type ~= false, 'RateLimiter is not initialized')" + "local valueName = KEYS[2];" - + "if type == 1 then " + + "if type == '1' then " + "valueName = KEYS[3];" + "end;" From 640f61ffcde7ebdce17b0216c683200ac63e21a3 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Fri, 18 Jan 2019 18:43:25 +0300 Subject: [PATCH 3/5] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index bc0771c0f..6d036c57e 100644 --- a/README.md +++ b/README.md @@ -28,12 +28,12 @@ Features * [Asynchronous](https://github.com/redisson/redisson/wiki/3.-operations-execution#31-async-way) API * Asynchronous connection pool * Lua scripting -* [Distributed objects](https://github.com/redisson/redisson/wiki/6.-Distributed-objects) +* [Distributed Java objects](https://github.com/redisson/redisson/wiki/6.-Distributed-objects) Object holder, Binary stream holder, Geospatial holder, BitSet, AtomicLong, AtomicDouble, PublishSubscribe, Bloom filter, HyperLogLog -* [Distributed collections](https://github.com/redisson/redisson/wiki/7.-Distributed-collections) +* [Distributed Java collections](https://github.com/redisson/redisson/wiki/7.-Distributed-collections) Map, Multimap, Set, List, SortedSet, ScoredSortedSet, LexSortedSet, Queue, Deque, Blocking Queue, Bounded Blocking Queue, Blocking Deque, Delayed Queue, Priority Queue, Priority Deque -* [Distributed locks and synchronizers](https://github.com/redisson/redisson/wiki/8.-Distributed-locks-and-synchronizers) +* [Distributed Java locks and synchronizers](https://github.com/redisson/redisson/wiki/8.-Distributed-locks-and-synchronizers) Lock, FairLock, MultiLock, RedLock, ReadWriteLock, Semaphore, PermitExpirableSemaphore, CountDownLatch * [Distributed services](https://github.com/redisson/redisson/wiki/9.-distributed-services) Remote service, Live Object service, Executor service, Scheduler service, MapReduce service From 96cb7c63e91d7d7b65359a25059f0b636cf738d6 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Mon, 21 Jan 2019 09:58:37 +0300 Subject: [PATCH 4/5] Update README.md --- redisson-tomcat/README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/redisson-tomcat/README.md b/redisson-tomcat/README.md index d7ce7692d..dff329993 100644 --- a/redisson-tomcat/README.md +++ b/redisson-tomcat/README.md @@ -43,9 +43,11 @@ Each RedissonSessionManager created per Web Application and thus creates own Red ```xml - + configPath="${catalina.base}/conf/redisson.yaml" + closeMethod="shutdown"/> ``` From 9f14ec3ba00dff79a2ea94eb46ed4804d3bbdd46 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Mon, 21 Jan 2019 10:01:30 +0300 Subject: [PATCH 5/5] Update README.md --- redisson-tomcat/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/redisson-tomcat/README.md b/redisson-tomcat/README.md index dff329993..522006194 100644 --- a/redisson-tomcat/README.md +++ b/redisson-tomcat/README.md @@ -63,8 +63,6 @@ Each RedissonSessionManager created per Web Application and thus creates own Red jndiName="bean/redisson" /> ``` -3. Package all classes used in session into separate jar and copy it to `tomcat/lib` directory. - **2** Copy two jars into `TOMCAT_BASE/lib` directory: 1. __For JDK 1.8+__