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); }
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); }
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); }
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); } }