/// <summary>
        /// List containers by container name prefix
        /// </summary>
        /// <param name="prefix">Container name prefix</param>
        /// <returns>An enumerable collection of cloudblobcontainer</returns>
        internal IEnumerable <Tuple <AzureStorageContainer, BlobContinuationToken> > ListContainersByPrefix(string prefix, Func <string, bool> containerFilter = null)
        {
            BlobServiceClient   blobServiceClient = Util.GetTrack2BlobServiceClient(this.Channel.StorageContext, ClientOptions);
            BlobContainerTraits traits            = BlobContainerTraits.Metadata;
            BlobContainerStates states            = BlobContainerStates.None;

            if (this.IncludeDeleted.IsPresent)
            {
                states = BlobContainerStates.Deleted;
            }
            if (!string.IsNullOrEmpty(prefix) && !NameUtil.IsValidContainerPrefix(prefix))
            {
                throw new ArgumentException(String.Format(Resources.InvalidContainerName, prefix));
            }

            int    listCount         = InternalMaxCount;
            int    MaxListCount      = 5000;
            int    requestCount      = MaxListCount;
            int    realListCount     = 0;
            string continuationToken = this.ContinuationToken is null ? null : this.ContinuationToken.NextMarker;

            do
            {
                requestCount  = Math.Min(listCount, MaxListCount);
                realListCount = 0;

                IEnumerator <Page <BlobContainerItem> > enumerator = blobServiceClient.GetBlobContainers(traits, states, prefix, this.CmdletCancellationToken)
                                                                     .AsPages(continuationToken, requestCount)
                                                                     .GetEnumerator();

                Page <BlobContainerItem> page;
                enumerator.MoveNext();
                page = enumerator.Current;

                foreach (BlobContainerItem item in page.Values)
                {
                    if (containerFilter == null || containerFilter(item.Name))
                    {
                        yield return(new Tuple <AzureStorageContainer, BlobContinuationToken>(
                                         new AzureStorageContainer(item, Channel.StorageContext, blobServiceClient),
                                         string.IsNullOrEmpty(page.ContinuationToken) ? null : new BlobContinuationToken()
                        {
                            NextMarker = page.ContinuationToken
                        }));

                        realListCount++;
                    }
                    realListCount++;
                }
                continuationToken = page.ContinuationToken;

                if (InternalMaxCount != int.MaxValue)
                {
                    listCount -= realListCount;
                }
            }while (listCount > 0 && !string.IsNullOrEmpty(continuationToken));
        }
示例#2
0
 public GetBlobContainersAsyncCollection(
     BlobServiceClient client,
     BlobContainerTraits traits,
     BlobContainerStates states,
     string prefix = default)
 {
     _client = client;
     _traits = traits;
     _states = states;
     _prefix = prefix;
 }
示例#3
0
        /// <summary>
        /// Convert the details into ListContainersIncludeType values.
        /// </summary>
        /// <returns>ListContainersIncludeType values</returns>
        internal static IEnumerable <ListContainersIncludeType> AsIncludeItems(BlobContainerTraits traits, BlobContainerStates states)
        {
            // Remove this line
            Debug.Assert(states == BlobContainerStates.None);
            var items = new List <ListContainersIncludeType>();

            // Uncomment when feature is re-enabled.
            //if ((states & BlobContainerStates.Deleted) == BlobContainerStates.Deleted)
            //{
            //    items.Add(ListContainersIncludeType.Deleted);
            //}
            if ((traits & BlobContainerTraits.Metadata) == BlobContainerTraits.Metadata)
            {
                items.Add(ListContainersIncludeType.Metadata);
            }

            return(items.Count > 0 ? items : null);
        }
示例#4
0
        /// <summary>
        /// Convert the details into ListContainersIncludeType values.
        /// </summary>
        /// <returns>ListContainersIncludeType values</returns>
        internal static IEnumerable <ListContainersIncludeType> AsIncludeItems(BlobContainerTraits traits, BlobContainerStates states)
        {
            var items = new List <ListContainersIncludeType>();

            if ((states & BlobContainerStates.Deleted) == BlobContainerStates.Deleted)
            {
                items.Add(ListContainersIncludeType.Deleted);
            }
            if ((traits & BlobContainerTraits.Metadata) == BlobContainerTraits.Metadata)
            {
                items.Add(ListContainersIncludeType.Metadata);
            }

            return(items.Count > 0 ? items : null);
        }