Uploaded image for project: 'ActiveMQ Classic'
  1. ActiveMQ Classic
  2. AMQ-6572

KahaDB journal may not handle max file length changes correctly

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 5.14.3
    • 5.15.0, 5.14.4
    • KahaDB
    • None

    Description

      I was exploring the idea of changing the kahadb journal file length on an activemq instance which already has existing data (during a system restart). Initial response from activemq insiders was that this was a supported action, but while examining the Journal source, i stumbled on code which would seem to indicate that it isn't handled correctly

      Source thread: http://activemq.2283324.n4.nabble.com/Can-you-change-the-kahadb-journal-file-size-between-broker-starts-td4721155.html#a4721252

      Potential problem areas (from forum post):

      https://fisheye.apache.org/browse/activemq-6/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/journal/Journal.java?hb=true#to310

      This is the startup code. it attempts to adjust the total length by shaving off an unused portion of the final data file. if you have made the maxFileLength smaller since the last run, and you have actual data in the last journal file which is after the new maxFileLength, then this computation will incorrectly return a negative value. my suspicion is that the length of the last data file should be used here instead of maxFileLength.

      https://fisheye.apache.org/browse/activemq-6/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/journal/Journal.java?hb=true#to867

      likewise, this code attempts to handle adjustments to maxFileLength since the journal file was created, but i think it again fails. if the maxFileLength has been increased since the data file was created, this would seem to be setting an offset which is past the length of the current data file. again, it seems like the length of the data file should be used directly.

      in general, in order for this to work correctly, the maxFileLength should only be used for code which is creating new files. all the other code should be solely relying on the size of the existing file, right?

      Attachments

        Activity

          People

            cshannon Christopher L. Shannon
            jahlborn james
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: