@Override public void position(long pos) throws IOException { this.sequentialFile.position(pos); }
@Override public long position() { return this.sequentialFile.position(); }
@Override public void position(long pos) throws IOException { this.sequentialFile.position(pos); }
@Override public long position() { return this.sequentialFile.position(); }
@Override public int getRemainingBytes() { try { final long position = sequentialFile.position(); final long size = sequentialFile.size(); final long remaining = size - position; if (remaining > Integer.MAX_VALUE) { return Integer.MAX_VALUE; } else { return (int) remaining; } } catch (Exception e) { throw new IllegalStateException(e); } }
@Override public int getRemainingBytes() { try { final long position = sequentialFile.position(); final long size = sequentialFile.size(); final long remaining = size - position; if (remaining > Integer.MAX_VALUE) { return Integer.MAX_VALUE; } else { return (int) remaining; } } catch (Exception e) { throw new IllegalStateException(e); } }
public void open() throws Exception { if (!file.isOpen()) { file.open(); } size.set((int) file.size()); file.position(0); }
private int readFromMapped(StorageManager storage, List<PagedMessage> messages) throws IOException { file.position(0); //use a readonly mapped view of the file final int mappedSize = size.get(); final MappedByteBuffer mappedByteBuffer = mapFileForRead(this.file.getJavaFile(), mappedSize); ChannelBufferWrapper activeMQBuffer = wrapBuffer(mappedSize, mappedByteBuffer); try { return read(storage, activeMQBuffer, messages); } finally { //unmap the file after read it to avoid GC to take care of it PlatformDependent.freeDirectBuffer(mappedByteBuffer); } }
private void readFromSequentialFile(StorageManager storage, List<PagedMessage> messages) throws Exception { final int fileSize = (int) file.size(); //doesn't need to be a direct buffer: that case is covered using the MMAP read final ByteBuffer buffer = this.fileFactory.newBuffer(fileSize); try { file.position(0); file.read(buffer); buffer.rewind(); assert (buffer.limit() == fileSize) : "buffer doesn't contains the whole file"; ChannelBufferWrapper activeMQBuffer = wrapBuffer(fileSize, buffer); read(storage, activeMQBuffer, messages); } finally { this.fileFactory.releaseBuffer(buffer); } }
@Override public final void addBytesToLargeMessage(final SequentialFile file, final long messageId, final byte[] bytes) throws Exception { readLock(); try { file.position(file.size()); file.writeDirect(ByteBuffer.wrap(bytes), false); if (isReplicated()) { replicator.largeMessageWrite(messageId, bytes); } } finally { readUnLock(); } }
public synchronized List<PagedMessage> read(StorageManager storage) throws Exception { if (logger.isDebugEnabled()) { logger.debug("reading page " + this.pageId + " on address = " + storeName); } if (!file.isOpen()) { throw ActiveMQMessageBundle.BUNDLE.invalidPageIO(); } final List<PagedMessage> messages = new ArrayList<>(); size.lazySet((int) file.size()); if (this.canBeMapped) { readFromMapped(storage, messages); // if the file is open to be written // it needs to updated the position file.position(file.size()); } else { readFromSequentialFile(storage, messages); } numberOfMessages.lazySet(messages.size()); return messages; }
private JournalFile reinitializeFile(final JournalFile file) throws Exception { long newFileID = generateFileID(); SequentialFile sf = file.getFile(); sf.open(1, false); int position = JournalImpl.initFileHeader(fileFactory, sf, userVersion, newFileID); JournalFile jf = new JournalFileImpl(sf, newFileID, JournalImpl.FORMAT_VERSION); sf.position(position); sf.close(); return jf; }
@Override public Page createPage(final int pageNumber) throws Exception { String fileName = createFileName(pageNumber); checkFileFactory(); SequentialFile file = fileFactory.createSequentialFile(fileName); Page page = new Page(storeName, storageManager, fileFactory, file, pageNumber); // To create the file file.open(); file.position(0); file.close(); return page; }
private JournalFile reinitializeFile(final JournalFile file) throws Exception { long newFileID = generateFileID(); SequentialFile sf = file.getFile(); sf.open(1, false); int position = JournalImpl.initFileHeader(fileFactory, sf, userVersion, newFileID); JournalFile jf = new JournalFileImpl(sf, newFileID, JournalImpl.FORMAT_VERSION); sf.position(position); sf.close(); return jf; }
public void openFile(final JournalFile file, final boolean multiAIO) throws Exception { if (multiAIO) { file.getFile().open(); } else { file.getFile().open(1, false); } file.getFile().position(file.getFile().calculateBlockStart(JournalImpl.SIZE_HEADER)); }
@Override public void run() { try { SequentialFile file = factory.createSequentialFile("file.txt"); file.open(); file.write(fakeEncoding, true); file.position(0); ByteBuffer readBytes = ByteBuffer.allocate(fakeEncoding.getEncodeSize()); Thread.currentThread().interrupt(); file.read(readBytes); file.close(); } catch (Exception e) { e.printStackTrace(); } } };
@Override public void run() { try { SequentialFile file = factory.createSequentialFile("file.txt"); file.open(); file.write(fakeEncoding, true); file.position(0); ByteBuffer readBytes = ByteBuffer.allocate(fakeEncoding.getEncodeSize()); Thread.currentThread().interrupt(); file.read(readBytes); file.close(); } catch (Exception e) { e.printStackTrace(); } } };
public void openFile(final JournalFile file, final boolean multiAIO) throws Exception { if (multiAIO) { file.getFile().open(); } else { file.getFile().open(1, false); } file.getFile().position(file.getFile().calculateBlockStart(JournalImpl.SIZE_HEADER)); }
protected void checkFill(final SequentialFile file, final int size) throws Exception { file.fill(size); file.close(); file.open(); file.position(0); ByteBuffer bb = ByteBuffer.allocateDirect(size); int bytesRead = file.read(bb); Assert.assertEquals(size, bytesRead); bb.rewind(); byte[] bytes = new byte[size]; bb.get(bytes); for (int i = 0; i < size; i++) { // log.debug(" i is " + i); Assert.assertEquals(0, bytes[i]); } }
protected void checkFill(final SequentialFileFactory factory, final SequentialFile file, final int size) throws Exception { file.fill(size); file.close(); file.open(); file.position(0); ByteBuffer bb = factory.newBuffer(size); int bytesRead = file.read(bb); Assert.assertEquals(calculateRecordSize(size, factory.getAlignment()), bytesRead); for (int i = 0; i < size; i++) { // log.debug(" i is " + i); Assert.assertEquals(0, bb.get(i)); } }