Fixed - continues "Unable to unfreeze entry" in sentinel mode. #4584

pull/4597/merge
Nikita Koksharov 2 years ago
parent f81a0be95c
commit a36f9df3cc

@ -157,15 +157,6 @@ public class MasterSlaveEntry {
});
}
public boolean slaveDown(ClientConnectionsEntry entry, FreezeReason freezeReason) {
ClientConnectionsEntry e = slaveBalancer.freeze(entry, freezeReason);
if (e == null) {
return false;
}
return slaveDown(entry);
}
public boolean slaveDown(InetSocketAddress address, FreezeReason freezeReason) {
ClientConnectionsEntry entry = slaveBalancer.freeze(address, freezeReason);
if (entry == null) {
@ -184,15 +175,6 @@ public class MasterSlaveEntry {
return slaveDownAsync(entry);
}
public boolean slaveDown(RedisURI address, FreezeReason freezeReason) {
ClientConnectionsEntry entry = slaveBalancer.freeze(address, freezeReason);
if (entry == null) {
return false;
}
return slaveDown(entry);
}
public CompletableFuture<Boolean> slaveDownAsync(RedisURI address, FreezeReason freezeReason) {
ClientConnectionsEntry entry = slaveBalancer.freeze(address, freezeReason);
if (entry == null) {
@ -208,7 +190,9 @@ public class MasterSlaveEntry {
}
// add master as slave if no more slaves available
if (!config.checkSkipSlavesInit() && slaveBalancer.getAvailableClients() == 0) {
if (!config.checkSkipSlavesInit()
&& !masterEntry.getClient().getAddr().equals(entry.getClient().getAddr())
&& slaveBalancer.getAvailableClients() == 0) {
if (slaveBalancer.unfreeze(masterEntry.getClient().getAddr(), FreezeReason.SYSTEM)) {
log.info("master {} used as slave", masterEntry.getClient().getAddr());
}
@ -217,13 +201,24 @@ public class MasterSlaveEntry {
return nodeDown(entry);
}
public CompletableFuture<Boolean> slaveDownAsync(ClientConnectionsEntry entry, FreezeReason freezeReason) {
ClientConnectionsEntry e = slaveBalancer.freeze(entry, freezeReason);
if (e == null) {
return CompletableFuture.completedFuture(false);
}
return slaveDownAsync(entry);
}
private CompletableFuture<Boolean> slaveDownAsync(ClientConnectionsEntry entry) {
if (entry.isMasterForRead()) {
return CompletableFuture.completedFuture(false);
}
// add master as slave if no more slaves available
if (!config.checkSkipSlavesInit() && slaveBalancer.getAvailableClients() == 0) {
if (!config.checkSkipSlavesInit()
&& !masterEntry.getClient().getAddr().equals(entry.getClient().getAddr())
&& slaveBalancer.getAvailableClients() == 0) {
CompletableFuture<Boolean> f = slaveBalancer.unfreezeAsync(masterEntry.getClient().getAddr(), FreezeReason.SYSTEM);
return f.thenApply(value -> {
if (value) {

@ -615,9 +615,11 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager {
log.warn("slave: {} is down", uri);
} else {
MasterSlaveEntry entry = getEntry(singleSlotRange.getStartSlot());
if (entry.slaveDown(uri, FreezeReason.MANAGER)) {
log.warn("slave: {} is down", uri);
}
entry.slaveDownAsync(uri, FreezeReason.MANAGER).thenAccept(r -> {
if (r) {
log.warn("slave: {} is down", uri);
}
});
}
}

@ -339,12 +339,14 @@ abstract class ConnectionPool<T extends RedisConnection> {
}
private void checkForReconnect(ClientConnectionsEntry entry, Throwable cause) {
if (masterSlaveEntry.slaveDown(entry, FreezeReason.RECONNECT)) {
log.error("slave " + entry.getClient().getAddr() + " has been disconnected after "
masterSlaveEntry.slaveDownAsync(entry, FreezeReason.RECONNECT).thenAccept(r -> {
if (r) {
log.error("slave " + entry.getClient().getAddr() + " has been disconnected after "
+ config.getFailedSlaveCheckInterval() + " ms interval since moment of the first failed connection", cause);
scheduleCheck(entry);
scheduleCheck(entry);
}
}
});
}
private void scheduleCheck(ClientConnectionsEntry entry) {

Loading…
Cancel
Save