You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2021/06/01 20:36:59 UTC

[activemq-artemis] branch main updated: ARTEMIS-3324 JournalFilesRepository running out of open files while compacting

This is an automated email from the ASF dual-hosted git repository.

clebertsuconic pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/main by this push:
     new 24c6d90  ARTEMIS-3324 JournalFilesRepository running out of open files while compacting
24c6d90 is described below

commit 24c6d904b968851ab4708640ce20594cdaca0dd9
Author: Clebert Suconic <cl...@apache.org>
AuthorDate: Tue Jun 1 11:50:27 2021 -0400

    ARTEMIS-3324 JournalFilesRepository running out of open files while compacting
---
 .../artemis/core/journal/impl/JournalFilesRepository.java | 15 ++++++---------
 .../activemq/artemis/journal/ActiveMQJournalLogger.java   |  4 ++++
 .../tests/unit/core/journal/impl/JournalImplTestBase.java | 15 +++++++++++++++
 3 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/artemis-journal/src/main/java/org/apache/activemq/artemis/core/journal/impl/JournalFilesRepository.java b/artemis-journal/src/main/java/org/apache/activemq/artemis/core/journal/impl/JournalFilesRepository.java
index 6cdf92c..c094a43 100644
--- a/artemis-journal/src/main/java/org/apache/activemq/artemis/core/journal/impl/JournalFilesRepository.java
+++ b/artemis-journal/src/main/java/org/apache/activemq/artemis/core/journal/impl/JournalFilesRepository.java
@@ -96,13 +96,11 @@ public class JournalFilesRepository {
       @Override
       public void run() {
          // if there's already an opened file there is no need to push a new one
-         if (openedFiles.isEmpty()) {
-            try {
-               pushOpenedFile();
-            } catch (Exception e) {
-               ActiveMQJournalLogger.LOGGER.errorPushingFile(e);
-               fileFactory.onIOError(e, "unable to open ", null);
-            }
+         try {
+            pushOpenedFile();
+         } catch (Exception e) {
+            ActiveMQJournalLogger.LOGGER.errorPushingFile(e);
+            fileFactory.onIOError(e, "unable to open ", null);
          }
       }
    };
@@ -504,8 +502,7 @@ public class JournalFilesRepository {
       }
 
       if (nextFile == null) {
-
-         logger.debug("Could not get a file in " + journalFileOpenTimeout + " seconds, it will retry directly, without an executor");
+         ActiveMQJournalLogger.LOGGER.cantOpenFileTimeout(journalFileOpenTimeout);
          try {
             nextFile = takeFile(true, true, true, false);
          } catch (Exception e) {
diff --git a/artemis-journal/src/main/java/org/apache/activemq/artemis/journal/ActiveMQJournalLogger.java b/artemis-journal/src/main/java/org/apache/activemq/artemis/journal/ActiveMQJournalLogger.java
index fdd9eb1..53ba9f1 100644
--- a/artemis-journal/src/main/java/org/apache/activemq/artemis/journal/ActiveMQJournalLogger.java
+++ b/artemis-journal/src/main/java/org/apache/activemq/artemis/journal/ActiveMQJournalLogger.java
@@ -284,4 +284,8 @@ public interface ActiveMQJournalLogger extends BasicLogger {
    @LogMessage(level = Logger.Level.WARN)
    @Message(id = 144008, value = "*******************************************************************************************************************************\nFile {0}: was moved under attic, please review it and remove it.\n*******************************************************************************************************************************", format = Message.Format.MESSAGE_FORMAT)
    void movingFileToAttic(String fileName);
+
+   @LogMessage(level = Logger.Level.WARN)
+   @Message(id = 144009, value = "Could not get a file in {0} seconds, System will retry the open but you may see increased latency in your system", format = Message.Format.MESSAGE_FORMAT)
+   void cantOpenFileTimeout(long timeout);
 }
diff --git a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/journal/impl/JournalImplTestBase.java b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/journal/impl/JournalImplTestBase.java
index 1a5c866..34b2d9a 100644
--- a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/journal/impl/JournalImplTestBase.java
+++ b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/journal/impl/JournalImplTestBase.java
@@ -38,6 +38,7 @@ import org.apache.activemq.artemis.core.journal.TestableJournal;
 import org.apache.activemq.artemis.core.journal.impl.JournalFile;
 import org.apache.activemq.artemis.core.journal.impl.JournalImpl;
 import org.apache.activemq.artemis.core.journal.impl.JournalReaderCallback;
+import org.apache.activemq.artemis.logs.AssertionLoggerHandler;
 import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
 import org.apache.activemq.artemis.utils.ReusableLatch;
 import org.apache.activemq.artemis.utils.collections.SparseArrayLinkedList;
@@ -48,6 +49,20 @@ import org.junit.Before;
 
 public abstract class JournalImplTestBase extends ActiveMQTestBase {
 
+   @Before
+   public void startLogger() {
+      AssertionLoggerHandler.startCapture();
+   }
+
+   @After
+   public void stopLogger() {
+      try {
+         Assert.assertFalse(AssertionLoggerHandler.findText("AMQ144009"));
+      } finally {
+         AssertionLoggerHandler.stopCapture();
+      }
+   }
+
    private static final Logger log = Logger.getLogger(JournalImplTestBase.class);
 
    protected List<RecordInfo> records = new LinkedList<>();