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

Put to partitioned region with overflow doesn't properly update numOverflowBytesOnDisk

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 1.0.0-incubating.M1
    • core
    • None

    Description

      For the purposes of rebalancing, geode keeps track of the amount of data stored on disk in a counter - BucketRegion.numOverflowBytesOnDisk.

      For regions that have overflow but not persistence, a put that replaces a value that was overflowed on disk does not correctly decrement the counter of bytes overflowed to disk.

      The issue is that that size of the entry on disk is read in an if block testing to see if the region is persistent (dr.isBackup())

                if (dr.isBackup()) {
                  dr.testIsRecoveredAndClear(did); // fixes bug 41409
                  oldValueLength = getValueLength(did);
      

      Later it is used to change the stat, but it oldValueLength may not be set

                    incrementBucketStats(region, 1/*InVM*/, -1/*OnDisk*/, -oldValueLength);
      

      The net effect of this issue is that if a lot of puts happen to entries that are overflowed to disk, the size of the bucket will be inflated. This may then cause issues with rebalancing calculations.

      Attachments

        Activity

          People

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

            Dates

              Created:
              Updated:
              Resolved: