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); }
public static void ExecuteSubscriptionChain(SubscriptionChainRequestMessage subscriptionChainRequest) { InformationContext.Current.IsExecutingSubscriptions = true; SubscriptionChainRequestContent requestContent = SubscriptionChainRequestContent.RetrieveFromDefaultLocation(subscriptionChainRequest.ContentItemID); requestContent.ProcessingStartTime = DateTime.UtcNow; requestContent.StoreInformation(); string[] subscriptionTargetList = requestContent.SubscriptionTargetCollection.CollectionContent.Select(subTarget => subTarget.BlobLocation) .ToArray(); var subscriptions = SubscribeSupport.GetSubscriptionChainItemsInOrderOfExecution(subscriptionTargetList); int currSubscription = 1; var informationObjectSubscriptions = subscriptions.Where(sub => sub.SubscriptionType != SubscribeSupport.SubscribeType_WebPageToSource). ToArray(); var webPageSubscriptions = subscriptions.Where(sub => sub.SubscriptionType == SubscribeSupport.SubscribeType_WebPageToSource). ToArray(); foreach (var subscription in informationObjectSubscriptions) { ExecuteSubscription(subscription); Debug.WriteLine("Executing subscription {0} of total {1} of {2} for {3}", currSubscription++, subscriptions.Length, subscription.SubscriptionType, subscription.SubscriberRelativeLocation); } requestContent.ProcessingEndTimeInformationObjects = DateTime.UtcNow; requestContent.StoreInformation(); foreach (var subscription in webPageSubscriptions) { //ExecuteSubscription(subscription); OperationRequest operationRequest = new OperationRequest(); operationRequest.SubscriberNotification = subscription; QueueSupport.PutToOperationQueue(operationRequest); Debug.WriteLine("Executing subscription {0} of total {1} of {2} for {3}", currSubscription++, subscriptions.Length, subscription.SubscriptionType, subscription.SubscriberRelativeLocation); } requestContent.ProcessingEndTimeWebTemplatesRendering = DateTime.UtcNow; requestContent.ProcessingEndTime = DateTime.UtcNow; requestContent.StoreInformation(); InformationContext.Current.IsExecutingSubscriptions = false; }
public static void AddPendingRequests(IContainerOwner owner, string[] subscriptionTargets) { if (owner == null) { throw new ArgumentNullException("owner"); } var requestContent = SubscriptionChainRequestContent.CreateDefault(); DateTime submitTime = DateTime.UtcNow; string dateTimePrefix = submitTime.ToString("yyyyMMdd_HHmmss"); requestContent.ID = dateTimePrefix + "_" + requestContent.ID; requestContent.SubscriptionTargetCollection.CollectionContent. AddRange(subscriptionTargets.Select(target => new SubscriptionTarget() { BlobLocation = target })); requestContent.SubmitTime = submitTime; string ownerSubscriptionLocation = GetOwnerIDStatusBasedLocation(owner, requestContent.ID, StatusValue_Pending); requestContent.RelativeLocation = ownerSubscriptionLocation; requestContent.StoreInformation(); }