Uploaded image for project: 'Jackrabbit Oak'
  1. Jackrabbit Oak
  2. OAK-4088

CacheLIRS prevents cleanup from being effective

    XMLWordPrintableJSON

Details

    Description

      While performing some tests on compaction in the context of the cold standby, I spotted an issue involving CacheLIRS and the SegmentTracker.

      Cleanup on the standby store is inefficient due to many references to SegmentId instances. These references prevent the system to identify unused segments, thus making the cleanup process less effective. To minimise the amount of references to SegmentId instances, the current implementation of the cleanup process forces every cache to be invalidated, including CacheLIRS. Unluckily, even if CacheLIRS is invalidated, heap dumps show a lot of references to SegmentId instances held by CacheLIRS and its inner classes.

      To verify my hypothesis, I tried to run the system with an implementation of the SegmentTracker that doesn't populate CacheLIRS - the cache is always empty. This greatly improved the effectiveness of compaction, to the point that the standby instance is able to cleanup almost the whole amount of unused segments.

      It should be investigated if this behaviour is caused by a bug in CacheLIRS or by an incorrect usage of CacheLIRS by the SegmentTracker.

      Attachments

        Activity

          People

            frm Francesco Mari
            frm Francesco Mari
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: