james created AMQ-6572:
--------------------------
Summary: KahaDB journal may not handle max file length changes
correctly
Key: AMQ-6572
URL: https://issues.apache.org/jira/browse/AMQ-6572
Project: ActiveMQ
Issue Type: Bug
Components: KahaDB
Affects Versions: 5.14.3
Reporter: james
Priority: Minor
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?
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)