From 3716299bea4406c728694ba90b9137ecfe0078fc Mon Sep 17 00:00:00 2001 From: Fernando Giannetti Date: Wed, 8 May 2019 15:15:38 -0300 Subject: [PATCH] Add natMap for Sentinel configuration --- .../config/SentinelServersConfig.java | 22 +++++++++++++++++++ .../connection/SentinelConnectionManager.java | 17 +++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/redisson/src/main/java/org/redisson/config/SentinelServersConfig.java b/redisson/src/main/java/org/redisson/config/SentinelServersConfig.java index 5077f3d90..e77355935 100644 --- a/redisson/src/main/java/org/redisson/config/SentinelServersConfig.java +++ b/redisson/src/main/java/org/redisson/config/SentinelServersConfig.java @@ -17,7 +17,11 @@ package org.redisson.config; import java.net.URI; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; + import org.redisson.misc.URIBuilder; /** @@ -28,6 +32,8 @@ import org.redisson.misc.URIBuilder; public class SentinelServersConfig extends BaseMasterSlaveServersConfig { private List sentinelAddresses = new ArrayList(); + + private Map natMap = Collections.emptyMap(); private String masterName; @@ -50,6 +56,7 @@ public class SentinelServersConfig extends BaseMasterSlaveServersConfig(config.getNatMap())); } /** @@ -114,4 +121,19 @@ public class SentinelServersConfig extends BaseMasterSlaveServersConfig 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 natMap) { + this.natMap = natMap; + return this; + } + } diff --git a/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java b/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java index 00b6f7c2f..f51b012a4 100755 --- a/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java @@ -72,6 +72,8 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager { private final Set disconnectedSlaves = new HashSet(); private ScheduledFuture monitorFuture; private AddressResolver sentinelResolver; + + private final Map natMap; public SentinelConnectionManager(SentinelServersConfig cfg, Config config, UUID id) { super(config, id); @@ -86,6 +88,8 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager { this.config = create(cfg); initTimer(this.config); + this.natMap=cfg.getNatMap(); + this.sentinelResolver = resolverGroup.getResolver(getGroup().next()); for (URI addr : cfg.getSentinelAddresses()) { @@ -438,7 +442,10 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager { private String createAddress(String host, Object port) { if (host.contains(":") && !host.startsWith("[")) { - host = "[" + host + "]"; + String[] splittedHost= host.split(":"); + host = "[" + applyNatMap(splittedHost[0]) + splittedHost[1] + "]"; + }else { + host=applyNatMap(host); } return "redis://" + host + ":" + port; } @@ -582,5 +589,13 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager { super.shutdown(); } + + private String applyNatMap(String ip) { + String mappedAddress = natMap.get(ip); + if (mappedAddress != null) { + return mappedAddress; + } + return ip; + } }