[ 
https://issues.apache.org/jira/browse/GEODE-2676?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Darrel Schneider updated GEODE-2676:
------------------------------------
    Description: 
RegionMBean attributes hitCount, hitRatio, missCount, lastAccessedTime, and 
lastModifiedTime will always be 0 for an mbean that represents an partitioned 
region.

The gettors for these methods may call getStatistics() which on a PR always 
throws UnsupportedOperationException. So this exception might even get exposed 
to customers.

The initialization of RegionMBeanBridge calls getStatisticsEnabled() which 
returns true on a PartitionedRegion. This does have meaning on a PR but it does 
not mean that getStatistics() is a supported operation. On a PR setting 
statistics-enabled causes each region-entry to also keep track of its last 
access time.
It is true that if getStatisticsEnabled() is false then you should not call 
getStatistics. But the opposite is not true. Since we currently have regions 
that do not support getStatistics(), the code in RegionMBeanBridge should catch 
UnsupportedOperationException and handle it. I would suggest that the 
constructor be changed that initializes the "isStatisticsEnabled" field. 
Instead of only calling getStatisticsEnabled() it should also call 
getStatistics(). Something like this:
{noformat}
    {
      boolean useGetStatistics = regAttrs.getStatisticsEnabled();
      if (useGetStatistics) {
        try {
          region.getStatistics();
        } catch (UnsupportedOperationException ex) {
          useGetStatistics = false;
        }
      }
      this.isStatisticsEnabled = useGetStatistics;
    }
{noformat}
That way in a future release if PRs are changed to support getStatistics this 
code will start calling it without having a direct dependency on the 
implementation of PartitionedRegion.

Another ticket will be filed requesting that getStatistics to become a 
supported operation on PRs. 

  was:
RegionMBean attributes hitCount, hitRatio, missCount, lastAccessedTime, and 
lastModifiedTime will always be 0 for an mbean that represents an partitioned 
region.

The gettors for these methods may call getStatistics() which on a PR always 
throws UnsupportedOperationException?. So this exception might even get exposed 
to customers.

The initialization of RegionMBeanBridge calls getStatisticsEnabled() which 
returns true on a PartitionedRegion. This does have meaning on a PR but it does 
not mean that getStatistics() is a supported operation. On a PR setting 
statistics-enabled causes each region-entry to also keep track of its last 
access time.
It is true that if getStatisticsEnabled() is false then you should not call 
getStatistics. But the opposite is not true. Since we currently have regions 
that do not support getStatistics(), the code in RegionMBeanBridge should catch 
UnsupportedOperationException and handle it. I would suggest that the 
constructor be changed that initializes the "isStatisticsEnabled" field. 
Instead of only calling getStatisticsEnabled() it should also call 
getStatistics(). Something like this:
{noformat}
    {
      boolean useGetStatistics = regAttrs.getStatisticsEnabled();
      if (useGetStatistics) {
        try {
          region.getStatistics();
        } catch (UnsupportedOperationException ex) {
          useGetStatistics = false;
        }
      }
      this.isStatisticsEnabled = useGetStatistics;
    }
{noformat}
That way in a future release if PRs are changed to support getStatistics this 
code will start calling it without having a direct dependency on the 
implementation of PartitionedRegion.

Another ticket will be filed requesting that getStatistics to become a 
supported operation on PRs. 


> RegionMBean statistics wrong on partitioned regions
> ---------------------------------------------------
>
>                 Key: GEODE-2676
>                 URL: https://issues.apache.org/jira/browse/GEODE-2676
>             Project: Geode
>          Issue Type: Bug
>            Reporter: Fred Krone
>            Priority: Minor
>              Labels: jmx
>
> RegionMBean attributes hitCount, hitRatio, missCount, lastAccessedTime, and 
> lastModifiedTime will always be 0 for an mbean that represents an partitioned 
> region.
> The gettors for these methods may call getStatistics() which on a PR always 
> throws UnsupportedOperationException. So this exception might even get 
> exposed to customers.
> The initialization of RegionMBeanBridge calls getStatisticsEnabled() which 
> returns true on a PartitionedRegion. This does have meaning on a PR but it 
> does not mean that getStatistics() is a supported operation. On a PR setting 
> statistics-enabled causes each region-entry to also keep track of its last 
> access time.
> It is true that if getStatisticsEnabled() is false then you should not call 
> getStatistics. But the opposite is not true. Since we currently have regions 
> that do not support getStatistics(), the code in RegionMBeanBridge should 
> catch UnsupportedOperationException and handle it. I would suggest that the 
> constructor be changed that initializes the "isStatisticsEnabled" field. 
> Instead of only calling getStatisticsEnabled() it should also call 
> getStatistics(). Something like this:
> {noformat}
>     {
>       boolean useGetStatistics = regAttrs.getStatisticsEnabled();
>       if (useGetStatistics) {
>         try {
>           region.getStatistics();
>         } catch (UnsupportedOperationException ex) {
>           useGetStatistics = false;
>         }
>       }
>       this.isStatisticsEnabled = useGetStatistics;
>     }
> {noformat}
> That way in a future release if PRs are changed to support getStatistics this 
> code will start calling it without having a direct dependency on the 
> implementation of PartitionedRegion.
> Another ticket will be filed requesting that getStatistics to become a 
> supported operation on PRs. 



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to