/** * Converts the result of {@code CLUSTER NODES} into {@link RedisClusterNode}s. * * @param clusterNodes * @return * @since 1.7 */ public static Set<RedisClusterNode> toSetOfRedisClusterNodes(String clusterNodes) { if (StringUtils.isEmpty(clusterNodes)) { return Collections.emptySet(); } String[] lines = clusterNodes.split(CLUSTER_NODES_LINE_SEPARATOR); return toSetOfRedisClusterNodes(Arrays.asList(lines)); }
@Override public ClusterTopology getTopology() { if (cached != null && time + 100 > System.currentTimeMillis()) { return cached; } Map<String, Exception> errors = new LinkedHashMap<>(); List<Entry<String, JedisPool>> list = new ArrayList<>(cluster.getClusterNodes().entrySet()); Collections.shuffle(list); for (Entry<String, JedisPool> entry : list) { try (Jedis jedis = entry.getValue().getResource()) { time = System.currentTimeMillis(); Set<RedisClusterNode> nodes = Converters.toSetOfRedisClusterNodes(jedis.clusterNodes()); synchronized (lock) { cached = new ClusterTopology(nodes); } return cached; } catch (Exception ex) { errors.put(entry.getKey(), ex); } } StringBuilder sb = new StringBuilder(); for (Entry<String, Exception> entry : errors.entrySet()) { sb.append(String.format("\r\n\t- %s failed: %s", entry.getKey(), entry.getValue().getMessage())); } throw new ClusterStateFailureException( "Could not retrieve cluster information. CLUSTER NODES returned with error." + sb.toString()); } }
@Override public Map<RedisClusterNode, Collection<RedisClusterNode>> clusterGetMasterSlaveMap() { List<NodeResult<Collection<RedisClusterNode>>> nodeResults = clusterCommandExecutor.executeCommandAsyncOnNodes( (LettuceClusterCommandCallback<Collection<RedisClusterNode>>) client -> Converters .toSetOfRedisClusterNodes(client.clusterSlaves(client.clusterMyId())), topologyProvider.getTopology().getActiveMasterNodes()).getResults(); Map<RedisClusterNode, Collection<RedisClusterNode>> result = new LinkedHashMap<>(); for (NodeResult<Collection<RedisClusterNode>> nodeResult : nodeResults) { result.put(nodeResult.getNode(), nodeResult.getValue()); } return result; }
/** * Converts the result of {@code CLUSTER NODES} into {@link RedisClusterNode}s. * * @param clusterNodes * @return * @since 1.7 */ public static Set<RedisClusterNode> toSetOfRedisClusterNodes(String clusterNodes) { if (StringUtils.isEmpty(clusterNodes)) { return Collections.emptySet(); } String[] lines = clusterNodes.split(CLUSTER_NODES_LINE_SEPARATOR); return toSetOfRedisClusterNodes(Arrays.asList(lines)); }
/** * Converts the result of {@code CLUSTER NODES} into {@link RedisClusterNode}s. * * @param clusterNodes * @return * @since 1.7 */ public static Set<RedisClusterNode> toSetOfRedisClusterNodes(String clusterNodes) { if (StringUtils.isEmpty(clusterNodes)) { return Collections.emptySet(); } String[] lines = clusterNodes.split(CLUSTER_NODES_LINE_SEPARATOR); return toSetOfRedisClusterNodes(Arrays.asList(lines)); }
@Override public ClusterTopology getTopology() { if (cached != null && time + 100 > System.currentTimeMillis()) { return cached; } Map<String, Exception> errors = new LinkedHashMap<>(); List<Entry<String, JedisPool>> list = new ArrayList<>(cluster.getClusterNodes().entrySet()); Collections.shuffle(list); for (Entry<String, JedisPool> entry : list) { try (Jedis jedis = entry.getValue().getResource()) { time = System.currentTimeMillis(); Set<RedisClusterNode> nodes = Converters.toSetOfRedisClusterNodes(jedis.clusterNodes()); synchronized (lock) { cached = new ClusterTopology(nodes); } return cached; } catch (Exception ex) { errors.put(entry.getKey(), ex); } } StringBuilder sb = new StringBuilder(); for (Entry<String, Exception> entry : errors.entrySet()) { sb.append(String.format("\r\n\t- %s failed: %s", entry.getKey(), entry.getValue().getMessage())); } throw new ClusterStateFailureException( "Could not retrieve cluster information. CLUSTER NODES returned with error." + sb.toString()); } }
@Override public ClusterTopology getTopology() { if (cached != null && time + 100 > System.currentTimeMillis()) { return cached; } Map<String, Exception> errors = new LinkedHashMap<>(); List<Entry<String, JedisPool>> list = new ArrayList<>(cluster.getClusterNodes().entrySet()); Collections.shuffle(list); for (Entry<String, JedisPool> entry : list) { try (Jedis jedis = entry.getValue().getResource()) { time = System.currentTimeMillis(); Set<RedisClusterNode> nodes = Converters.toSetOfRedisClusterNodes(jedis.clusterNodes()); synchronized (lock) { cached = new ClusterTopology(nodes); } return cached; } catch (Exception ex) { errors.put(entry.getKey(), ex); } } StringBuilder sb = new StringBuilder(); for (Entry<String, Exception> entry : errors.entrySet()) { sb.append(String.format("\r\n\t- %s failed: %s", entry.getKey(), entry.getValue().getMessage())); } throw new ClusterStateFailureException( "Could not retrieve cluster information. CLUSTER NODES returned with error." + sb.toString()); } }
@Override public Map<RedisClusterNode, Collection<RedisClusterNode>> clusterGetMasterSlaveMap() { List<NodeResult<Collection<RedisClusterNode>>> nodeResults = clusterCommandExecutor.executeCommandAsyncOnNodes( (LettuceClusterCommandCallback<Collection<RedisClusterNode>>) client -> Converters .toSetOfRedisClusterNodes(client.clusterSlaves(client.clusterMyId())), topologyProvider.getTopology().getActiveMasterNodes()).getResults(); Map<RedisClusterNode, Collection<RedisClusterNode>> result = new LinkedHashMap<>(); for (NodeResult<Collection<RedisClusterNode>> nodeResult : nodeResults) { result.put(nodeResult.getNode(), nodeResult.getValue()); } return result; }
@Override public Map<RedisClusterNode, Collection<RedisClusterNode>> clusterGetMasterSlaveMap() { List<NodeResult<Collection<RedisClusterNode>>> nodeResults = clusterCommandExecutor.executeCommandAsyncOnNodes( (LettuceClusterCommandCallback<Collection<RedisClusterNode>>) client -> Converters .toSetOfRedisClusterNodes(client.clusterSlaves(client.clusterMyId())), topologyProvider.getTopology().getActiveMasterNodes()).getResults(); Map<RedisClusterNode, Collection<RedisClusterNode>> result = new LinkedHashMap<>(); for (NodeResult<Collection<RedisClusterNode>> nodeResult : nodeResults) { result.put(nodeResult.getNode(), nodeResult.getValue()); } return result; }