[ 
https://issues.apache.org/jira/browse/ARTEMIS-1536?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16726058#comment-16726058
 ] 

ASF GitHub Bot commented on ARTEMIS-1536:
-----------------------------------------

Github user ehsavoie commented on a diff in the pull request:

    https://github.com/apache/activemq-artemis/pull/2474#discussion_r243354412
  
    --- Diff: 
artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/JournalStorageManager.java
 ---
    @@ -163,13 +163,17 @@ protected void init(Configuration config, 
IOCriticalErrorListener criticalErrorL
     
           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());
    +      if (fileSize <= journalFF.getAlignment()) {
    +         fileSize = journalFF.getAlignment();
    --- End diff --
    
    Done


> 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)

Reply via email to