jdeppe-pivotal commented on a change in pull request #6467: URL: https://github.com/apache/geode/pull/6467#discussion_r631947441
########## File path: geode-apis-compatible-with-redis/src/main/java/org/apache/geode/redis/internal/cluster/RedisMemberInfoRetrievalFunction.java ########## @@ -53,49 +47,31 @@ private BucketInfoRetrievalFunction(String address, int redisPort) { } public static void register(String address, int redisPort) { - FunctionService.registerFunction(new BucketInfoRetrievalFunction(address, redisPort)); + FunctionService.registerFunction(new RedisMemberInfoRetrievalFunction(address, redisPort)); } @Override public void execute(FunctionContext<Void> context) { - Region<RedisKey, ByteArrayWrapper> region = - context.getCache().getRegion(RegionProvider.REDIS_DATA_REGION); - String memberId = context.getCache().getDistributedSystem().getDistributedMember().getUniqueId(); - MemberBuckets mb = new MemberBuckets(memberId, hostAddress, redisPort, - getLocalPrimaryBucketIds(region)); - context.getResultSender().lastResult(mb); + context.getResultSender().lastResult(new RedisMemberInfo(memberId, hostAddress, redisPort)); } @Override public String getId() { return ID; } - @SuppressWarnings("unchecked") - public static Set<Integer> getLocalPrimaryBucketIds(Region region) { - PartitionedRegion pr = (PartitionedRegion) region; - if (pr.getDataStore() != null) { - return new HashSet<>(pr.getDataStore().getAllLocalPrimaryBucketIds()); - } else { - return Collections.EMPTY_SET; - } - } - - public static class MemberBuckets implements Serializable { + public static class RedisMemberInfo implements Serializable { Review comment: Now implements `DataSerializableFixedID` ########## File path: geode-apis-compatible-with-redis/src/main/java/org/apache/geode/redis/internal/executor/cluster/ClusterExecutor.java ########## @@ -145,28 +91,34 @@ private RedisResponse getSlots(ExecutionHandlerContext ctx) { * </pre> * * Note that there are no 'slave' entries since Geode does not host all secondary data apart from - * primary as redis does. The cluster port is provided only for consistency with the format - * of the output. + * primary as redis does. The cluster port is provided only for consistency with the format of the + * output. */ private RedisResponse getNodes(ExecutionHandlerContext ctx) { - List<MemberBuckets> memberBuckets = getMemberBuckets(ctx); String memberId = ctx.getMemberName(); + Map<String, List<Integer>> memberBuckets = + ctx.getRegionProvider().getSlotAdvisor().getMemberBuckets(); + List<SlotAdvisor.MemberBucketSlot> memberBucketSlots = + ctx.getRegionProvider().getSlotAdvisor().getBucketSlots(); StringBuilder response = new StringBuilder(); - for (MemberBuckets m : memberBuckets) { - response.append(String.format("%s %s:%d@%d master", - m.getMemberId(), m.getHostAddress(), m.getPort(), m.getPort())); + for (Map.Entry<String, List<Integer>> member : memberBuckets.entrySet()) { + List<Integer> buckets = member.getValue(); + SlotAdvisor.MemberBucketSlot mbs = memberBucketSlots.get(buckets.get(0)); - if (m.getMemberId().equals(memberId)) { + response.append(String.format("%s %s:%3$d@%3$d master", + member.getKey(), mbs.getPrimaryIpAddress(), mbs.getPrimaryPort())); + + if (member.getKey().equals(memberId)) { response.append(",myself"); } response.append(" - 0 0 1 connected"); - for (Integer index : m.getPrimaryBucketIds()) { + for (Integer bucket : member.getValue()) { Review comment: Done. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org