/** * Returns the updated information for the written blob. Calling this method when {@code isDone()} * is {@code false} will block until all pending chunks are copied. * * <p>This method has the same effect of doing: * * <pre>{@code * while (!copyWriter.isDone()) { * copyWriter.copyChunk(); * } * }</pre> * * @throws StorageException upon failure */ public Blob getResult() { while (!isDone()) { copyChunk(); } return Blob.fromPb(serviceOptions.getService(), rewriteResponse.result); }
/** Example of copying a blob in chunks. */ // [TARGET copy(CopyRequest)] // [VARIABLE "my_unique_bucket"] // [VARIABLE "my_blob_name"] // [VARIABLE "copy_blob_name"] public Blob copyBlobInChunks(String bucketName, String blobName, String copyBlobName) { // [START copyBlobInChunks] CopyRequest request = CopyRequest.newBuilder() .setSource(BlobId.of(bucketName, blobName)) .setTarget(BlobId.of(bucketName, copyBlobName)) .build(); CopyWriter copyWriter = storage.copy(request); while (!copyWriter.isDone()) { copyWriter.copyChunk(); } Blob blob = copyWriter.getResult(); // [END copyBlobInChunks] return blob; }
@Test public void testSaveAndRestoreWithObject() { EasyMock.expect(storageRpcMock.continueRewrite(RESPONSE_WITH_OBJECT)) .andReturn(RESPONSE_WITH_OBJECT); EasyMock.expect(storageRpcMock.continueRewrite(RESPONSE_WITH_OBJECT)) .andReturn(RESPONSE_WITH_OBJECT_DONE); EasyMock.replay(storageRpcMock); copyWriter = new CopyWriter(options, RESPONSE_WITH_OBJECT); copyWriter.copyChunk(); assertTrue(!copyWriter.isDone()); assertEquals(21L, copyWriter.getTotalBytesCopied()); assertEquals(42L, copyWriter.getBlobSize()); RestorableState<CopyWriter> rewriterState = copyWriter.capture(); CopyWriter restoredRewriter = rewriterState.restore(); assertEquals(result, restoredRewriter.getResult()); assertTrue(restoredRewriter.isDone()); assertEquals(42L, restoredRewriter.getTotalBytesCopied()); assertEquals(42L, restoredRewriter.getBlobSize()); }
@Test public void testSaveAndRestoreWithoutObject() { EasyMock.expect(storageRpcMock.continueRewrite(RESPONSE_WITHOUT_OBJECT)) .andReturn(RESPONSE_WITHOUT_OBJECT); EasyMock.expect(storageRpcMock.continueRewrite(RESPONSE_WITHOUT_OBJECT)) .andReturn(RESPONSE_WITHOUT_OBJECT_DONE); EasyMock.replay(storageRpcMock); copyWriter = new CopyWriter(options, RESPONSE_WITHOUT_OBJECT); copyWriter.copyChunk(); assertTrue(!copyWriter.isDone()); assertEquals(21L, copyWriter.getTotalBytesCopied()); assertEquals(42L, copyWriter.getBlobSize()); RestorableState<CopyWriter> rewriterState = copyWriter.capture(); CopyWriter restoredRewriter = rewriterState.restore(); assertEquals(result, restoredRewriter.getResult()); assertTrue(restoredRewriter.isDone()); assertEquals(42L, restoredRewriter.getTotalBytesCopied()); assertEquals(42L, restoredRewriter.getBlobSize()); }
@Test public void testSaveAndRestoreWithResult() { EasyMock.expect(storageRpcMock.continueRewrite(RESPONSE_WITH_OBJECT)) .andReturn(RESPONSE_WITH_OBJECT_DONE); EasyMock.replay(storageRpcMock); copyWriter = new CopyWriter(options, RESPONSE_WITH_OBJECT); copyWriter.copyChunk(); assertEquals(result, copyWriter.getResult()); assertTrue(copyWriter.isDone()); assertEquals(42L, copyWriter.getTotalBytesCopied()); assertEquals(42L, copyWriter.getBlobSize()); RestorableState<CopyWriter> rewriterState = copyWriter.capture(); CopyWriter restoredRewriter = rewriterState.restore(); assertEquals(result, restoredRewriter.getResult()); assertTrue(restoredRewriter.isDone()); assertEquals(42L, restoredRewriter.getTotalBytesCopied()); assertEquals(42L, restoredRewriter.getBlobSize()); } }
/** * Returns the updated information for the written blob. Calling this method when {@code isDone()} * is {@code false} will block until all pending chunks are copied. * * <p>This method has the same effect of doing: * * <pre>{@code * while (!copyWriter.isDone()) { * copyWriter.copyChunk(); * } * }</pre> * * @throws StorageException upon failure */ public Blob getResult() { while (!isDone()) { copyChunk(); } return Blob.fromPb(serviceOptions.getService(), rewriteResponse.result); }