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

Dan Smith commented on GEODE-7085:
----------------------------------

Here is a stack trace from the unit test

{code}
@Test
  public void recordGCVersionLargerThanIntMaxValueShouldSucceed() {
    RegionVersionHolder h = createHolder(true);
    long version = ((long) Integer.MAX_VALUE) + 10L;
    h.recordVersion(version);
    assertContainsOnly(h, version);
  }
{code}

{noformat}
java.lang.IndexOutOfBoundsException: bitIndex < 0: -2147483639

        at java.util.BitSet.set(BitSet.java:444)
        at 
org.apache.geode.internal.cache.versions.RegionVersionHolder.setVersionInBitSet(RegionVersionHolder.java:389)
        at 
org.apache.geode.internal.cache.versions.RegionVersionHolder.recordVersionWithBitSet(RegionVersionHolder.java:380)
        at 
org.apache.geode.internal.cache.versions.RegionVersionHolder.recordVersion(RegionVersionHolder.java:346)
        at 
org.apache.geode.internal.cache.versions.RegionVersionHolder2JUnitTest.recordGCVersionLargerThanIntMaxValueShouldSucceed(RegionVersionHolder2JUnitTest.java:167)
{noformat}

> Cannot recover from disk store if region version is greater than 
> Integer.MAX_VALUE
> ----------------------------------------------------------------------------------
>
>                 Key: GEODE-7085
>                 URL: https://issues.apache.org/jira/browse/GEODE-7085
>             Project: Geode
>          Issue Type: Bug
>          Components: membership, persistence
>            Reporter: Dan Smith
>            Assignee: Dan Smith
>            Priority: Major
>
> We hit an issue where a member failed to recover due to a 
> IndexOutOfBoundsException while recording a version during recovery.
> Looking closer, it looks like the issue is due to the fact that a 
> RegionVersionHolder cannot record a version greater than Integer.MAX_VALUE if 
> it just just constructed.
> When we are recovering from disk, the first thing we read from is the .drf 
> files. The first thing in those drf files is RVV information. We read the RVV 
> records and call recordRecoveredGCVersion.
> When that call gets down inside RegionVersionHolder.recordVersion, there is 
> some logic that is supposed to flush out the bitSet and advance the 
> bitSetVersion. Unfortunately it looks like flushBitSetDuringRecording is not 
> actually doing that. So if version we read from disk is greater than 
> Integer.MAX_VALUE, we wrap around and try to set a negative index in the 
> bitset.
> I can reproduce this with a unit test of RegionVersionVector that records a 
> version greater than Integer.MAX_VALUE. I’m looking into how to fix the 
> flushBitSetDuringRecording method.



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)

Reply via email to