private void updateTimeoutInMs() { if (serviceClient != null && timeoutIntervalInMs > 0) { serviceClient.getDefaultRequestOptions().setTimeoutIntervalInMs(timeoutIntervalInMs); } }
@NotNull public static CloudBlobClient getCloudBlobClient(@NotNull final StorageInputs inputs) throws Exception { final String storageConnectionString = String.format(STORAGE_AUTH_ENDPOINT, inputs.getStorageAccount(), inputs.getKey()); OperationContext.setDefaultProxy(getProxy(inputs.getProxyHost(), inputs.getProxyPort(), inputs.getProxyUsername(), inputs.getProxyPassword())); final CloudBlobClient client = CloudStorageAccount.parse(storageConnectionString).createCloudBlobClient(); if (inputs.getTimeout() != 0) { client.getDefaultRequestOptions().setTimeoutIntervalInMs(inputs.getTimeout()); } return client; } }
public CloudBlobContainer makeObject() throws URISyntaxException, StorageException { SDFSLogger.getLog().info("pool size is " + this.passiveObjects.size()); CloudBlobClient serviceClient = account.createCloudBlobClient(); serviceClient = account.createCloudBlobClient(); serviceClient.getDefaultRequestOptions().setConcurrentRequestCount( Main.dseIOThreads * 2); serviceClient.getDefaultRequestOptions().setTimeoutIntervalInMs( 10 * 1000); serviceClient.getDefaultRequestOptions().setRetryPolicyFactory( new RetryExponentialRetry(500, 5)); CloudBlobContainer container = serviceClient .getContainerReference(this.bucket); container.createIfNotExists(); return container; }
@Override public CloudBlobContainerWrapper getContainerReference(String name) throws URISyntaxException, StorageException { try { CloudBlobContainer container = new CloudBlobContainer(sasKeyGenerator.getContainerSASUri( storageAccount, name)); if (retryPolicy != null) { container.getServiceClient().getDefaultRequestOptions().setRetryPolicyFactory(retryPolicy); } if (timeoutIntervalInMs > 0) { container.getServiceClient().getDefaultRequestOptions().setTimeoutIntervalInMs(timeoutIntervalInMs); } return (useContainerSasKeyForAllAccess) ? new SASCloudBlobContainerWrapperImpl(storageAccount, container, null) : new SASCloudBlobContainerWrapperImpl(storageAccount, container, sasKeyGenerator); } catch (SASKeyGenerationException sasEx) { String errorMsg = "Encountered SASKeyGeneration exception while " + "generating SAS Key for container : " + name + " inside Storage account : " + storageAccount; LOG.error(errorMsg); throw new StorageException(SAS_ERROR_CODE, errorMsg, sasEx); } }
@Test public void testAppendBlobInputStream() throws URISyntaxException, StorageException, IOException { final int blobLength = 16 * 1024; final Random randGenerator = new Random(); String blobName = BlobTestHelper .generateRandomBlobNameWithPrefix("testblob"); final CloudAppendBlob blobRef = this.container .getAppendBlobReference(blobName); final byte[] buff = new byte[blobLength]; randGenerator.nextBytes(buff); buff[0] = -1; buff[1] = -128; final ByteArrayInputStream sourceStream = new ByteArrayInputStream(buff); final BlobRequestOptions options = new BlobRequestOptions(); final OperationContext operationContext = new OperationContext(); options.setTimeoutIntervalInMs(90000); options.setRetryPolicyFactory(new RetryNoRetry()); blobRef.upload(sourceStream, blobLength, null, options, operationContext); BlobInputStream blobStream = blobRef.openInputStream(); for (int i = 0; i < blobLength; i++) { int data = blobStream.read(); assertTrue(data >= 0); assertEquals(buff[i], (byte) data); } assertEquals(-1, blobStream.read()); blobRef.delete(); }
/** * @throws URISyntaxException * @throws StorageException * @throws IOException */ @Test public void testPageBlobInputStream() throws URISyntaxException, StorageException, IOException { final int blobLength = 16 * 1024; final Random randGenerator = new Random(); String blobName = BlobTestHelper.generateRandomBlobNameWithPrefix("testblob"); final CloudPageBlob blobRef = this.container.getPageBlobReference(blobName); final byte[] buff = new byte[blobLength]; randGenerator.nextBytes(buff); buff[0] = -1; buff[1] = -128; final ByteArrayInputStream sourceStream = new ByteArrayInputStream(buff); final BlobRequestOptions options = new BlobRequestOptions(); final OperationContext operationContext = new OperationContext(); options.setTimeoutIntervalInMs(90000); options.setRetryPolicyFactory(new RetryNoRetry()); blobRef.upload(sourceStream, blobLength, null, options, operationContext); BlobInputStream blobStream = blobRef.openInputStream(); for (int i = 0; i < blobLength; i++) { int data = blobStream.read(); assertTrue(data >= 0); assertEquals(buff[i], (byte) data); } assertEquals(-1, blobStream.read()); blobRef.delete(); }
final OperationContext operationContext = new OperationContext(); options.setStoreBlobContentMD5(true); options.setTimeoutIntervalInMs(90000); options.setRetryPolicyFactory(new RetryNoRetry()); blobRef.uploadFullBlob(sourceStream, blobLength, null, options, operationContext);
@Test @Category({ DevFabricTests.class, DevStoreTests.class, SecondaryTests.class }) public void testBlobMaximumExecutionTime() throws URISyntaxException, StorageException { OperationContext opContext = new OperationContext(); setDelay(opContext, 2500); // set the maximum execution time BlobRequestOptions options = new BlobRequestOptions(); options.setMaximumExecutionTimeInMs(2000); // set the location mode to secondary, secondary request should fail // so set the timeout low to save time failing (or fail with a timeout) options.setLocationMode(LocationMode.SECONDARY_THEN_PRIMARY); options.setTimeoutIntervalInMs(1000); CloudBlobClient blobClient = TestHelper.createCloudBlobClient(); CloudBlobContainer container = blobClient.getContainerReference(generateRandomName("container")); try { // 1. download attributes will fail as the container does not exist // 2. the executor will attempt to retry as it is accessing secondary // 3. maximum execution time should prevent the retry from being made container.downloadAttributes(null, options, opContext); fail("Maximum execution time was reached but request did not fail."); } catch (StorageException e) { assertEquals(SR.MAXIMUM_EXECUTION_TIMEOUT_EXCEPTION, e.getMessage()); } }