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


Reply via email to