Merge branch 'master' into 3.0.0

pull/1933/head
Nikita Koksharov 6 years ago
commit b13061c82f

@ -28,12 +28,12 @@ Features
* [Asynchronous](https://github.com/redisson/redisson/wiki/3.-operations-execution#31-async-way) API * [Asynchronous](https://github.com/redisson/redisson/wiki/3.-operations-execution#31-async-way) API
* Asynchronous connection pool * Asynchronous connection pool
* Lua scripting * 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, Object holder, Binary stream holder, Geospatial holder, BitSet, AtomicLong, AtomicDouble, PublishSubscribe,
Bloom filter, HyperLogLog 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 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 Lock, FairLock, MultiLock, RedLock, ReadWriteLock, Semaphore, PermitExpirableSemaphore, CountDownLatch
* [Distributed services](https://github.com/redisson/redisson/wiki/9.-distributed-services) * [Distributed services](https://github.com/redisson/redisson/wiki/9.-distributed-services)
Remote service, Live Object service, Executor service, Scheduler service, MapReduce service Remote service, Live Object service, Executor service, Scheduler service, MapReduce service

@ -43,9 +43,11 @@ Each RedissonSessionManager created per Web Application and thus creates own Red
```xml ```xml
<GlobalNamingResources> <GlobalNamingResources>
<Resource name="bean/redisson" auth="Container" <Resource name="bean/redisson"
auth="Container"
factory="org.redisson.JndiRedissonFactory" factory="org.redisson.JndiRedissonFactory"
configPath="${catalina.base}/conf/redisson.yaml"/> configPath="${catalina.base}/conf/redisson.yaml"
closeMethod="shutdown"/>
</GlobalNamingResources> </GlobalNamingResources>
``` ```
@ -61,8 +63,6 @@ Each RedissonSessionManager created per Web Application and thus creates own Red
jndiName="bean/redisson" /> 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: **2** Copy two jars into `TOMCAT_BASE/lib` directory:
1. __For JDK 1.8+__ 1. __For JDK 1.8+__

@ -197,7 +197,7 @@ public class RedissonRateLimiter extends RedissonObject implements RRateLimiter
+ "assert(rate ~= false and interval ~= false and type ~= false, 'RateLimiter is not initialized')" + "assert(rate ~= false and interval ~= false and type ~= false, 'RateLimiter is not initialized')"
+ "local valueName = KEYS[2];" + "local valueName = KEYS[2];"
+ "if type == 1 then " + "if type == '1' then "
+ "valueName = KEYS[3];" + "valueName = KEYS[3];"
+ "end;" + "end;"

@ -15,11 +15,13 @@
*/ */
package org.redisson.connection; package org.redisson.connection;
import org.redisson.connection.dns.MultiDnsAddressResolverGroup;
import io.netty.channel.socket.DatagramChannel; 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.DnsAddressResolverGroup;
import io.netty.resolver.dns.DnsNameResolverBuilder;
import io.netty.resolver.dns.DnsServerAddressStreamProvider; import io.netty.resolver.dns.DnsServerAddressStreamProvider;
import io.netty.resolver.dns.DnsServerAddressStreamProviders;
/** /**
* Workaround for https://github.com/netty/netty/issues/8261 * Workaround for https://github.com/netty/netty/issues/8261
@ -32,7 +34,11 @@ public class MultiDnsAddressResolverGroupFactory implements AddressResolverGroup
@Override @Override
public DnsAddressResolverGroup create(Class<? extends DatagramChannel> channelType, public DnsAddressResolverGroup create(Class<? extends DatagramChannel> channelType,
DnsServerAddressStreamProvider nameServerProvider) { DnsServerAddressStreamProvider nameServerProvider) {
return new MultiDnsAddressResolverGroup(channelType, nameServerProvider);
return new DnsAddressResolverGroup(new DnsNameResolverBuilder()
.channelType(NioDatagramChannel.class)
.nameServerProvider(DnsServerAddressStreamProviders.platformDefault())
.resolvedAddressTypes(ResolvedAddressTypes.IPV4_ONLY));
} }
} }

@ -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<InetSocketAddress> {
private final List<AddressResolver<InetSocketAddress>> resolvers;
public GroupAddressResolver(List<AddressResolver<InetSocketAddress>> resolvers) {
super();
this.resolvers = resolvers;
}
@Override
public boolean isSupported(SocketAddress address) {
for (AddressResolver<InetSocketAddress> addressResolver : resolvers) {
if (addressResolver.isSupported(address)) {
return true;
}
}
return false;
}
@Override
public boolean isResolved(SocketAddress address) {
for (AddressResolver<InetSocketAddress> addressResolver : resolvers) {
if (addressResolver.isResolved(address)) {
return true;
}
}
return false;
}
@Override
public Future<InetSocketAddress> resolve(SocketAddress address) {
final Promise<InetSocketAddress> promise = ImmediateEventExecutor.INSTANCE.newPromise();
final AtomicInteger counter = new AtomicInteger(resolvers.size());
for (AddressResolver<InetSocketAddress> addressResolver : resolvers) {
addressResolver.resolve(address).addListener(new FutureListener<InetSocketAddress>() {
@Override
public void operationComplete(Future<InetSocketAddress> 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<InetSocketAddress> resolve(SocketAddress address, Promise<InetSocketAddress> promise) {
throw new UnsupportedOperationException();
}
@Override
public Future<List<InetSocketAddress>> resolveAll(SocketAddress address) {
final Promise<List<InetSocketAddress>> promise = ImmediateEventExecutor.INSTANCE.newPromise();
final AtomicInteger counter = new AtomicInteger(resolvers.size());
for (AddressResolver<InetSocketAddress> addressResolver : resolvers) {
addressResolver.resolveAll(address).addListener(new FutureListener<List<InetSocketAddress>>() {
@Override
public void operationComplete(Future<List<InetSocketAddress>> 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<List<InetSocketAddress>> resolveAll(SocketAddress address, Promise<List<InetSocketAddress>> promise) {
throw new UnsupportedOperationException();
}
@Override
public void close() {
}
}

@ -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<DnsAddressResolverGroup> groups = new ArrayList<DnsAddressResolverGroup>();
public MultiDnsAddressResolverGroup(
Class<? extends DatagramChannel> 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<InetSocketAddress> newResolver(EventLoop eventLoop,
ChannelFactory<? extends DatagramChannel> channelFactory, DnsServerAddressStreamProvider nameServerProvider)
throws Exception {
List<AddressResolver<InetSocketAddress>> resolvers = new ArrayList<AddressResolver<InetSocketAddress>>();
for (DnsAddressResolverGroup group : groups) {
resolvers.add(group.getResolver(eventLoop));
}
return new GroupAddressResolver(resolvers);
}
@Override
public void close() {
for (DnsAddressResolverGroup group : groups) {
group.close();
}
}
}
Loading…
Cancel
Save