@Override public boolean isCreated() { return created || !queueIsEmpty(); }
@Override public void writeGraph(byte[] data) throws IOException { writeDataFile(data, ".gph"); }
private void doWriteEntry(AzureSegmentArchiveEntry indexEntry, byte[] data, int offset, int size) throws IOException { long msb = indexEntry.getMsb(); long lsb = indexEntry.getLsb(); ioMonitor.beforeSegmentWrite(pathAsFile(), msb, lsb, size); Stopwatch stopwatch = Stopwatch.createStarted(); try { CloudBlockBlob blob = getBlob(getSegmentFileName(indexEntry)); blob.setMetadata(AzureBlobMetadata.toSegmentMetadata(indexEntry)); blob.uploadFromByteArray(data, offset, size); blob.uploadMetadata(); } catch (StorageException e) { throw new IOException(e); } ioMonitor.afterSegmentWrite(pathAsFile(), msb, lsb, size, stopwatch.elapsed(TimeUnit.NANOSECONDS)); }
@Override public void close() throws IOException { if (queue.isPresent()) { // required to handle IOException SegmentWriteQueue q = queue.get(); q.flush(); q.close(); } try { getBlob("closed").uploadFromByteArray(new byte[0], 0, 0); } catch (StorageException e) { throw new IOException(e); } }
@Override public void writeSegment(long msb, long lsb, byte[] data, int offset, int size, int generation, int fullGeneration, boolean compacted) throws IOException { created = true; AzureSegmentArchiveEntry entry = new AzureSegmentArchiveEntry(msb, lsb, entries++, size, generation, fullGeneration, compacted); if (queue.isPresent()) { queue.get().addToQueue(entry, data, offset, size); } else { doWriteEntry(entry, data, offset, size); } index.put(new UUID(msb, lsb), entry); totalLength += size; monitor.written(size); }
@Override public SegmentArchiveWriter create(String archiveName) throws IOException { return new AzureSegmentArchiveWriter(getDirectory(archiveName), ioMonitor, monitor); }
private void doWriteEntry(AzureSegmentArchiveEntry indexEntry, byte[] data, int offset, int size) throws IOException { long msb = indexEntry.getMsb(); long lsb = indexEntry.getLsb(); ioMonitor.beforeSegmentWrite(pathAsFile(), msb, lsb, size); Stopwatch stopwatch = Stopwatch.createStarted(); try { CloudBlockBlob blob = getBlob(getSegmentFileName(indexEntry)); blob.setMetadata(AzureBlobMetadata.toSegmentMetadata(indexEntry)); blob.uploadFromByteArray(data, offset, size); blob.uploadMetadata(); } catch (StorageException e) { throw new IOException(e); } ioMonitor.afterSegmentWrite(pathAsFile(), msb, lsb, size, stopwatch.elapsed(TimeUnit.NANOSECONDS)); }
@Override public void close() throws IOException { if (queue.isPresent()) { // required to handle IOException SegmentWriteQueue q = queue.get(); q.flush(); q.close(); } try { getBlob("closed").uploadFromByteArray(new byte[0], 0, 0); } catch (StorageException e) { throw new IOException(e); } }
@Override public void writeSegment(long msb, long lsb, byte[] data, int offset, int size, int generation, int fullGeneration, boolean compacted) throws IOException { created = true; AzureSegmentArchiveEntry entry = new AzureSegmentArchiveEntry(msb, lsb, entries++, size, generation, fullGeneration, compacted); if (queue.isPresent()) { queue.get().addToQueue(entry, data, offset, size); } else { doWriteEntry(entry, data, offset, size); } index.put(new UUID(msb, lsb), entry); totalLength += size; monitor.written(size); }
@Override public SegmentArchiveWriter create(String archiveName) throws IOException { return new AzureSegmentArchiveWriter(getDirectory(archiveName), ioMonitor, monitor); }
@Override public void writeBinaryReferences(byte[] data) throws IOException { writeDataFile(data, ".brf"); }
@Override public Buffer readSegment(long msb, long lsb) throws IOException { UUID uuid = new UUID(msb, lsb); Optional<SegmentWriteAction> segment = queue.map(q -> q.read(uuid)); if (segment.isPresent()) { return segment.get().toBuffer(); } AzureSegmentArchiveEntry indexEntry = index.get(new UUID(msb, lsb)); if (indexEntry == null) { return null; } Buffer buffer; if (OFF_HEAP) { buffer = Buffer.allocateDirect(indexEntry.getLength()); } else { buffer = Buffer.allocate(indexEntry.getLength()); } readBufferFully(getBlob(getSegmentFileName(indexEntry)), buffer); return buffer; }
@Override public boolean isCreated() { return created || !queueIsEmpty(); }
@Override public void writeGraph(byte[] data) throws IOException { writeDataFile(data, ".gph"); }
@Override public Buffer readSegment(long msb, long lsb) throws IOException { UUID uuid = new UUID(msb, lsb); Optional<SegmentWriteAction> segment = queue.map(q -> q.read(uuid)); if (segment.isPresent()) { return segment.get().toBuffer(); } AzureSegmentArchiveEntry indexEntry = index.get(new UUID(msb, lsb)); if (indexEntry == null) { return null; } Buffer buffer; if (OFF_HEAP) { buffer = Buffer.allocateDirect(indexEntry.getLength()); } else { buffer = Buffer.allocate(indexEntry.getLength()); } readBufferFully(getBlob(getSegmentFileName(indexEntry)), buffer); return buffer; }
@Override public void writeBinaryReferences(byte[] data) throws IOException { writeDataFile(data, ".brf"); }