diff --git a/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java b/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java index 4c38ede69..6974246d2 100755 --- a/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java @@ -223,6 +223,10 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager { final String slaveAddr = ip + ":" + port; + if (!isUseSameMaster(parts)) { + return; + } + // to avoid addition twice if (slaves.putIfAbsent(slaveAddr, true) == null) { final MasterSlaveEntry entry = getEntry(singleSlotRange.getStartSlot()); @@ -298,6 +302,21 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager { } } + private boolean isUseSameMaster(String[] parts) { + String ip = parts[2]; + String port = parts[3]; + + String slaveAddr = ip + ":" + port; + + String master = currentMaster.get(); + String slaveMaster = parts[6] + ":" + parts[7]; + if (!master.equals(slaveMaster)) { + log.warn("Skipped slave up {} for master {} differs from current {}", slaveAddr, slaveMaster, master); + return false; + } + return true; + } + private void onNodeUp(URL addr, String msg) { String[] parts = msg.split(" "); @@ -306,6 +325,10 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager { String ip = parts[2]; String port = parts[3]; + if (!isUseSameMaster(parts)) { + return; + } + slaveUp(ip, port); } else if ("master".equals(parts[0])) { String ip = parts[2];