Example #1
0
        // have destination location.
        // have original blob name and prefix
        // new name should be destination name + (blob.name - blob.prefix)
        public static BlobCopyData StartCopy(BasicBlobContainer origBlob, string DestinationUrl, DestinationBlobType destBlobType, bool skipIfExists)
        {
            var client = AzureHelper.GetTargetCloudBlobClient(DestinationUrl);
            var opt    = client.GetServiceProperties();

            var containerName  = AzureHelper.GetContainerFromUrl(DestinationUrl);
            var destBlobPrefix = AzureHelper.GetBlobFromUrl(DestinationUrl);

            var container = client.GetContainerReference(containerName);

            container.CreateIfNotExists();

            ICloudBlob blob = null;
            var        url  = GeneratedAccessibleUrl(origBlob);

            string blobName;

            string blobWithoutPrefix = string.Empty;

            if (!string.IsNullOrWhiteSpace(origBlob.BlobPrefix) && origBlob.Name.Length > origBlob.BlobPrefix.Length)
            {
                blobWithoutPrefix = origBlob.Name.Substring(origBlob.BlobPrefix.Length);
            }

            if (!string.IsNullOrWhiteSpace(blobWithoutPrefix))
            {
                blobName = string.Format("{0}/{1}", destBlobPrefix, blobWithoutPrefix);
            }
            else
            {
                // need to get just filename. ie last element of /
                var actualBlobName = origBlob.Name.Split('/').Last();

                if (string.IsNullOrWhiteSpace(destBlobPrefix))
                {
                    blobName = actualBlobName;
                }
                else
                {
                    blobName = string.Format("{0}/{1}", destBlobPrefix, actualBlobName);
                }
            }

            // include unknown for now. Unsure.
            if (destBlobType == DestinationBlobType.Block || destBlobType == DestinationBlobType.Unknown)
            {
                blob = container.GetBlockBlobReference(blobName);
            }
            else if (destBlobType == DestinationBlobType.Page)
            {
                blob = container.GetPageBlobReference(blobName);
            }

            if (skipIfExists)
            {
                try
                {
                    blob.Exists();
                }
                catch (Exception)
                {
                    Console.WriteLine("Skipping {0}", url);
                    return(null);
                }
            }

            if (blob != null)
            {
                try
                {
                    // crazy large values, want to try and debug an issue.
                    var brOptions = new BlobRequestOptions();
                    brOptions.MaximumExecutionTime = new TimeSpan(0, maxExecutionTimeInMins, 0);
                    brOptions.ServerTimeout        = new TimeSpan(0, maxServerTimeoutInMins, 0);

                    // return copyID incase user wants to kill the process later.
                    var copyID = blob.StartCopyFromBlob(new Uri(url), options: brOptions);

                    var bcd = new BlobCopyData {
                        CopyID = copyID, Blob = blob
                    };
                    return(bcd);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("StartCopyFromBlob error msg " + ex.Message);
                    Console.WriteLine("StartCopyFromBlob error stack " + ex.StackTrace);
                    throw;
                }
            }
            else
            {
                throw new NotImplementedException("Cannot copy blobs that are not block or page");
            }
        }
Example #2
0
        /// <summary>
        /// Start copying all the blobs using BlobCopy API.
        /// Will break it into batches.
        /// </summary>
        /// <param name="origBlobList"></param>
        /// <param name="destinationUrl"></param>
        /// <param name="destBlobType"></param>
        public static void StartCopyList(IEnumerable <BasicBlobContainer> origBlobList, string destinationUrl, DestinationBlobType destBlobType, bool debugMode, bool skipIfExists)
        {
            var blobCopyDataList = new List <BlobCopyData>();

            var count = 0;

            // break into batches
            foreach (var blob in origBlobList)
            {
                try
                {
                    Console.WriteLine("Copy blob " + blob.DisplayName);
                    var bcd = AzureBlobCopyHandler.StartCopy(blob, destinationUrl, destBlobType, skipIfExists);
                    if (bcd != null)
                    {
                        Console.WriteLine("BlobCopy ID " + bcd.CopyID);
                        blobCopyDataList.Add(bcd);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Unable to start copying " + blob.DisplayName);
                    if (debugMode)
                    {
                        Console.WriteLine("Exception " + ex.ToString());
                    }
                }

                count++;

                if (count > blobCopyBatchSize)
                {
                    Console.WriteLine("New Batch");
                    // if blob copy and monitoring
                    if (ConfigHelper.MonitorBlobCopy)
                    {
                        AzureBlobCopyHandler.MonitorBlobCopy(destinationUrl);
                    }

                    count = 0;
                }
            }

            if (count > 0)
            {
                // if blob copy and monitoring
                if (ConfigHelper.MonitorBlobCopy)
                {
                    Console.WriteLine("New Batch");
                    AzureBlobCopyHandler.MonitorBlobCopy(destinationUrl);
                }
            }
        }
        // have destination location.
        // have original blob name and prefix
        // new name should be destination name + (blob.name - blob.prefix)
        public static BlobCopyData StartCopy(BasicBlobContainer origBlob, string DestinationUrl, DestinationBlobType destBlobType)
        {
            var client = AzureHelper.GetTargetCloudBlobClient(DestinationUrl);
            var opt = client.GetServiceProperties();

            var containerName = AzureHelper.GetContainerFromUrl( DestinationUrl);
            var destBlobPrefix = AzureHelper.GetBlobFromUrl( DestinationUrl );

            var container = client.GetContainerReference( containerName );
            container.CreateIfNotExists();

            ICloudBlob blob = null;
            var url = GeneratedAccessibleUrl(origBlob);

            string blobName;

            string blobWithoutPrefix = string.Empty;

            if (!string.IsNullOrWhiteSpace(origBlob.BlobPrefix) && origBlob.Name.Length > origBlob.BlobPrefix.Length)
            {
                blobWithoutPrefix = origBlob.Name.Substring(origBlob.BlobPrefix.Length);
            }

            if (!string.IsNullOrWhiteSpace(blobWithoutPrefix))
            {
                blobName = string.Format("{0}/{1}", destBlobPrefix, blobWithoutPrefix);
            }
            else
            {
                // need to get just filename. ie last element of /
                var actualBlobName = origBlob.Name.Split('/').Last();

                if (string.IsNullOrWhiteSpace(destBlobPrefix))
                {
                    blobName = actualBlobName;
                }
                else
                {
                    blobName = string.Format("{0}/{1}", destBlobPrefix, actualBlobName);
                }
            }

            // include unknown for now. Unsure.
            if (destBlobType == DestinationBlobType.Block || destBlobType == DestinationBlobType.Unknown)
            {
                blob = container.GetBlockBlobReference(blobName);

            } else if (destBlobType == DestinationBlobType.Page)
            {
                blob = container.GetPageBlobReference(blobName);
            }

            if (blob != null)
            {
                try
                {
                    // crazy large values, want to try and debug an issue.
                    var brOptions = new BlobRequestOptions();
                    brOptions.MaximumExecutionTime = new TimeSpan(0, maxExecutionTimeInMins, 0);
                    brOptions.ServerTimeout = new TimeSpan(0, maxServerTimeoutInMins, 0);

                    // return copyID incase user wants to kill the process later.
                    var copyID = blob.StartCopyFromBlob(new Uri(url), options: brOptions);

                    var bcd = new BlobCopyData { CopyID = copyID, Blob = blob };
                    return bcd;
                }
                catch(Exception ex)
                {
                    Console.WriteLine("StartCopyFromBlob error msg " + ex.Message);
                    Console.WriteLine("StartCopyFromBlob error stack " + ex.StackTrace);
                    throw;

                }
            }
            else
            {
                throw new NotImplementedException("Cannot copy blobs that are not block or page");
            }
        }
        /// <summary>
        /// Start copying all the blobs using BlobCopy API.
        /// Will break it into batches.
        /// </summary>
        /// <param name="origBlobList"></param>
        /// <param name="destinationUrl"></param>
        /// <param name="destBlobType"></param>
        public static void StartCopyList(IEnumerable <BasicBlobContainer> origBlobList, string destinationUrl, DestinationBlobType destBlobType)
        {
            var blobCopyDataList = new List <BlobCopyData>();

            var count = 0;

            // break into batches
            foreach (var blob in origBlobList)
            {
                Console.WriteLine("Copy blob " + blob.DisplayName);
                var bcd = AzureBlobCopyHandler.StartCopy(blob, destinationUrl, destBlobType);
                Console.WriteLine("BlobCopy ID " + bcd.CopyID);
                blobCopyDataList.Add(bcd);

                count++;

                if (count > blobCopyBatchSize)
                {
                    Console.WriteLine("New Batch");
                    // if blob copy and monitoring
                    if (ConfigHelper.MonitorBlobCopy)
                    {
                        AzureBlobCopyHandler.MonitorBlobCopy(destinationUrl);
                    }

                    count = 0;
                }
            }

            if (count > 0)
            {
                // if blob copy and monitoring
                if (ConfigHelper.MonitorBlobCopy)
                {
                    Console.WriteLine("New Batch");
                    AzureBlobCopyHandler.MonitorBlobCopy(destinationUrl);
                }
            }
        }
        /// <summary>
        /// Start copying all the blobs using BlobCopy API.
        /// Will break it into batches.
        /// </summary>
        /// <param name="origBlobList"></param>
        /// <param name="destinationUrl"></param>
        /// <param name="destBlobType"></param>
        public static void StartCopyList(IEnumerable<BasicBlobContainer> origBlobList, string destinationUrl, DestinationBlobType destBlobType)
        {
            var blobCopyDataList = new List<BlobCopyData>();

            var count = 0;

            // break into batches
            foreach (var blob in origBlobList)
            {
                Console.WriteLine("Copy blob " + blob.DisplayName);
                var bcd = AzureBlobCopyHandler.StartCopy(blob, destinationUrl, destBlobType);
                Console.WriteLine("BlobCopy ID " + bcd.CopyID);
                blobCopyDataList.Add(bcd);

                count++;

                if (count > blobCopyBatchSize)
                {
                    Console.WriteLine("New Batch");
                    // if blob copy and monitoring
                    if (ConfigHelper.MonitorBlobCopy)
                    {
                        AzureBlobCopyHandler.MonitorBlobCopy(destinationUrl);
                    }

                    count = 0;
                }

            }

            if (count > 0)
            {
                // if blob copy and monitoring
                if (ConfigHelper.MonitorBlobCopy)
                {
                    Console.WriteLine("New Batch");
                    AzureBlobCopyHandler.MonitorBlobCopy(destinationUrl);
                }
            }
        }