Merge pull request #2137 from fgiannetti/3.0.0

Add natMap for Sentinel configuration
pull/2152/head
Nikita Koksharov 6 years ago committed by GitHub
commit 059423d9c8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -17,7 +17,11 @@ package org.redisson.config;
import java.net.URI; import java.net.URI;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import org.redisson.misc.URIBuilder; import org.redisson.misc.URIBuilder;
/** /**
@ -28,6 +32,8 @@ import org.redisson.misc.URIBuilder;
public class SentinelServersConfig extends BaseMasterSlaveServersConfig<SentinelServersConfig> { public class SentinelServersConfig extends BaseMasterSlaveServersConfig<SentinelServersConfig> {
private List<URI> sentinelAddresses = new ArrayList<URI>(); private List<URI> sentinelAddresses = new ArrayList<URI>();
private Map<String, String> natMap = Collections.emptyMap();
private String masterName; private String masterName;
@ -50,6 +56,7 @@ public class SentinelServersConfig extends BaseMasterSlaveServersConfig<Sentinel
setMasterName(config.getMasterName()); setMasterName(config.getMasterName());
setDatabase(config.getDatabase()); setDatabase(config.getDatabase());
setScanInterval(config.getScanInterval()); setScanInterval(config.getScanInterval());
setNatMap(new HashMap<>(config.getNatMap()));
} }
/** /**
@ -114,4 +121,19 @@ public class SentinelServersConfig extends BaseMasterSlaveServersConfig<Sentinel
return this; return this;
} }
public Map<String, String> getNatMap() {
return natMap;
}
/**
* Defines NAT mapping. Address as a map key is replaced with mapped address as value.
*
* @param natMap - nat mapping
* @return config
*/
public SentinelServersConfig setNatMap(Map<String, String> natMap) {
this.natMap = natMap;
return this;
}
} }

@ -79,6 +79,8 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager {
private final Set<URI> disconnectedSlaves = new HashSet<>(); private final Set<URI> disconnectedSlaves = new HashSet<>();
private ScheduledFuture<?> monitorFuture; private ScheduledFuture<?> monitorFuture;
private AddressResolver<InetSocketAddress> sentinelResolver; private AddressResolver<InetSocketAddress> sentinelResolver;
private final Map<String, String> natMap;
private boolean usePassword = false; private boolean usePassword = false;
@ -95,6 +97,8 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager {
this.config = create(cfg); this.config = create(cfg);
initTimer(this.config); initTimer(this.config);
this.natMap=cfg.getNatMap();
this.sentinelResolver = resolverGroup.getResolver(getGroup().next()); this.sentinelResolver = resolverGroup.getResolver(getGroup().next());
for (URI addr : cfg.getSentinelAddresses()) { for (URI addr : cfg.getSentinelAddresses()) {
@ -469,8 +473,14 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager {
} }
private String createAddress(String host, Object port) { private String createAddress(String host, Object port) {
if (host.contains(":") && !host.startsWith("[")) { if (host.contains(":")){
host = "[" + host + "]"; String pureHost = host.replaceAll("[\\[\\]]","");
host = applyNatMap(pureHost);
if(host.contains(":")){
host = "[" + host + "]";
}
}else {
host=applyNatMap(host);
} }
return "redis://" + host + ":" + port; return "redis://" + host + ":" + port;
} }
@ -607,5 +617,13 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager {
super.shutdown(); super.shutdown();
} }
private String applyNatMap(String ip) {
String mappedAddress = natMap.get(ip);
if (mappedAddress != null) {
return mappedAddress;
}
return ip;
}
} }

Loading…
Cancel
Save