[ 
https://issues.apache.org/jira/browse/GEODE-8827?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17268835#comment-17268835
 ] 

ASF subversion and git services commented on GEODE-8827:
--------------------------------------------------------

Commit 5c6546be40ea96f04ea976fc71b1cf41d2272773 in geode's branch 
refs/heads/develop from Barry Oglesby
[ https://gitbox.apache.org/repos/asf?p=geode.git;h=5c6546b ]

GEODE-8827: Modified LocalRegion.initializeStats to increment bytesOnlyOnDisk



> The DiskRegionStats bytesOnlyOnDisk stat is not incremented during persistent 
> region recovery
> ---------------------------------------------------------------------------------------------
>
>                 Key: GEODE-8827
>                 URL: https://issues.apache.org/jira/browse/GEODE-8827
>             Project: Geode
>          Issue Type: Bug
>          Components: persistence, statistics
>            Reporter: Barrett Oglesby
>            Assignee: Barrett Oglesby
>            Priority: Major
>              Labels: pull-request-available
>         Attachments: 
> DiskRegionStats_entriesOnlyOnDisk_bytesOnlyOnDisk_after_gets.gif, 
> DiskRegionStats_entriesOnlyOnDisk_bytesOnlyOnDisk_after_gets_with_change.gif, 
> DiskRegionStats_entriesOnlyOnDisk_bytesOnlyOnDisk_after_restart.gif, 
> DiskRegionStats_entriesOnlyOnDisk_bytesOnlyOnDisk_after_restart_with_change.gif,
>  DiskRegionStats_entriesOnlyOnDisk_bytesOnlyOnDisk_no_eviction.gif
>
>
> With a test like:
>  - 2 servers with partitioned region configured like:
>  ** persistence enabled
>  ** heap eviction with overflow enabled
>  - load enough entries to cause overflow
>  - shut down the servers
>  - restart the servers
>  - execute a function to get all entries in each server
> After the step to restart the servers, the bytesOnlyOnDisk stat is 0.
> After the step to get all entries, the bytesOnlyOnDisk stat is negative.
> The entriesInVM and entriesOnlyOnDisk stats are incremented as BucketRegions 
> are recovered from disk in LocalRegion.initializeStats here:
> {noformat}
> java.lang.Exception: Stack trace
>       at java.lang.Thread.dumpStack(Thread.java:1333)
>       at 
> org.apache.geode.internal.cache.LocalRegion.initializeStats(LocalRegion.java:10222)
>       at 
> org.apache.geode.internal.cache.BucketRegion.initializeStats(BucketRegion.java:2163)
>       at 
> org.apache.geode.internal.cache.AbstractDiskRegion.copyExistingRegionMap(AbstractDiskRegion.java:775)
>       at 
> org.apache.geode.internal.cache.DiskStoreImpl.initializeOwner(DiskStoreImpl.java:631)
>       at 
> org.apache.geode.internal.cache.DiskRegion.initializeOwner(DiskRegion.java:239)
>       at 
> org.apache.geode.internal.cache.DistributedRegion.initialize(DistributedRegion.java:1081)
>       at 
> org.apache.geode.internal.cache.BucketRegion.initialize(BucketRegion.java:262)
>       at 
> org.apache.geode.internal.cache.LocalRegion.createSubregion(LocalRegion.java:981)
>       at 
> org.apache.geode.internal.cache.PartitionedRegionDataStore.createBucketRegion(PartitionedRegionDataStore.java:785)
>       at 
> org.apache.geode.internal.cache.PartitionedRegionDataStore.grabFreeBucket(PartitionedRegionDataStore.java:460)
>       at 
> org.apache.geode.internal.cache.PartitionedRegionDataStore.grabFreeBucketRecursively(PartitionedRegionDataStore.java:319)
>       at 
> org.apache.geode.internal.cache.PartitionedRegionDataStore.grabBucket(PartitionedRegionDataStore.java:2896)
>       at 
> org.apache.geode.internal.cache.ProxyBucketRegion.recoverFromDisk(ProxyBucketRegion.java:441)
>       at 
> org.apache.geode.internal.cache.ProxyBucketRegion.recoverFromDiskRecursively(ProxyBucketRegion.java:407)
>       at 
> org.apache.geode.internal.cache.PRHARedundancyProvider$2.run2(PRHARedundancyProvider.java:1640)
>       at 
> org.apache.geode.internal.cache.partitioned.RecoveryRunnable.run(RecoveryRunnable.java:60)
>       at 
> org.apache.geode.internal.cache.PRHARedundancyProvider$2.run(PRHARedundancyProvider.java:1630)
>       at java.lang.Thread.run(Thread.java:745)
> {noformat}
> The current LocalRegion.initializeStats method implementation is:
> {noformat}
> public void initializeStats(long numEntriesInVM, long numOverflowOnDisk,
>     long numOverflowBytesOnDisk) {
>   getDiskRegion().getStats().incNumEntriesInVM(numEntriesInVM);
>   getDiskRegion().getStats().incNumOverflowOnDisk(numOverflowOnDisk);
> }
> {noformat}
> Even though numOverflowBytesOnDisk is passed into this method, it is ignored 
> as this logging shows:
> {noformat}
> [warn 2021/01/12 11:19:11.785 PST  <Recovery thread for bucket _B__data_3> 
> tid=0x49] XXX LocalRegion.initializeStats numOverflowBytesOnDisk=4546560; 
> bytesOnlyOnDiskFromStats=0
> [warn 2021/01/12 11:19:11.791 PST  <Recovery thread for bucket _B__data_9> 
> tid=0x4f] XXX LocalRegion.initializeStats numOverflowBytesOnDisk=4536320; 
> bytesOnlyOnDiskFromStats=0
> [warn 2021/01/12 11:19:11.797 PST  <Recovery thread for bucket _B__data_6> 
> tid=0x4c] XXX LocalRegion.initializeStats numOverflowBytesOnDisk=4526080; 
> bytesOnlyOnDiskFromStats=0
> [warn 2021/01/12 11:19:11.800 PST  <Recovery thread for bucket _B__data_2> 
> tid=0x48] XXX LocalRegion.initializeStats numOverflowBytesOnDisk=4546560; 
> bytesOnlyOnDiskFromStats=0
> [warn 2021/01/12 11:19:11.801 PST  <Recovery thread for bucket _B__data_8> 
> tid=0x4e] XXX LocalRegion.initializeStats numOverflowBytesOnDisk=4526080; 
> bytesOnlyOnDiskFromStats=0
> {noformat}
> The attached 
> DiskRegionStats_entriesOnlyOnDisk_bytesOnlyOnDisk_after_restart.gif chart 
> shows the behavior after server restart.
> The attached DiskRegionStats_entriesOnlyOnDisk_bytesOnlyOnDisk_after_gets.gif 
> chart shows the behavior after the gets.
> If I make this change, I see correct behavior:
> {noformat}
>   public void initializeStats(long numEntriesInVM, long numOverflowOnDisk,
>       long numOverflowBytesOnDisk) {
>     getDiskRegion().getStats().incNumEntriesInVM(numEntriesInVM);
>     getDiskRegion().getStats().incNumOverflowOnDisk(numOverflowOnDisk);
> ->  
> getDiskRegion().getStats().incNumOverflowBytesOnDisk(numOverflowBytesOnDisk);
>   }
> {noformat}
> The attached 
> DiskRegionStats_entriesOnlyOnDisk_bytesOnlyOnDisk_after_restart_with_change.gif
>  chart shows the behavior with this change after server restart.
> The attached 
> DiskRegionStats_entriesOnlyOnDisk_bytesOnlyOnDisk_after_gets_with_change.gif 
> chart shows the behavior with this change after the gets.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to