private static ByteBuffer allocateDirectBufferIfNeeded(final SequentialFileFactory fileFactory, final int requiredCapacity, final AtomicReference<ByteBuffer> bufferRef) { ByteBuffer buffer = bufferRef != null ? bufferRef.get() : null; if (buffer != null && buffer.capacity() < requiredCapacity) { fileFactory.releaseDirectBuffer(buffer); buffer = null; } if (buffer == null) { buffer = fileFactory.allocateDirectBuffer(requiredCapacity); } else { buffer.clear().limit(requiredCapacity); } if (bufferRef != null) { bufferRef.lazySet(buffer); } return buffer; }
private static ByteBuffer allocateDirectBufferIfNeeded(final SequentialFileFactory fileFactory, final int requiredCapacity, final AtomicReference<ByteBuffer> bufferRef) { ByteBuffer buffer = bufferRef != null ? bufferRef.get() : null; if (buffer != null && buffer.capacity() < requiredCapacity) { fileFactory.releaseDirectBuffer(buffer); buffer = null; } if (buffer == null) { buffer = fileFactory.allocateDirectBuffer(requiredCapacity); } else { buffer.clear().limit(requiredCapacity); } if (bufferRef != null) { bufferRef.lazySet(buffer); } return buffer; }
private synchronized JournalLoadInformation load(final LoaderCallback loadManager, final boolean changeData, final JournalState replicationSync) throws Exception { final JournalState state = this.state; if (state == JournalState.STOPPED || state == JournalState.LOADED) { throw new IllegalStateException("Journal " + this + " must be in " + JournalState.STARTED + " state, was " + state); } if (state == replicationSync) { throw new IllegalStateException("Journal cannot be in state " + JournalState.STARTED); } // AtomicReference is used only as a reference, not as an Atomic value final AtomicReference<ByteBuffer> wholeFileBufferRef = new AtomicReference<>(); try { return load(loadManager, changeData, replicationSync, wholeFileBufferRef); } finally { final ByteBuffer wholeFileBuffer = wholeFileBufferRef.get(); if (wholeFileBuffer != null) { fileFactory.releaseDirectBuffer(wholeFileBuffer); wholeFileBufferRef.lazySet(null); } } }
private synchronized JournalLoadInformation load(final LoaderCallback loadManager, final boolean changeData, final JournalState replicationSync) throws Exception { final JournalState state = this.state; if (state == JournalState.STOPPED || state == JournalState.LOADED) { throw new IllegalStateException("Journal " + this + " must be in " + JournalState.STARTED + " state, was " + state); } if (state == replicationSync) { throw new IllegalStateException("Journal cannot be in state " + JournalState.STARTED); } // AtomicReference is used only as a reference, not as an Atomic value final AtomicReference<ByteBuffer> wholeFileBufferRef = new AtomicReference<>(); try { return load(loadManager, changeData, replicationSync, wholeFileBufferRef); } finally { final ByteBuffer wholeFileBuffer = wholeFileBufferRef.get(); if (wholeFileBuffer != null) { fileFactory.releaseDirectBuffer(wholeFileBuffer); wholeFileBufferRef.lazySet(null); } } }
private void flush(boolean releaseWritingBuffer) throws Exception { if (writingChannel != null) { try { if (sequentialFile.isOpen()) { try { sequentialFile.position(0); // To Fix the size of the file writingChannel.writerIndex(writingChannel.capacity()); final ByteBuffer byteBuffer = bufferWrite; final int readerIndex = writingChannel.readerIndex(); byteBuffer.clear().position(readerIndex).limit(readerIndex + writingChannel.readableBytes()); sequentialFile.blockingWriteDirect(byteBuffer, true, false); } finally { sequentialFile.close(); newDataFiles.add(currentFile); } } } finally { if (releaseWritingBuffer) { //deterministic release of native resources fileFactory.releaseDirectBuffer(bufferWrite); writingChannel = null; bufferWrite = null; } } } }
private void flush(boolean releaseWritingBuffer) throws Exception { if (writingChannel != null) { try { if (sequentialFile.isOpen()) { try { sequentialFile.position(0); // To Fix the size of the file writingChannel.writerIndex(writingChannel.capacity()); final ByteBuffer byteBuffer = bufferWrite; final int readerIndex = writingChannel.readerIndex(); byteBuffer.clear().position(readerIndex).limit(readerIndex + writingChannel.readableBytes()); sequentialFile.blockingWriteDirect(byteBuffer, true, false); } finally { sequentialFile.close(); newDataFiles.add(currentFile); } } } finally { if (releaseWritingBuffer) { //deterministic release of native resources fileFactory.releaseDirectBuffer(bufferWrite); writingChannel = null; bufferWrite = null; } } } }
factory.releaseDirectBuffer(bufferBlock);
factory.releaseDirectBuffer(bufferBlock);
/** * @throws Exception */ protected void openFile() throws Exception { flush(false); currentFile = filesRepository.openFileCMP(); sequentialFile = currentFile.getFile(); sequentialFile.open(1, false); currentFile = new JournalFileImpl(sequentialFile, nextOrderingID++, JournalImpl.FORMAT_VERSION); final int fileSize = journal.getFileSize(); if (bufferWrite != null && bufferWrite.capacity() < fileSize) { fileFactory.releaseDirectBuffer(bufferWrite); bufferWrite = null; writingChannel = null; } if (bufferWrite == null) { final ByteBuffer bufferWrite = fileFactory.allocateDirectBuffer(fileSize); this.bufferWrite = bufferWrite; writingChannel = ActiveMQBuffers.wrappedBuffer(bufferWrite); } else { writingChannel.clear(); bufferWrite.clear(); } JournalImpl.writeHeader(writingChannel, journal.getUserVersion(), currentFile.getFileID()); }
} finally { if (wholeFileBufferReference == null && wholeFileBuffer != null) { fileFactory.releaseDirectBuffer(wholeFileBuffer);
} finally { if (wholeFileBufferReference == null && wholeFileBuffer != null) { fileFactory.releaseDirectBuffer(wholeFileBuffer);
ByteBuffer wholeFileBuffer; if (wholeFileBufferRef != null && (wholeFileBuffer = wholeFileBufferRef.get()) != null) { fileFactory.releaseDirectBuffer(wholeFileBuffer);
ByteBuffer wholeFileBuffer; if (wholeFileBufferRef != null && (wholeFileBuffer = wholeFileBufferRef.get()) != null) { fileFactory.releaseDirectBuffer(wholeFileBuffer);
/** * @throws Exception */ protected void openFile() throws Exception { flush(false); currentFile = filesRepository.openFileCMP(); sequentialFile = currentFile.getFile(); sequentialFile.open(1, false); currentFile = new JournalFileImpl(sequentialFile, nextOrderingID++, JournalImpl.FORMAT_VERSION); final int fileSize = journal.getFileSize(); if (bufferWrite != null && bufferWrite.capacity() < fileSize) { fileFactory.releaseDirectBuffer(bufferWrite); bufferWrite = null; writingChannel = null; } if (bufferWrite == null) { final ByteBuffer bufferWrite = fileFactory.allocateDirectBuffer(fileSize); this.bufferWrite = bufferWrite; writingChannel = ActiveMQBuffers.wrappedBuffer(bufferWrite); } else { writingChannel.clear(); bufferWrite.clear(); } JournalImpl.writeHeader(writingChannel, journal.getUserVersion(), currentFile.getFileID()); }