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

@ -615,9 +615,11 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager {
log.warn("slave: {} is down", uri); log.warn("slave: {} is down", uri);
} else { } else {
MasterSlaveEntry entry = getEntry(singleSlotRange.getStartSlot()); MasterSlaveEntry entry = getEntry(singleSlotRange.getStartSlot());
if (entry.slaveDown(uri, FreezeReason.MANAGER)) { entry.slaveDownAsync(uri, FreezeReason.MANAGER).thenAccept(r -> {
log.warn("slave: {} is down", uri); 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) { private void checkForReconnect(ClientConnectionsEntry entry, Throwable cause) {
if (masterSlaveEntry.slaveDown(entry, FreezeReason.RECONNECT)) { masterSlaveEntry.slaveDownAsync(entry, FreezeReason.RECONNECT).thenAccept(r -> {
log.error("slave " + entry.getClient().getAddr() + " has been disconnected after " if (r) {
log.error("slave " + entry.getClient().getAddr() + " has been disconnected after "
+ config.getFailedSlaveCheckInterval() + " ms interval since moment of the first failed connection", cause); + config.getFailedSlaveCheckInterval() + " ms interval since moment of the first failed connection", cause);
scheduleCheck(entry); scheduleCheck(entry);
} }
} });
}
private void scheduleCheck(ClientConnectionsEntry entry) { private void scheduleCheck(ClientConnectionsEntry entry) {

Loading…
Cancel
Save