/** * Returns the content of the page range as a string. * * @return A <code>String</code> which represents the contents of the page range. */ @Override public String toString() { return String.format("bytes=%d-%d", this.getStartOffset(), this.getEndOffset()); } }
@Override public void endElement(String uri, String localName, String qName) throws SAXException { String currentNode = this.elementStack.pop(); // if the node popped from the stack and the localName don't match, the xml document is improperly formatted if (!localName.equals(currentNode)) { throw new SAXException(SR.INVALID_RESPONSE_RECEIVED); } String value = this.bld.toString(); if (value.isEmpty()) { value = null; } if (BlobConstants.PAGE_RANGE_ELEMENT.equals(currentNode)) { final PageRange pageRef = new PageRange(this.startOffset, this.endOffset); this.pages.add(pageRef); } else if (BlobConstants.START_ELEMENT.equals(currentNode)) { this.startOffset = Long.parseLong(value); } else if (Constants.END_ELEMENT.equals(currentNode)) { this.endOffset = Long.parseLong(value); } this.bld = new StringBuilder(); }
/** * Creates an instance of the <code>{@link PageRange}</code> class. * * @param start * A <code>long</code> which represents the starting offset. * @param end * A <code>long</code> which represents the ending offset. */ public PageRange(final long start, final long end) { this.setStartOffset(start); this.setEndOffset(end); }
@Test public void testDownloadPageRangesWithOffsetAndLength() throws StorageException, URISyntaxException, IOException { final CloudPageBlob blobRef = setUpPageRanges(); List<PageRange> actualPageRanges = blobRef.downloadPageRanges((long)1*512, (long)5*512); List<PageRange> expectedPageRanges = new ArrayList<PageRange>(); expectedPageRanges.add(new PageRange(2 * 512, 5 * 512 - 1)); assertEquals(expectedPageRanges.size(), actualPageRanges.size()); for (int i = 0; i < expectedPageRanges.size(); i++) { assertEquals(expectedPageRanges.get(i).getStartOffset(), actualPageRanges.get(i).getStartOffset()); assertEquals(expectedPageRanges.get(i).getEndOffset(), actualPageRanges.get(i).getEndOffset()); } }
private static IOException badStartRangeException(CloudPageBlobWrapper blob, PageRange startRange) { return fileCorruptException(blob, String.format( "Page blobs for ASV should always use a page range starting at byte 0. " + "This starts at byte %d.", startRange.getStartOffset())); }
request.setRequestProperty(Constants.HeaderConstants.STORAGE_RANGE_HEADER, pageRange.toString());
@Test public void testDownloadPages() throws StorageException, URISyntaxException, IOException { final CloudPageBlob blobRef = setUpPageRanges(); ArrayList<PageRange> actualPageRanges = blobRef.downloadPageRanges(); ArrayList<PageRange> expectedPageRanges = new ArrayList<PageRange>(); expectedPageRanges.add(new PageRange(0, 512 - 1)); expectedPageRanges.add(new PageRange(2 * 512, 5 * 512 - 1)); expectedPageRanges.add(new PageRange(6 * 512, 7 * 512 - 1)); assertEquals(expectedPageRanges.size(), actualPageRanges.size()); for (int i = 0; i < expectedPageRanges.size(); i++) { assertEquals(expectedPageRanges.get(i).getStartOffset(), actualPageRanges.get(i).getStartOffset()); assertEquals(expectedPageRanges.get(i).getEndOffset(), actualPageRanges.get(i).getEndOffset()); } }
request.setRequestProperty(Constants.HeaderConstants.STORAGE_RANGE_HEADER, pageRange.toString());
/** * Returns the content of the page range as a string. * * @return A <code>String</code> which represents the contents of the page range. */ @Override public String toString() { return String.format("bytes=%d-%d", this.getStartOffset(), this.getEndOffset()); } }
@Test public void testDownloadPageRangesWithOffset() throws StorageException, URISyntaxException, IOException { final CloudPageBlob blobRef = setUpPageRanges(); List<PageRange> actualPageRanges = blobRef.downloadPageRanges((long)1*512, null); List<PageRange> expectedPageRanges = new ArrayList<PageRange>(); expectedPageRanges.add(new PageRange(2 * 512, 5 * 512 - 1)); expectedPageRanges.add(new PageRange(6 * 512, 7 * 512 - 1)); assertEquals(expectedPageRanges.size(), actualPageRanges.size()); for (int i = 0; i < expectedPageRanges.size(); i++) { assertEquals(expectedPageRanges.get(i).getStartOffset(), actualPageRanges.get(i).getStartOffset()); assertEquals(expectedPageRanges.get(i).getEndOffset(), actualPageRanges.get(i).getEndOffset()); } }
@Override public void endElement(String uri, String localName, String qName) throws SAXException { String currentNode = this.elementStack.pop(); // if the node popped from the stack and the localName don't match, the xml document is improperly formatted if (!localName.equals(currentNode)) { throw new SAXException(SR.INVALID_RESPONSE_RECEIVED); } String value = this.bld.toString(); if (value.isEmpty()) { value = null; } if (BlobConstants.PAGE_RANGE_ELEMENT.equals(currentNode)) { final PageRange pageRef = new PageRange(this.startOffset, this.endOffset); this.pages.add(pageRef); } else if (BlobConstants.START_ELEMENT.equals(currentNode)) { this.startOffset = Long.parseLong(value); } else if (Constants.END_ELEMENT.equals(currentNode)) { this.endOffset = Long.parseLong(value); } this.bld = new StringBuilder(); }
/** * Creates an instance of the <code>{@link PageRange}</code> class. * * @param start * A <code>long</code> which represents the starting offset. * @param end * A <code>long</code> which represents the ending offset. */ public PageRange(final long start, final long end) { this.setStartOffset(start); this.setEndOffset(end); }
if (allRanges.get(0).getStartOffset() != 0) { throw badStartRangeException(blob, allRanges.get(0)); (allRanges.get(0).getEndOffset() + 1) / PAGE_SIZE; } else { numberOfPagesRemaining = 0;
PageRange range = new PageRange(offset, offset + length - 1);
private void doUpdatePageBlob(CloudPageBlob client, InputStream is, BlobServiceRequestOptions opts, Exchange exchange) throws Exception { Long blobOffset = getConfiguration().getBlobOffset(); Long blobDataLength = getConfiguration().getDataLength(); PageRange range = exchange.getIn().getHeader(BlobServiceConstants.PAGE_BLOB_RANGE, PageRange.class); if (range != null) { blobOffset = range.getStartOffset(); blobDataLength = range.getEndOffset() - range.getStartOffset(); } if (blobDataLength == null) { blobDataLength = (long)is.available(); } try { client.uploadPages(is, blobOffset, blobDataLength, opts.getAccessCond(), opts.getRequestOpts(), opts.getOpContext()); } finally { closeInputStreamIfNeeded(is); } }
final PageRange pageRange = new PageRange(offset, offset + length - 1); final byte[] data = new byte[(int) length]; String md5 = null;
return 0; if (pageRanges.get(0).getStartOffset() != 0) { long totalRawBlobSize = pageRanges.get(0).getEndOffset() + 1;
PageRange range = new PageRange(offset, offset + length - 1);
private void clearPageBlob(Exchange exchange) throws Exception { LOG.trace("Clearing a page blob [{}] from exchange [{}]...", getConfiguration().getBlobName(), exchange); CloudPageBlob client = BlobServiceUtil.createPageBlobClient(getConfiguration()); BlobServiceRequestOptions opts = BlobServiceUtil.getRequestOptions(exchange); Long blobOffset = getConfiguration().getBlobOffset(); Long blobDataLength = getConfiguration().getDataLength(); PageRange range = exchange.getIn().getHeader(BlobServiceConstants.PAGE_BLOB_RANGE, PageRange.class); if (range != null) { blobOffset = range.getStartOffset(); blobDataLength = range.getEndOffset() - range.getStartOffset(); } if (blobDataLength == null) { blobDataLength = blobOffset == 0 ? getPageBlobSize(exchange) : 512L; } client.clearPages(blobOffset, blobDataLength, opts.getAccessCond(), opts.getRequestOpts(), opts.getOpContext()); }
final PageRange pageRange = new PageRange(offset, offset + length - 1); final byte[] data = new byte[(int) length]; String md5 = null;