Пример #1
0
        public void PerformFinalizingActions()
        {
            var grouped = SubscriptionChainTargetsToUpdate.GroupBy(item => item.Owner);

            foreach (var grpItem in grouped)
            {
                SubscribeSupport.AddPendingRequests(grpItem.Key, grpItem.Select(item => item.TargetLocation).ToArray());
            }
            FinalizingOperationQueue.ForEach(oper => QueueSupport.PutToOperationQueue(oper));
        }
Пример #2
0
        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;
        }
Пример #3
0
 public static bool ProcessOwnerSubscriptionChains(IContainerOwner lockedOwner, string acquiredEtag, string containerName)
 {
     try
     {
         if (containerName != null)
         {
             InformationContext.Current.InitializeCloudStorageAccess(containerName: containerName);
         }
         string[]     blobs        = SubscribeSupport.GetChainRequestList(lockedOwner);
         var          chainContent = blobs.Select(blob => StorageSupport.RetrieveInformation(blob, typeof(SubscriptionChainRequestContent))).Cast <SubscriptionChainRequestContent>().ToArray();
         const double invalidSubscriptionSubmissionTimeInSeconds = 600;
         if (chainContent.Any(item => item.SubmitTime < DateTime.UtcNow.AddSeconds(-invalidSubscriptionSubmissionTimeInSeconds)))
         {
             return(false);
         }
         WorkerSupport.ExecuteSubscriptionChains(chainContent);
         foreach (string blob in blobs)
         {
             StorageSupport.DeleteBlob(blob);
         }
     }
     catch (Exception ex)
     {
         ErrorSupport.ReportException(ex);
         throw;
     }
     finally
     {
         SubscribeSupport.ReleaseChainLock(lockedOwner, acquiredEtag);
         if (containerName != null)
         {
             InformationContext.ProcessAndClearCurrent();
         }
     }
     counter++;
     if (counter >= 1000)
     {
         QueueSupport.ReportStatistics("Processed " + counter + " messages...");
         counter = 0;
     }
     return(true);
 }
Пример #4
0
        public static bool PollAndExecuteChainSubscription()
        {
            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);
            }
            ProcessOwnerSubscriptionChains(firstLockedOwner, acquiredEtag, null);
            return(true);
        }
Пример #5
0
 public static void ExecuteSubscriptionChains(params SubscriptionChainRequestContent[] contentList)
 {
     InformationContext.Current.IsExecutingSubscriptions = true;
     try
     {
         string[] subscriptionTargetList =
             contentList.SelectMany(reqContent => reqContent.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);
         }
         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);
         }
     }
     finally
     {
         InformationContext.Current.IsExecutingSubscriptions = false;
     }
 }