private void updateRegionOnMembers(String regionObjectName, String regionFullPath,
      Cluster.Region region) throws IOException {

    try {
      List<String> memberNamesTemp = region.getMemberName();
      ArrayList<String> memberNames = new ArrayList<>(memberNamesTemp);

      List<Cluster.RegionOnMember> regionOnMemberList = new ArrayList<>();
      List<Cluster.RegionOnMember> regionOnMemberListNew = new ArrayList<>();
      Cluster.RegionOnMember[] regionOnMemberNames = region.getRegionOnMembers();

      if ((regionOnMemberNames != null) && (regionOnMemberNames.length > 0)) {
        regionOnMemberList =
            new ArrayList<>(Arrays.asList(regionOnMemberNames));
      }
      logger.debug("updateRegionOnMembers : # regionOnMembers objects in region = {}",
          regionOnMemberList.size());
      for (Cluster.RegionOnMember anRom : regionOnMemberList) {

        for (String memberName : memberNames) {
          if (anRom.getMemberName().equals(memberName)) {
            // Add regionOnMember object in new list
            regionOnMemberListNew.add(anRom);

            logger.debug("updateRegionOnMembers : Processing existing Member name = {}",
                anRom.getMemberName());
            String objectNameROM =
                PulseConstants.OBJECT_NAME_REGION_ON_MEMBER_REGION + regionObjectName
                    + PulseConstants.OBJECT_NAME_REGION_ON_MEMBER_MEMBER + anRom.getMemberName();
            ObjectName regionOnMemberMBean = new ObjectName(objectNameROM);
            logger.debug("updateRegionOnMembers : Object name = {}",
                regionOnMemberMBean.getCanonicalName());

            AttributeList attributeList = mbs.getAttributes(regionOnMemberMBean,
                PulseConstants.REGION_ON_MEMBER_MBEAN_ATTRIBUTES);
            for (Object o : attributeList) {
              Attribute attribute = (Attribute) o;
              String name = attribute.getName();
              switch (name) {
                case PulseConstants.MBEAN_ATTRIBUTE_ENTRYSIZE:
                  anRom.setEntrySize(getLongAttribute(attribute.getValue(), attribute.getName()));
                  logger.debug("updateRegionOnMembers : anRom.getEntrySize() = {}",
                      anRom.getEntrySize());
                  break;
                case PulseConstants.MBEAN_ATTRIBUTE_ENTRYCOUNT:
                  anRom.setEntryCount(getLongAttribute(attribute.getValue(), attribute.getName()));
                  logger.debug("updateRegionOnMembers : anRom.getEntryCount() = {}",
                      anRom.getEntryCount());
                  break;
                case PulseConstants.MBEAN_ATTRIBUTE_PUTSRATE:
                  anRom.setPutsRate(getDoubleAttribute(attribute.getValue(), attribute.getName()));
                  logger.debug("updateRegionOnMembers : anRom.getPutsRate() = {}",
                      anRom.getPutsRate());
                  break;
                case PulseConstants.MBEAN_ATTRIBUTE_GETSRATE:
                  anRom.setGetsRate(getDoubleAttribute(attribute.getValue(), attribute.getName()));
                  logger.debug("updateRegionOnMembers : anRom.getGetsRate() = {}",
                      anRom.getGetsRate());
                  break;
                case PulseConstants.MBEAN_ATTRIBUTE_DISKREADSRATE:
                  anRom.setDiskGetsRate(
                      getDoubleAttribute(attribute.getValue(), attribute.getName()));
                  logger.debug("updateRegionOnMembers : anRom.getDiskGetsRate() = {}",
                      anRom.getDiskGetsRate());
                  break;
                case PulseConstants.MBEAN_ATTRIBUTE_DISKWRITESRATE:
                  anRom.setDiskPutsRate(
                      getDoubleAttribute(attribute.getValue(), attribute.getName()));
                  logger.debug("updateRegionOnMembers : anRom.getDiskPutsRate() = {}",
                      anRom.getDiskPutsRate());
                  break;
                case PulseConstants.MBEAN_ATTRIBUTE_LOCALMAXMEMORY:
                  anRom.setLocalMaxMemory(
                      getIntegerAttribute(attribute.getValue(), attribute.getName()));
                  logger.debug("updateRegionOnMembers : anRom.getLocalMaxMemory() = {}",
                      anRom.getLocalMaxMemory());
                  break;
              }
            }

            anRom.getGetsPerSecTrend().add(anRom.getGetsRate());
            anRom.getPutsPerSecTrend().add(anRom.getPutsRate());
            anRom.getDiskReadsPerSecTrend().add(anRom.getDiskGetsRate());
            anRom.getDiskWritesPerSecTrend().add(anRom.getDiskPutsRate());
            logger.debug(
                "updateRegionOnMembers : Existing member on region : getGetsRate() = {}, getPutsRate() = {}, getDiskGetsRate() = {}, getDiskPutsRate() = {}",
                anRom.getGetsPerSecTrend().size(), anRom.getPutsPerSecTrend().size(),
                anRom.getDiskReadsPerSecTrend().size(), anRom.getDiskWritesPerSecTrend().size());
            // remove existing member names from list so only new ones will remain
            memberNames.remove(anRom.getMemberName());

            break;
          }
        }
      }

      logger.debug(
          "updateRegionOnMembers : Loop over remaining member names and adding new member in region. Existing count = {}",
          regionOnMemberList.size());
      logger.debug("updateRegionOnMembers : Remaining new members in this region = {}",
          memberNames.size());
      // loop over the remaining regions members and add new members for this region
      for (String memberName : memberNames) {
        String objectNameROM = PulseConstants.OBJECT_NAME_REGION_ON_MEMBER_REGION + regionObjectName
            + PulseConstants.OBJECT_NAME_REGION_ON_MEMBER_MEMBER + memberName;
        ObjectName regionOnMemberMBean = new ObjectName(objectNameROM);
        Cluster.RegionOnMember regionOnMember = new Cluster.RegionOnMember();
        regionOnMember.setMemberName(memberName);
        regionOnMember.setRegionFullPath(regionFullPath);
        AttributeList attributeList = mbs.getAttributes(regionOnMemberMBean,
            PulseConstants.REGION_ON_MEMBER_MBEAN_ATTRIBUTES);
        for (Object o : attributeList) {
          Attribute attribute = (Attribute) o;
          String name = attribute.getName();
          switch (name) {
            case PulseConstants.MBEAN_ATTRIBUTE_ENTRYSIZE:
              regionOnMember
                  .setEntrySize(getLongAttribute(attribute.getValue(), attribute.getName()));
              break;
            case PulseConstants.MBEAN_ATTRIBUTE_ENTRYCOUNT:
              regionOnMember
                  .setEntryCount(getLongAttribute(attribute.getValue(), attribute.getName()));
              break;
            case PulseConstants.MBEAN_ATTRIBUTE_PUTSRATE:
              regionOnMember
                  .setPutsRate(getDoubleAttribute(attribute.getValue(), attribute.getName()));
              break;
            case PulseConstants.MBEAN_ATTRIBUTE_GETSRATE:
              regionOnMember
                  .setGetsRate(getDoubleAttribute(attribute.getValue(), attribute.getName()));
              break;
            case PulseConstants.MBEAN_ATTRIBUTE_DISKREADSRATE:
              regionOnMember
                  .setDiskGetsRate(getDoubleAttribute(attribute.getValue(), attribute.getName()));
              break;
            case PulseConstants.MBEAN_ATTRIBUTE_DISKWRITESRATE:
              regionOnMember
                  .setDiskPutsRate(getDoubleAttribute(attribute.getValue(), attribute.getName()));
              break;
            case PulseConstants.MBEAN_ATTRIBUTE_LOCALMAXMEMORY:
              regionOnMember.setLocalMaxMemory(
                  getIntegerAttribute(attribute.getValue(), attribute.getName()));
              break;
          }
        }

        regionOnMember.getGetsPerSecTrend().add(regionOnMember.getGetsRate());
        regionOnMember.getPutsPerSecTrend().add(regionOnMember.getPutsRate());
        regionOnMember.getDiskReadsPerSecTrend().add(regionOnMember.getDiskGetsRate());
        regionOnMember.getDiskWritesPerSecTrend().add(regionOnMember.getDiskPutsRate());

        logger.debug(
            "updateRegionOnMembers : Adding New member on region : getGetsRate() = {}, getPutsRate() = {}, getDiskGetsRate() = {}, getDiskPutsRate() = {}",
            regionOnMember.getGetsRate(), regionOnMember.getPutsRate(),
            regionOnMember.getDiskGetsRate(), regionOnMember.getDiskPutsRate());
        regionOnMemberListNew.add(regionOnMember);
      }

      // set region on member
      region.setRegionOnMembers(regionOnMemberListNew);
      logger.debug("updateRegionOnMembers : Total regions on member in region {} after update = {}",
          region.getFullPath(), region.getRegionOnMembers().length);
    } catch (MalformedObjectNameException | InstanceNotFoundException | ReflectionException e) {
      logger.warn(e);
    }
  }
Add member specific region information on the region

@param regionObjectName used to construct the jmx objectname. For region name that has special
       characters in, it will have double quotes around it.
geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/JMXDataUpdater.java