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

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

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

    https://github.com/apache/activemq-artemis/pull/326#discussion_r50105212
  
    --- Diff: 
artemis-journal/src/main/java/org/apache/activemq/artemis/core/journal/impl/JournalFilesRepository.java
 ---
    @@ -431,13 +434,16 @@ public JournalFile openFile() throws 
InterruptedException {
              openFilesExecutor.execute(pushOpenRunnable);
           }
     
    -      JournalFile nextFile = null;
    +      JournalFile nextFile = openedFiles.poll(5, TimeUnit.SECONDS);
    +      if (nextFile == null) {
    +         
fileFactory.onIOError(ActiveMQJournalBundle.BUNDLE.fileNotOpened(), "unable to 
open ",  null);
    +      }
     
    -      while (nextFile == null) {
    -         nextFile = openedFiles.poll(5, TimeUnit.SECONDS);
    -         if (nextFile == null) {
    -            
fileFactory.onIOError(ActiveMQJournalBundle.BUNDLE.fileNotOpened(), "unable to 
open ",  null);
    -         }
    +      if (nextFile == null) {
    +          // We need to reconnect the current file with the timed buffer 
as we were not able to roll the file forward
    +          // If you don't do this you will get a NPE in 
TimedBuffer::checkSize where it uses the bufferobserver 
    +          fileFactory.activateBuffer(journal.getCurrentFile().getFile());
    --- End diff --
    
    can you use the BUNDLE here Tom, see ActiveMQJournalBundle.BUNDLE


> Report an Exception if a journal file cannot be created rather than blocking 
> forever
> ------------------------------------------------------------------------------------
>
>                 Key: ARTEMIS-351
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-351
>             Project: ActiveMQ Artemis
>          Issue Type: Improvement
>            Reporter: Tom Jenkinson
>
> The architecture of the journal component is such that the next journal file 
> to create fails (executed async) then the application thread will block 
> forever in an append call and the journal will become unusable during that 
> JVM execution. 
> The error was reported as a warning but the loop is not broken out of after a 
> recent change (ARTEMIS-321), a callback IO handler will now be invoked and 
> the business logic can elect to make a decision such as shutdown. 
> However, if you know that the error may be transient, unless this callback 
> throws an unhandled exception the journal will remain blocked forever. Even 
> if an unhandled exception is thrown from your handler to unblock the thread, 
> there is an issue in that subsequent calls to appendRecord will add the file 
> name into the queue of files to create every time it is invoked. This can 
> easily result in the same file name appearing twice in the queue. Once this 
> happens, the logic to check if a record does not fit in the current file then 
> it will fit in the next file triggers and an exception is thrown.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to