public synchronized void unfreeze(String host, int port) { InetSocketAddress addr = new InetSocketAddress(host, port); for (SubscribesConnectionEntry connectionEntry : clients.values()) { if (!connectionEntry.getClient().getAddr().equals(addr)) { continue; } connectionEntry.setFreezed(false); clientsEmpty.open(); return; } throw new IllegalStateException("Can't find " + addr + " in slaves!"); }
public synchronized Collection<RedisPubSubConnection> freeze(String host, int port) { InetSocketAddress addr = new InetSocketAddress(host, port); for (SubscribesConnectionEntry connectionEntry : clients.values()) { if (connectionEntry.isFreezed() || !connectionEntry.getClient().getAddr().equals(addr)) { continue; } log.debug("{} freezed", addr); connectionEntry.setFreezed(true); // close all connections while (true) { RedisConnection connection = connectionEntry.getConnections().poll(); if (connection == null) { break; } connection.closeAsync(); } // close all pub/sub connections while (true) { RedisPubSubConnection connection = connectionEntry.pollFreeSubscribeConnection(); if (connection == null) { break; } connection.closeAsync(); } boolean allFreezed = true; for (SubscribesConnectionEntry entry : clients.values()) { if (!entry.isFreezed()) { allFreezed = false; break; } } if (allFreezed) { clientsEmpty.close(); } List<RedisPubSubConnection> list = new ArrayList<RedisPubSubConnection>(connectionEntry.getAllSubscribeConnections()); connectionEntry.getAllSubscribeConnections().clear(); return list; } return Collections.emptyList(); }