[
https://issues.apache.org/jira/browse/ARTEMIS-1536?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16725652#comment-16725652
]
ASF GitHub Bot commented on ARTEMIS-1536:
-----------------------------------------
GitHub user ehsavoie opened a pull request:
https://github.com/apache/activemq-artemis/pull/2474
[ARTEMIS-1536]: Incorrect Journal filesize calculation where specified size
is lest that the block size when using AIO.
* If the specified file size is under the fs block size then the resulting
file size is 0. Setting it to the block size in this case.
Jira: https://issues.apache.org/jira/browse/ARTEMIS-1536
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/ehsavoie/apache-activemq-artemis ARTEMIS-1536
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/activemq-artemis/pull/2474.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #2474
----
commit 2e0e718d0c91906fbc0e9e0fa13ad85f7b58ca64
Author: Emmanuel Hugonnet <emmanuel.hugonnet+gitkraken@...>
Date: 2018-12-20T08:11:38Z
[ARTEMIS-1536]: Incorrect Journal filesize calculation where specified size
is lest that the block size when using AIO.
* If the specified file size is under the fs block size then the
resulting file size is 0. Setting it to the block size in this case.
Jira: https://issues.apache.org/jira/browse/ARTEMIS-1536
----
> Incorrect Journal filesize calculation where specified size is lest that the
> block size when using AIO
> ------------------------------------------------------------------------------------------------------
>
> Key: ARTEMIS-1536
> URL: https://issues.apache.org/jira/browse/ARTEMIS-1536
> Project: ActiveMQ Artemis
> Issue Type: Bug
> Components: Broker
> Affects Versions: 1.5.5
> Reporter: Jeff Mesnil
> Priority: Major
>
> This issue was discovered in WildFly
> (https://issues.jboss.org/browse/WFLY-9595) as a side effect of:
> https://github.com/wildfly/wildfly/commit/df9e16241207ebc412ddd16c790c4b7fee31a5c0
> This change updated the size to be 1024 for the tests as a large file was not
> necessary. For continuous integration the agents have a blocksize of 512 so
> as the configured size is a multiple of the blocksize this was fine.
> However running the test
> 'org.jboss.as.test.integration.domain.ExpressionSupportSmokeTestCase' on a
> machine with a blocksize of 4096 this test would fail as the servers would
> fail to boot.
> After some debugging it became aparant this was the underlying error:
> {code}
> {"jboss.messaging-activemq.default.jms.manager" =>
> "java.lang.IllegalArgumentException: File size cannot be less than 1024 bytes
> Caused by: java.lang.IllegalArgumentException: File size cannot be less
> than 1024 bytes"}
> {code}
> After further debugging I have tracked it down to this class
> 'org.apache.activemq.artemis.core.persistence.impl.journal.JournalStorageManager'
>
> I can confirm the configured value does make it to this class but it is the
> following block of code which then looses the value:
> {code}
> int fileSize = config.getJournalFileSize();
> // we need to correct the file size if its not a multiple of the
> alignement
> int modulus = fileSize % journalFF.getAlignment();
> if (modulus != 0) {
> int difference = modulus;
> int low = config.getJournalFileSize() - difference;
> int high = low + journalFF.getAlignment();
> fileSize = difference < journalFF.getAlignment() / 2 ? low : high;
>
> ActiveMQServerLogger.LOGGER.invalidJournalFileSize(config.getJournalFileSize(),
> fileSize, journalFF.getAlignment());
> }
> Journal localMessage = new JournalImpl(ioExecutors, fileSize,
> config.getJournalMinFiles(), config.getJournalPoolFiles(),
> config.getJournalCompactMinFiles(), config.getJournalCompactPercentage(),
> journalFF, "activemq-data", "amq", journalFF.getMaxIO(), 0);
> {code}
> The file size comes in as 1024, the default is AIO so getAlignment returns
> the blocksize which in this case is 4096. So modulus and subsequently
> difference become 1024.
> The file size and difference are both 1024 so low becomes 0, high becomes
> 4096. Due to the difference being less than half the block size low is
> selected and the file size is set to 0.
> To select a correct filesize it looks like if low is less than the alignment
> always select high should be an option.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)