@Override public void writeDirect(ByteBuffer bytes, boolean sync) throws Exception { this.sequentialFile.writeDirect(bytes, sync); }
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]); } }
file.getJavaFile().deleteOnExit(); try { final ByteBuffer bufferBlock = allocateAlignedBlock(blockSize, factory); file.delete(); file.open(); file.fill(blockSize * blocks); file.close(); file.open(); file.position(0); long start = System.currentTimeMillis(); for (int i = 0; i < blocks; i++) { latch.countUp(); long startWrite = 0; file.writeDirect(bufferBlock, true, callback); file.close(); } finally { try { file.close(); } catch (Exception e) { file.delete(); } catch (Exception e) {
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; }
if (!enabled) return; if (!file.isOpen()) { file.open(); try (FileInputStream fis = new FileInputStream(file.getJavaFile()); FileChannel channel = fis.getChannel()) { logger.debug("sending " + buffer.writerIndex() + " bytes on file " + file.getFileName()); if (file.isOpen()) file.close();
@Override public void run() { try { SequentialFile file = factory.createSequentialFile("file.txt"); file.open(); ByteBuffer buffer = ByteBuffer.allocate(10); buffer.put(new byte[10]); Thread.currentThread().interrupt(); file.writeDirect(buffer, true); file.close(); } catch (Exception e) { e.printStackTrace(); } } };
@Override public ActiveMQBuffer getReadOnlyBodyBuffer() { try { validateFile(); file.open(); int fileSize = (int) file.size(); ByteBuffer buffer = ByteBuffer.allocate(fileSize); file.read(buffer); return new ChannelBufferWrapper(Unpooled.wrappedBuffer(buffer)); } catch (Exception e) { throw new RuntimeException(e); } finally { try { file.close(); } catch (Exception ignored) { } } }
@Test public void testBasicAlignment() throws Exception { FakeSequentialFileFactory factory = new FakeSequentialFileFactory(200, true); SequentialFile file = factory.createSequentialFile("test1"); file.open(); try { ByteBuffer buffer = ByteBuffer.allocateDirect(200); for (int i = 0; i < 200; i++) { buffer.put(i, (byte) 1); } file.writeDirect(buffer, true); buffer = ByteBuffer.allocate(400); for (int i = 0; i < 400; i++) { buffer.put(i, (byte) 2); } file.writeDirect(buffer, true); buffer = ByteBuffer.allocate(600); file.position(0); file.read(buffer); for (int i = 0; i < 200; i++) { Assert.assertEquals((byte) 1, buffer.get(i)); } for (int i = 201; i < 600; i++) { Assert.assertEquals("Position " + i, (byte) 2, buffer.get(i)); } } catch (Exception ignored) { } }
/** * this method is used internally only however tools may use it to maintenance. * It won't be part of the interface as the tools should be specific to the implementation */ public List<JournalFile> orderFiles() throws Exception { List<String> fileNames = fileFactory.listFiles(filesRepository.getFileExtension()); List<JournalFile> orderedFiles = new ArrayList<>(fileNames.size()); for (String fileName : fileNames) { SequentialFile file = fileFactory.createSequentialFile(fileName); if (file.size() >= SIZE_HEADER) { file.open(); try { JournalFileImpl jrnFile = readFileHeader(file); orderedFiles.add(jrnFile); } finally { file.close(); } } else { ActiveMQJournalLogger.LOGGER.ignoringShortFile(fileName); file.delete(); } } // Now order them by ordering id - we can't use the file name for ordering // since we can re-use dataFiles Collections.sort(orderedFiles, JOURNAL_FILE_COMPARATOR); return orderedFiles; }
@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 JournalFile openFileCMP() throws Exception { JournalFile file = openFile(); SequentialFile sequentialFile = file.getFile(); sequentialFile.close(); sequentialFile.renameTo(sequentialFile.getFileName() + ".cmp"); return file; }
@Override public int getBodyBufferSize() { final boolean closeFile = file == null || !file.isOpen(); try { openFile(); final long fileSize = file.size(); int fileSizeAsInt = (int) fileSize; if (fileSizeAsInt < 0) { logger.warnf("suspicious large message file size of %d bytes for %s, will use %d instead.", fileSize, file.getFileName(), Integer.MAX_VALUE); fileSizeAsInt = Integer.MAX_VALUE; } return fileSizeAsInt; } catch (Exception e) { throw new RuntimeException(e); } finally { if (closeFile) { try { file.close(); } catch (Exception ignored) { } } } }
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)); }
@Test public void testDelete() throws Exception { SequentialFile sf = factory.createSequentialFile("delete-me.amq"); sf.open(); SequentialFile sf2 = factory.createSequentialFile("delete-me2.amq"); sf2.open(); List<String> fileNames = factory.listFiles("amq"); Assert.assertEquals(2, fileNames.size()); Assert.assertTrue(fileNames.contains("delete-me.amq")); Assert.assertTrue(fileNames.contains("delete-me2.amq")); sf.delete(); fileNames = factory.listFiles("amq"); Assert.assertEquals(1, fileNames.size()); Assert.assertTrue(fileNames.contains("delete-me2.amq")); sf2.close(); }