示例#1
0
        /// <summary>
        ///     Removes a preparation job from the queue.
        /// </summary>
        /// <param name="primaerdatenAuftragId">Theprimary identifier for a job.</param>
        public async Task UnregisterJobFromPreparationQueue(int primaerdatenAuftragId)
        {
            var auftrag = await auftragAccess.GetPrimaerdatenAuftrag(primaerdatenAuftragId);

            if (auftrag != null)
            {
                // To make sure, that we don't have a race condition at the end of an Auftrag
                // We wait here a bit. In production the status changes for AuftragErledigt and ImCacheAbgelegt
                // were sometimes only a few miliseconds apart. Sometimes the AuftragErledigt before the ImCacheAbgelegt.
                await Task.Delay(5000);

                // Indem wir den Status auf erledigt stellen, ist der Auftrag abgearbeitet
                var logId = await auftragAccess.UpdateStatus(new PrimaerdatenAuftragLog
                {
                    PrimaerdatenAuftragId = auftrag.PrimaerdatenAuftragId,
                    Status  = AufbereitungsStatusEnum.AuftragErledigt,
                    Service = AufbereitungsServices.AssetService
                });

                Log.Information("{METHOD} for VE {VEID} {STATUS}. AuftragId is {PrimaerdatenAuftragId}",
                                nameof(UnregisterJobFromPreparationQueue),
                                auftrag.VeId,
                                logId > 0 ? "SUCCEEDED" : "FAILED",
                                auftrag.PrimaerdatenAuftragId);
            }
            else
            {
                Log.Information("Did not find running job in table. Should have found a record for PrimaerdatenAuftrag with id of {archiveId}",
                                primaerdatenAuftragId);
            }
        }