activemq-artemis git commit: ARTEMIS-2131 Error compacting journal

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

activemq-artemis git commit: ARTEMIS-2131 Error compacting journal

clebertsuconic-2
Repository: activemq-artemis
Updated Branches:
  refs/heads/2.6.x 48e0fc8f4 -> 878b31018


ARTEMIS-2131 Error compacting journal

Compaction cannot free a sliced view of a ByteBuffer on Java >=9:
the fix is using the original ByteBuffer instead of the slice
to perform a file write and allow it to be correctly released by
the Cleaner.

(cherry picked from commit cae253d1367c4d3423670af9c769f7885579b631)


Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/878b3101
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/878b3101
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/878b3101

Branch: refs/heads/2.6.x
Commit: 878b310184815a13c26dbe212e81f4cb13eeba0c
Parents: 48e0fc8
Author: Francesco Nigro <[hidden email]>
Authored: Wed Oct 17 15:10:04 2018 +0200
Committer: Clebert Suconic <[hidden email]>
Committed: Wed Oct 17 20:50:10 2018 -0400

----------------------------------------------------------------------
 .../core/journal/impl/AbstractJournalUpdateTask.java    | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/878b3101/artemis-journal/src/main/java/org/apache/activemq/artemis/core/journal/impl/AbstractJournalUpdateTask.java
----------------------------------------------------------------------
diff --git a/artemis-journal/src/main/java/org/apache/activemq/artemis/core/journal/impl/AbstractJournalUpdateTask.java b/artemis-journal/src/main/java/org/apache/activemq/artemis/core/journal/impl/AbstractJournalUpdateTask.java
index 7740bef..10f5008 100644
--- a/artemis-journal/src/main/java/org/apache/activemq/artemis/core/journal/impl/AbstractJournalUpdateTask.java
+++ b/artemis-journal/src/main/java/org/apache/activemq/artemis/core/journal/impl/AbstractJournalUpdateTask.java
@@ -56,6 +56,8 @@ public abstract class AbstractJournalUpdateTask implements JournalReaderCallback
 
    private ActiveMQBuffer writingChannel;
 
+   private ByteBuffer bufferWrite;
+
    private final ConcurrentLongHashSet recordsSnapshot;
 
    protected final List<JournalFile> newDataFiles = new ArrayList<>();
@@ -214,11 +216,17 @@ public abstract class AbstractJournalUpdateTask implements JournalReaderCallback
          // To Fix the size of the file
          writingChannel.writerIndex(writingChannel.capacity());
 
-         sequentialFile.writeDirect(writingChannel.toByteBuffer(), true);
+         bufferWrite.clear()
+            .position(writingChannel.readerIndex())
+            .limit(writingChannel.readableBytes());
+
+         sequentialFile.writeDirect(bufferWrite, true);
          sequentialFile.close();
          newDataFiles.add(currentFile);
       }
 
+      bufferWrite = null;
+
       writingChannel = null;
    }
 
@@ -237,7 +245,7 @@ public abstract class AbstractJournalUpdateTask implements JournalReaderCallback
    protected void openFile() throws Exception {
       flush();
 
-      ByteBuffer bufferWrite = fileFactory.newBuffer(journal.getFileSize());
+      bufferWrite = fileFactory.newBuffer(journal.getFileSize());
 
       writingChannel = ActiveMQBuffers.wrappedBuffer(bufferWrite);