Exemple #1
0
        private void SetRequestOptionsInDataMovement(BlobTransferOptions opts)
        {
            BlobRequestOptions cmdletOptions = RequestOptions;

            if (cmdletOptions == null)
            {
                return;
            }

            foreach (BlobRequestOperation operation in Enum.GetValues(typeof(BlobRequestOperation)))
            {
                BlobRequestOptions requestOptions = opts.GetBlobRequestOptions(operation);

                if (cmdletOptions.MaximumExecutionTime != null)
                {
                    requestOptions.MaximumExecutionTime = cmdletOptions.MaximumExecutionTime;
                }

                if (cmdletOptions.ServerTimeout != null)
                {
                    requestOptions.ServerTimeout = cmdletOptions.ServerTimeout;
                }

                opts.SetBlobRequestOptions(operation, requestOptions);
            }
        }
        private void SetRequestOptionsInDataMovement(BlobTransferOptions opts)
        {
            BlobRequestOptions cmdletOptions = RequestOptions;

            if (cmdletOptions == null)
            {
                return;
            }
            
            foreach (BlobRequestOperation operation in Enum.GetValues(typeof(BlobRequestOperation)))
            {
                BlobRequestOptions requestOptions = opts.GetBlobRequestOptions(operation);

                if (cmdletOptions.MaximumExecutionTime != null)
                {
                    requestOptions.MaximumExecutionTime = cmdletOptions.MaximumExecutionTime;
                }

                if (cmdletOptions.ServerTimeout != null)
                {
                    requestOptions.ServerTimeout = cmdletOptions.ServerTimeout;
                }

                opts.SetBlobRequestOptions(operation, requestOptions);    
            }
        }
Exemple #3
0
        /// <summary>
        /// Gets data content from the data container
        /// </summary>
        /// <returns>data content in the data container</returns>
        public byte[] GetData()
        {
            TraceHelper.TraceSource.TraceEvent(TraceEventType.Verbose, 0, "[BlobDataContainer] .GetData: blob url={0}", this.dataBlob.Uri.AbsoluteUri);

            WaitUntilTransferComplete(this.dataBlob);

            Exception transferException = null;

            byte[] data = new byte[this.dataBlob.Properties.Length];
            using (MemoryStream ms = new MemoryStream(data))
            {
                TraceHelper.TraceSource.TraceEvent(
                    TraceEventType.Verbose,
                    0,
                    "[BlobDataContainer] .GetData: download blob. threadCount={0} minBackoffInSeconds={1} maxBackoffInSeconds={2} retryCount={3} timeoutInSeconds={4}",
                    downloadBlobThreadCount,
                    downloadBlobMinBackoffInSeconds,
                    downloadBlobMaxBackoffInSeconds,
                    downloadBlobRetryCount,
                    downloadBlobTimeoutInSeconds);

                ExponentialRetry downloadRetryPolicy =
                    new ExponentialRetry(
                        TimeSpan.FromSeconds(downloadBlobMinBackoffInSeconds),
                        downloadBlobRetryCount);

                BlobRequestOptions blobRequestOptions = new BlobRequestOptions()
                {
                    RetryPolicy          = downloadRetryPolicy,
                    MaximumExecutionTime = TimeSpan.FromSeconds(downloadBlobTimeoutInSeconds),
                };

                BlobTransferOptions options = new BlobTransferOptions();
                options.Concurrency = downloadBlobThreadCount;
                options.SetBlobRequestOptions(BlobRequestOperation.OpenRead, blobRequestOptions);

                using (BlobTransferManager transferManager = new BlobTransferManager(options))
                {
                    transferManager.QueueDownload(
                        this.dataBlob,
                        ms,
                        true,
                        null,
                        delegate(object userData, double speed, double progress)
                    {
                        TraceHelper.TraceSource.TraceEvent(TraceEventType.Verbose, 0, "[BlobDataContainer] .GetData: progress={0}%", progress);
                    },
                        delegate(object userData, Exception ex)
                    {
                        if (ex != null)
                        {
                            transferException = ex;
                        }
                    },
                        null);

                    transferManager.WaitForCompletion();
                }
            }

            TraceHelper.TraceSource.TraceEvent(TraceEventType.Verbose, 0, "[BlobDataContainer] .GetData: data transfer done");

            if (transferException == null)
            {
                return(data);
            }

            TraceHelper.TraceSource.TraceEvent(TraceEventType.Error, 0, "[BlobDataContainer] .GetData: received exception={0}", transferException);
            throw TranslateTransferExceptionToDataException(transferException);
        }