Esempio n. 1
0
        private static int GetTotalSubscriberCount(IInformationObject informationObject, ref int CurrMaxSubs, ref int CurrMaxDistinct, Dictionary <string, SubcriptionGraphItem> lookupDictionary)
        {
            string location = informationObject.RelativeLocation;
            //SubscribeSupport.GetSubscriptionDictionary(location, populatedDictionary);

            List <Subscription> result          = new List <Subscription>();
            Stack <string>      subscriberStack = new Stack <string>();

            SubscribeSupport.GetSubcriptionList(location, result, subscriberStack, lookupDictionary);
            int count         = result.Count;
            int distinctCount = result.Select(sub => sub.SubscriberRelativeLocation).Distinct().Count();

            if (result.Count >= CurrMaxSubs || distinctCount >= CurrMaxDistinct)
            {
                if (count > CurrMaxSubs)
                {
                    CurrMaxSubs = count;
                }
                if (distinctCount > CurrMaxDistinct)
                {
                    CurrMaxDistinct = distinctCount;
                }
                Console.WriteLine(count + " / " + distinctCount + " : " + location);
            }
            return(count);
        }
Esempio n. 2
0
        private static void TestSubscriptionExecution(string groupID)
        {
            string interestGroupLocation = "grp/" + groupID + "/";
            var    informationObjects    =
                StorageSupport.CurrActiveContainer.GetInformationObjects(interestGroupLocation, null,
                                                                         io => io is AddressAndLocation &&
                                                                         SubscribeSupport.GetSubscriptions(
                                                                             io.RelativeLocation) != null).ToArray
                    ();
            OperationRequest operationRequest       = new OperationRequest();
            SubscriptionChainRequestContent content = SubscriptionChainRequestContent.CreateDefault();
            SubscriptionChainRequestMessage message = SubscriptionChainRequestMessage.CreateDefault();

            message.ContentItemID = content.ID;
            content.SubmitTime    = DateTime.UtcNow;
            SubscriptionTarget[] targets = informationObjects.
                                           Select(io =>
            {
                SubscriptionTarget target = SubscriptionTarget.CreateDefault();
                target.BlobLocation       = io.RelativeLocation;
                return(target);
            }).ToArray();
            content.SubscriptionTargetCollection.CollectionContent.AddRange(targets);
            content.StoreInformation();
            WorkerSupport.ExecuteSubscriptionChain(message);
        }
Esempio n. 3
0
        private bool PollAndHandleSubscriptionChain(Task[] tasks, int availableIx, Task availableTask)
        {
            var result = SubscribeSupport.GetOwnerChainsInOrderOfSubmission();

            if (result.Length == 0)
            {
                return(false);
            }
            string acquiredEtag     = null;
            var    firstLockedOwner =
                result.FirstOrDefault(
                    lockCandidate => SubscribeSupport.AcquireChainLock(lockCandidate, out acquiredEtag));

            if (firstLockedOwner == null)
            {
                return(false);
            }
            var executing =
                Task.Factory.StartNew(
                    () =>
                    WorkerSupport.ProcessOwnerSubscriptionChains(firstLockedOwner, acquiredEtag,
                                                                 CURRENT_HARDCODED_CONTAINER_NAME));

            tasks[availableIx] = executing;
            if (availableTask.Exception != null)
            {
                ErrorSupport.ReportException(availableTask.Exception);
            }
            return(true);
        }
Esempio n. 4
0
        private static void ReportAllSubscriptionCounts(string groupID)
        {
            //var informationObjects = GetAllInformationObjects(io => SubscribeSupport.GetSubscriptions(io.RelativeLocation) != null).ToArray();
            long   memBefore             = GC.GetTotalMemory(false);
            string interestGroupLocation = "grp/" + groupID + "/";
            var    informationObjects    = StorageSupport.CurrActiveContainer.GetInformationObjects(interestGroupLocation, null, io => io is AddressAndLocation &&
                                                                                                    SubscribeSupport.GetSubscriptions(io.RelativeLocation) != null).ToArray();

            int currMaxSubs     = 0;
            int currMaxDistinct = 0;
            Dictionary <string, SubcriptionGraphItem> lookupDictionary = new Dictionary <string, SubcriptionGraphItem>();
            //lookupDictionary = null;
            DateTime before = DateTime.Now;

            foreach (var iObject in informationObjects)
            {
                int subCount = GetTotalSubscriberCount(iObject, ref currMaxSubs, ref currMaxDistinct, lookupDictionary);
            }
            DateTime after                  = DateTime.Now;
            var      executionOrder         = lookupDictionary.GetExecutionOrder();
            var      subscriptionsToExecute = executionOrder.SelectMany(exec => exec.GetMySubscriptionsFromTargets()).ToArray();
            DateTime afterWards             = DateTime.Now;
            TimeSpan duration1              = after - before;
            TimeSpan duration2              = afterWards - before;
            var      filteredListToExecute  =
                SubscribeSupport.GetSubscriptionChainItemsInOrderOfExecution(
                    informationObjects.Select(io => io.RelativeLocation).ToArray());
            long memAfter = GC.GetTotalMemory(false);
        }
 public void SubscribeTargetToSourceChanges(CloudBlob subscriber)
 {
     if (subscriber.CanContainExternalMetadata() == false)
     {
         throw new InvalidDataException("Subscriber candidate cannot contain metadata: " + subscriber.Name);
     }
     foreach (var source in CollectionContent.Where(src => src.IsInformationObjectSource))
     {
         SubscribeSupport.AddSubscriptionToObject(source.SourceLocation, subscriber.Name,
                                                  SubscribeSupport.SubscribeType_WebPageToSource);
     }
 }