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