[ https://issues.apache.org/jira/browse/GEODE-7085?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16909270#comment-16909270 ]
ASF subversion and git services commented on GEODE-7085: -------------------------------------------------------- Commit f58710116db1cd8c509b59a43ffa050a073234d7 in geode's branch refs/heads/feature/GEODE-7066 from Dan Smith [ https://gitbox.apache.org/repos/asf?p=geode.git;h=f587101 ] GEODE-7085: Ensuring the bitset stays within BIT_SET_WIDTH (#3922) Ensuring that when we call recordVersion on a RegionVersionHolder, we appropriately move the bitSet to match the new version we are recording, rather than trying to expand it. In particular, if new version is greater than Integer.MAX_VALUE, we can't record than in out integer indexed bit set. This change rewrites addBitSetExceptions. The logic is now broken into a BitSetExceptionIterator, which converts some or all of the bit set into RVVException objects, and the logic to slide the bit set forward to a new bitSetVersion. Adding unit tests that show that large versions cause an IndexOutOfBounds exception from recordGCVersion. Adding more unit tests for the internal state of the bitset. > 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 > Fix For: 1.11.0 > > Time Spent: 3h 10m > Remaining Estimate: 0h > > 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)