Esempio n. 1
0
        private bool PollAndHandleMessage(Task[] tasks, int availableIx, Task availableTask)
        {
            CloudQueueMessage message;
            QueueEnvelope     envelope = QueueSupport.GetFromDefaultQueue(out message);

            if (envelope != null)
            {
                Task executing = Task.Factory.StartNew(() => WorkerSupport.ProcessMessage(envelope));
                tasks[availableIx] = executing;
                QueueSupport.CurrDefaultQueue.DeleteMessage(message);
                if (availableTask.Exception != null)
                {
                    ErrorSupport.ReportException(availableTask.Exception);
                }
                return(true);
            }
            else
            {
                if (message != null)
                {
                    QueueSupport.CurrDefaultQueue.DeleteMessage(message);
                    ErrorSupport.ReportMessageError(message);
                }
                GC.Collect();
                return(false);
            }
        }
Esempio n. 2
0
        private static void TestWorkerSubscriberChainExecutionPerformance(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();
            operationRequest.SubscriptionChainRequest = message;
            QueueSupport.PutToOperationQueue(operationRequest);
        }
        public static void ExecuteMethod_PublishGroupContent(string groupID, bool useWorker, string currentContainerName, string publicContainerName)
        {
            string groupPublicSiteLocation            = "grp/" + groupID + "/" + RenderWebSupport.DefaultPublicGroupSiteLocation;
            string defaultPublicSiteLocation          = "grp/default/" + RenderWebSupport.DefaultPublicGroupSiteLocation;
            string aboutAuthTargetLocation            = RenderWebSupport.DefaultAboutTargetLocation;
            List <OperationRequest> operationRequests = new List <OperationRequest>();
            var publishPublicContent = RenderWebSupport.SyncTemplatesToSite(currentContainerName, groupPublicSiteLocation, publicContainerName, groupPublicSiteLocation, useWorker, false);

            operationRequests.Add(publishPublicContent);
            string defaultGroupID = "undefinedForNow";

            if (groupID == defaultGroupID)
            {
                OperationRequest publishDefault = RenderWebSupport.SyncTemplatesToSite(currentContainerName, groupPublicSiteLocation, publicContainerName, defaultPublicSiteLocation, useWorker, false);
                operationRequests.Add(publishDefault);
                publishDefault = RenderWebSupport.SyncTemplatesToSite(currentContainerName, groupPublicSiteLocation, currentContainerName,
                                                                      aboutAuthTargetLocation, useWorker, false);
                operationRequests.Add(publishDefault);
            }
            if (useWorker)
            {
                //QueueSupport.PutToOperationQueue(localGroupTemplates, renderLocalTemplates);
                QueueSupport.PutToOperationQueue(operationRequests.ToArray());
            }
        }
Esempio n. 4
0
        public static void ExecuteMethod_PublishGroupContentToWww(string groupID, bool useWorker, string currentContainerName, string wwwContainerName)
        {
            if (RenderWebSupport.WwwEnabledGroups.ContainsKey(groupID) == false) // Only controlled groups can have website/do web publishing
            {
                return;
            }
            string groupWwwPublicSiteLocation    = "grp/" + groupID + "/" + RenderWebSupport.DefaultPublicWwwSiteLocation;
            PublishWebContentOperation operation = PublishWebContentOperation.CreateDefault();

            operation.SourceContainerName = currentContainerName;
            operation.TargetContainerName = wwwContainerName;
            operation.SourceOwner         = "grp/" + groupID;
            operation.SourcePathRoot      = "wwwsite";
            if (useWorker)
            {
                //QueueSupport.PutToOperationQueue(localGroupTemplates, renderLocalTemplates);
                OperationRequest operationRequest = new OperationRequest();
                operationRequest.PublishWebContent = operation;
                QueueSupport.PutToOperationQueue(operationRequest);
            }
            else
            {
                WorkerSupport.ProcessPublishWebContent(operation);
            }
        }
Esempio n. 5
0
        private static void RunQueueWorker(QueueEnvelope givenEnvelope)
        {
            bool loop = true;

            while (loop)
            {
                loop = givenEnvelope == null;
                QueueEnvelope envelope;
                if (givenEnvelope == null)
                {
                    CloudQueueMessage message = null;
                    envelope = QueueSupport.GetFromDefaultQueue(out message);
                    QueueSupport.CurrDefaultQueue.DeleteMessage(message);
                }
                else
                {
                    envelope = givenEnvelope;
                }
                try
                {
                    WorkerSupport.ProcessMessage(envelope);
                } catch (Exception ex)
                {
                    string msg = ex.Message;
                }
                //Thread.Sleep(5000);
            }
        }
Esempio n. 6
0
        private static void SyncWwwPublicFromDefaultGroup()
        {
            string publicSite = "demowww.aaltoglobalimpact.org";

            string[] folderList = new[] { "bootstrap-default", "oip-additions", "www-public" };
            foreach (string folder in folderList)
            {
                string sourceFolder = folder;
                //if (sourceFolder == "www-public")
                //    sourceFolder = "oip-public";
                var operationRequest = RenderWebSupport.SyncTemplatesToSite(StorageSupport.CurrActiveContainer.Name, "grp/9798daca-afc4-4046-a99b-d0d88bb364e0/wwwsite/" + sourceFolder,
                                                                            publicSite.Replace('.', '-'), folder, true, false);
                QueueSupport.PutToOperationQueue(operationRequest);
            }
        }
Esempio n. 7
0
        private static void DeleteAllAccountAndGroupContents(bool useWorker)
        {
            var           accountIDs         = TBRAccountRoot.GetAllAccountIDs();
            var           groupIDs           = TBRGroupRoot.GetAllGroupIDs();
            List <string> referenceLocations = new List <string>();

            foreach (var accountID in accountIDs)
            {
                string referenceLocation = "acc/" + accountID + "/";
                referenceLocations.Add(referenceLocation);
            }
            foreach (var groupID in groupIDs)
            {
                string referenceLocation = "grp/" + groupID + "/";
                referenceLocations.Add(referenceLocation);
            }
            if (useWorker)
            {
                referenceLocations.ForEach(refLoc =>
                {
                    VirtualOwner owner = VirtualOwner.FigureOwner(refLoc);
                    QueueSupport.PutToOperationQueue(
                        new OperationRequest
                    {
                        DeleteOwnerContent = new DeleteOwnerContentOperation
                        {
                            ContainerName  = owner.ContainerName,
                            LocationPrefix = owner.LocationPrefix
                        }
                    }
                        );
                });
            }
            else
            {
                referenceLocations.ForEach(refLoc => StorageSupport.DeleteContentsFromOwner(refLoc));
            }
        }
Esempio n. 8
0
        public override void Run()
        {
            GracefullyStopped = false;
            //ThreadPool.SetMinThreads(3, 3);
            Task[] tasks = new Task[]
            {
                Task.Factory.StartNew(() => { }),
                Task.Factory.StartNew(() => { }),
                Task.Factory.StartNew(() => { }),
                //Task.Factory.StartNew(() => {}),
                //Task.Factory.StartNew(() => {}),
                //Task.Factory.StartNew(() => {}),
            };
            QueueSupport.ReportStatistics("Starting worker: " + CurrWorkerID, TimeSpan.FromDays(1));
            Task.Factory.StartNew(RefreshStockCompanyData);
            while (!IsStopped)
            {
                try
                {
                    Task.WaitAny(tasks);
                    if (IsStopped)
                    {
                        break;
                    }
                    int  availableIx;
                    Task availableTask            = WorkerSupport.GetFirstCompleted(tasks, out availableIx);
                    bool handledSubscriptionChain = PollAndHandleSubscriptionChain(tasks, availableIx, availableTask);
                    if (handledSubscriptionChain)
                    {
                        // TODO: Fix return value check
                        Thread.Sleep(1000);
                        continue;
                    }
                    bool handledMessage = PollAndHandleMessage(tasks, availableIx, availableTask);
                    if (handledMessage)
                    {
                        continue;
                    }
                    Thread.Sleep(1000);
                }
                catch (AggregateException ae)
                {
                    foreach (var e in ae.Flatten().InnerExceptions)
                    {
                        ErrorSupport.ReportException(e);
                    }
                    Thread.Sleep(10000);
                    // or ...
                    // ae.Flatten().Handle((ex) => ex is MyCustomException);
                }

                /*
                 *    catch (MessagingException e)
                 *    {
                 *        if (!e.IsTransient)
                 *        {
                 *            Trace.WriteLine(e.Message);
                 *            throw;
                 *        }
                 *        Thread.Sleep(10000);
                 *    }*/
                catch (OperationCanceledException e)
                {
                    if (!IsStopped)
                    {
                        Trace.WriteLine(e.Message);
                        throw;
                    }
                }
                catch (Exception ex)
                {
                    ErrorSupport.ReportException(ex);
                    throw;
                }
            }
            Task.WaitAll(tasks);
            foreach (var task in tasks.Where(task => task.Exception != null))
            {
                ErrorSupport.ReportException(task.Exception);
            }
            QueueSupport.ReportStatistics("Stopped: " + CurrWorkerID, TimeSpan.FromDays(1));
            GracefullyStopped = true;
        }
Esempio n. 9
0
        private static void RunTaskedQueueWorker()
        {
            Task[] tasks = new Task[]
            {
                Task.Factory.StartNew(() => {}),
                Task.Factory.StartNew(() => {}),
                Task.Factory.StartNew(() => {}),
                //Task.Factory.StartNew(() => {}),
                //Task.Factory.StartNew(() => {}),
            };
            bool IsStopped    = false;
            int  initialCount = 0;

            while (true)
            {
                try
                {
                    Task.WaitAny(tasks);
                    if (IsStopped)
                    {
                        Task.WaitAll(tasks);
                        foreach (var task in tasks)
                        {
                            if (task.Exception != null)
                            {
                                ErrorSupport.ReportException(task.Exception);
                            }
                        }
                        break;
                    }
                    int  availableIx;
                    Task availableTask = WorkerSupport.GetFirstCompleted(tasks, out availableIx);
                    CloudQueueMessage message;
                    QueueEnvelope     envelope = QueueSupport.GetFromDefaultQueue(out message);
                    if (envelope != null)
                    {
                        Task executing = Task.Factory.StartNew(() => WorkerSupport.ProcessMessage(envelope));
                        tasks[availableIx] = executing;
                        QueueSupport.CurrDefaultQueue.DeleteMessage(message);
                        if (availableTask.Exception != null)
                        {
                            ErrorSupport.ReportException(availableTask.Exception);
                        }
                    }
                    else
                    {
                        if (message != null)
                        {
                            QueueSupport.CurrDefaultQueue.DeleteMessage(message);
                            ErrorSupport.ReportMessageError(message);
                        }
                        Thread.Sleep(1000);
                    }
                }
                catch (AggregateException ae)
                {
                    foreach (var e in ae.Flatten().InnerExceptions)
                    {
                        ErrorSupport.ReportException(e);
                    }
                    Thread.Sleep(10000);
                    // or ...
                    // ae.Flatten().Handle((ex) => ex is MyCustomException);
                }

                /*
                 * catch (MessagingException e)
                 * {
                 * if (!e.IsTransient)
                 * {
                 *  Trace.WriteLine(e.Message);
                 *  throw;
                 * }
                 * Thread.Sleep(10000);
                 * }*/
                catch (OperationCanceledException e)
                {
                    if (!IsStopped)
                    {
                        Trace.WriteLine(e.Message);
                        throw;
                    }
                }
                catch (Exception ex)
                {
                    ErrorSupport.ReportException(ex);
                    throw;
                }
            }
        }