From 550d9700ce325c54c3aabb162b41c66dbf7dfc10 Mon Sep 17 00:00:00 2001 From: Nikita Date: Sun, 4 Mar 2018 15:10:54 +0300 Subject: [PATCH] default value of addressResolverGroupFactory setting couldn't be serialized properly --- .../main/java/org/redisson/config/Config.java | 4 ++- .../org/redisson/config/ConfigSupport.java | 4 +++ .../AddressResolverGroupFactory.java | 15 +------- .../DnsAddressResolverGroupFactory.java | 36 +++++++++++++++++++ ...ndRobinDnsAddressResolverGroupFactory.java | 36 +++++++++++++++++++ 5 files changed, 80 insertions(+), 15 deletions(-) create mode 100644 redisson/src/main/java/org/redisson/connection/DnsAddressResolverGroupFactory.java create mode 100644 redisson/src/main/java/org/redisson/connection/RoundRobinDnsAddressResolverGroupFactory.java diff --git a/redisson/src/main/java/org/redisson/config/Config.java b/redisson/src/main/java/org/redisson/config/Config.java index 1a544eb91..c2576d8f7 100644 --- a/redisson/src/main/java/org/redisson/config/Config.java +++ b/redisson/src/main/java/org/redisson/config/Config.java @@ -27,6 +27,7 @@ import org.redisson.codec.DefaultReferenceCodecProvider; import org.redisson.codec.JsonJacksonCodec; import org.redisson.codec.ReferenceCodecProvider; import org.redisson.connection.ConnectionManager; +import org.redisson.connection.DnsAddressResolverGroupFactory; import org.redisson.connection.AddressResolverGroupFactory; import org.redisson.connection.ReplicatedConnectionManager; @@ -90,7 +91,7 @@ public class Config { /** * AddressResolverGroupFactory switch between default and round robin */ - private AddressResolverGroupFactory addressResolverGroupFactory = AddressResolverGroupFactory.DNS_ADDRESS_RESOLVER_GROUP; + private AddressResolverGroupFactory addressResolverGroupFactory = new DnsAddressResolverGroupFactory(); public Config() { } @@ -601,6 +602,7 @@ public class Config { /** * Used to switch between {@link io.netty.resolver.dns.DnsAddressResolverGroup} implementations. * Switch to round robin {@link io.netty.resolver.dns.RoundRobinDnsAddressResolverGroup} when you need to optimize the url resolving. + * * @param addressResolverGroupFactory */ public void setAddressResolverGroupFactory(AddressResolverGroupFactory addressResolverGroupFactory) { diff --git a/redisson/src/main/java/org/redisson/config/ConfigSupport.java b/redisson/src/main/java/org/redisson/config/ConfigSupport.java index 578dff5ee..7d928eaaa 100644 --- a/redisson/src/main/java/org/redisson/config/ConfigSupport.java +++ b/redisson/src/main/java/org/redisson/config/ConfigSupport.java @@ -30,6 +30,7 @@ import org.redisson.api.RedissonNodeInitializer; import org.redisson.client.codec.Codec; import org.redisson.cluster.ClusterConnectionManager; import org.redisson.codec.ReferenceCodecProvider; +import org.redisson.connection.AddressResolverGroupFactory; import org.redisson.connection.ConnectionManager; import org.redisson.connection.ElasticacheConnectionManager; import org.redisson.connection.MasterSlaveConnectionManager; @@ -267,13 +268,16 @@ public class ConfigSupport { private ObjectMapper createMapper(JsonFactory mapping, ClassLoader classLoader) { ObjectMapper mapper = new ObjectMapper(mapping); + mapper.addMixIn(MasterSlaveServersConfig.class, MasterSlaveServersConfigMixIn.class); mapper.addMixIn(SingleServerConfig.class, SingleSeverConfigMixIn.class); mapper.addMixIn(Config.class, ConfigMixIn.class); mapper.addMixIn(ReferenceCodecProvider.class, ClassMixIn.class); + mapper.addMixIn(AddressResolverGroupFactory.class, ClassMixIn.class); mapper.addMixIn(Codec.class, ClassMixIn.class); mapper.addMixIn(RedissonNodeInitializer.class, ClassMixIn.class); mapper.addMixIn(LoadBalancer.class, ClassMixIn.class); + FilterProvider filterProvider = new SimpleFilterProvider() .addFilter("classFilter", SimpleBeanPropertyFilter.filterOutAllExcept()); mapper.setFilterProvider(filterProvider); diff --git a/redisson/src/main/java/org/redisson/connection/AddressResolverGroupFactory.java b/redisson/src/main/java/org/redisson/connection/AddressResolverGroupFactory.java index f69676263..03af4c089 100644 --- a/redisson/src/main/java/org/redisson/connection/AddressResolverGroupFactory.java +++ b/redisson/src/main/java/org/redisson/connection/AddressResolverGroupFactory.java @@ -18,25 +18,12 @@ package org.redisson.connection; import io.netty.channel.socket.DatagramChannel; import io.netty.resolver.dns.DnsAddressResolverGroup; import io.netty.resolver.dns.DnsServerAddressStreamProvider; -import io.netty.resolver.dns.RoundRobinDnsAddressResolverGroup; /** * Created by hasaadon on 15/02/2018. */ public interface AddressResolverGroupFactory { - DnsAddressResolverGroup create(Class channelType, DnsServerAddressStreamProvider nameServerProvider); - AddressResolverGroupFactory ROUND_ROBIN_DNS_ADDRESS_RESOLVER_GROUP = new AddressResolverGroupFactory() { - @Override - public DnsAddressResolverGroup create(Class channelType, DnsServerAddressStreamProvider nameServerProvider) { - return new RoundRobinDnsAddressResolverGroup(channelType, nameServerProvider); - } - }; + DnsAddressResolverGroup create(Class channelType, DnsServerAddressStreamProvider nameServerProvider); - AddressResolverGroupFactory DNS_ADDRESS_RESOLVER_GROUP = new AddressResolverGroupFactory() { - @Override - public DnsAddressResolverGroup create(Class channelType, DnsServerAddressStreamProvider nameServerProvider) { - return new DnsAddressResolverGroup(channelType, nameServerProvider); - } - }; } diff --git a/redisson/src/main/java/org/redisson/connection/DnsAddressResolverGroupFactory.java b/redisson/src/main/java/org/redisson/connection/DnsAddressResolverGroupFactory.java new file mode 100644 index 000000000..ffc185abf --- /dev/null +++ b/redisson/src/main/java/org/redisson/connection/DnsAddressResolverGroupFactory.java @@ -0,0 +1,36 @@ +/** + * 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.connection; + +import io.netty.channel.socket.DatagramChannel; +import io.netty.resolver.dns.DnsAddressResolverGroup; +import io.netty.resolver.dns.DnsServerAddressStreamProvider; + +/** + * + * @author Nikita Koksharov + * @author hasaadon + * + */ +public class DnsAddressResolverGroupFactory implements AddressResolverGroupFactory { + + @Override + public DnsAddressResolverGroup create(Class channelType, + DnsServerAddressStreamProvider nameServerProvider) { + return new DnsAddressResolverGroup(channelType, nameServerProvider); + } + +} diff --git a/redisson/src/main/java/org/redisson/connection/RoundRobinDnsAddressResolverGroupFactory.java b/redisson/src/main/java/org/redisson/connection/RoundRobinDnsAddressResolverGroupFactory.java new file mode 100644 index 000000000..34a8053bc --- /dev/null +++ b/redisson/src/main/java/org/redisson/connection/RoundRobinDnsAddressResolverGroupFactory.java @@ -0,0 +1,36 @@ +/** + * 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.connection; + +import io.netty.channel.socket.DatagramChannel; +import io.netty.resolver.dns.DnsAddressResolverGroup; +import io.netty.resolver.dns.DnsServerAddressStreamProvider; +import io.netty.resolver.dns.RoundRobinDnsAddressResolverGroup; + +/** + * + * @author Nikita Koksharov + * @author hasaadon + * + */ +public class RoundRobinDnsAddressResolverGroupFactory implements AddressResolverGroupFactory { + + @Override + public DnsAddressResolverGroup create(Class channelType, DnsServerAddressStreamProvider nameServerProvider) { + return new RoundRobinDnsAddressResolverGroup(channelType, nameServerProvider); + } + +}