geode-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dan Smith (JIRA)" <>
Subject [jira] [Commented] (GEODE-7085) Cannot recover from disk store if region version is greater than Integer.MAX_VALUE
Date Tue, 13 Aug 2019 23:41:00 GMT


Dan Smith commented on GEODE-7085:

Here is a stack trace from the unit test

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

java.lang.IndexOutOfBoundsException: bitIndex < 0: -2147483639

	at java.util.BitSet.set(
	at org.apache.geode.internal.cache.versions.RegionVersionHolder.setVersionInBitSet(
	at org.apache.geode.internal.cache.versions.RegionVersionHolder.recordVersionWithBitSet(
	at org.apache.geode.internal.cache.versions.RegionVersionHolder.recordVersion(
	at org.apache.geode.internal.cache.versions.RegionVersionHolder2JUnitTest.recordGCVersionLargerThanIntMaxValueShouldSucceed(

> Cannot recover from disk store if region version is greater than Integer.MAX_VALUE
> ----------------------------------------------------------------------------------
>                 Key: GEODE-7085
>                 URL:
>             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

View raw message