/// <summary> /// Reset any archival request that may have been left In Progress when the service last shut down. /// </summary> public void ResetFailedArchiveQueueItems() { using (IUpdateContext updateContext = PersistentStore.OpenUpdateContext(UpdateContextSyncMode.Flush)) { IArchiveQueueEntityBroker broker = updateContext.GetBroker <IArchiveQueueEntityBroker>(); ArchiveQueueSelectCriteria criteria = new ArchiveQueueSelectCriteria(); criteria.ProcessorId.EqualTo(ServerPlatform.ProcessorId); criteria.ArchiveQueueStatusEnum.EqualTo(ArchiveQueueStatusEnum.InProgress); IList <ArchiveQueue> failedList = broker.Find(criteria); foreach (ArchiveQueue failedItem in failedList) { UpdateArchiveQueue(updateContext, failedItem, ArchiveQueueStatusEnum.Pending, Platform.Time.AddMinutes(2)); Platform.Log(LogLevel.Warn, "Reseting ArchiveQueue entry {0} to Pending that was In Progress at startup for PartitionArchive {1}", failedItem.Key, _partitionArchive.Description); } if (failedList.Count > 0) { updateContext.Commit(); } else { Platform.Log(LogLevel.Info, "No ArchiveQueue entries to reset on startup for archive {0}", _partitionArchive.Description); } } }
public bool ResetArchiveQueueItem(IList <ArchiveQueue> items, DateTime time) { if (items == null || items.Count == 0) { return(false); } ArchiveQueueUpdateColumns columns = new ArchiveQueueUpdateColumns(); columns.ArchiveQueueStatusEnum = ArchiveQueueStatusEnum.Pending; columns.ProcessorId = ""; columns.ScheduledTime = time; bool result = true; IPersistentStore store = PersistentStoreRegistry.GetDefaultStore(); using (IUpdateContext ctx = store.OpenUpdateContext(UpdateContextSyncMode.Flush)) { IArchiveQueueEntityBroker archiveQueueBroker = ctx.GetBroker <IArchiveQueueEntityBroker>(); foreach (ArchiveQueue item in items) { // Only do an update if its a failed status currently ArchiveQueueSelectCriteria criteria = new ArchiveQueueSelectCriteria(); criteria.ArchiveQueueStatusEnum.EqualTo(ArchiveQueueStatusEnum.Failed); criteria.StudyStorageKey.EqualTo(item.StudyStorageKey); if (!archiveQueueBroker.Update(criteria, columns)) { result = false; break; } } if (result) { ctx.Commit(); } } return(result); }
public void RunApplication(string[] args) { using (IUpdateContext updateContext = PersistentStore.OpenUpdateContext(UpdateContextSyncMode.Flush)) { IPartitionArchiveEntityBroker partitionBroker = updateContext.GetBroker <IPartitionArchiveEntityBroker>(); PartitionArchiveSelectCriteria partitionCriteria = new PartitionArchiveSelectCriteria(); partitionCriteria.Enabled.EqualTo(true); partitionCriteria.ReadOnly.EqualTo(false); PartitionArchive activePartition = partitionBroker.FindOne(partitionCriteria); if (activePartition == null) { Platform.Log(LogLevel.Error, "No active ArchivePartition were found."); return; } partitionCriteria.ReadOnly.EqualTo(true); IList <ServerEntityKey> partitionKeys = new List <ServerEntityKey>(); foreach (PartitionArchive partition in partitionBroker.Find(partitionCriteria)) { partitionKeys.Add(partition.Key); } IArchiveQueueEntityBroker queueBroker = updateContext.GetBroker <IArchiveQueueEntityBroker>(); ArchiveQueueSelectCriteria queueCriteria = new ArchiveQueueSelectCriteria(); queueCriteria.ArchiveQueueStatusEnum.In(new ArchiveQueueStatusEnum[] { ArchiveQueueStatusEnum.Failed, ArchiveQueueStatusEnum.Pending }); queueCriteria.PartitionArchiveKey.In(partitionKeys); ArchiveQueueUpdateColumns queueColumns = new ArchiveQueueUpdateColumns() { PartitionArchiveKey = activePartition.Key, ArchiveQueueStatusEnum = ArchiveQueueStatusEnum.Pending, ProcessorId = "", ScheduledTime = Platform.Time }; if (queueBroker.Update(queueCriteria, queueColumns)) { updateContext.Commit(); } } }