Uploaded image for project: 'Geode'
  1. Geode
  2. GEODE-7085

Cannot recover from disk store if region version is greater than Integer.MAX_VALUE

    XMLWordPrintableJSON

Details

    Description

      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.

      Attachments

        Activity

          People

            upthewaterspout Dan Smith
            upthewaterspout Dan Smith
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 4.5h
                4.5h