// MarkWorkItemStarted tells Pharos that we've started work on this item. func MarkWorkItemStarted(ingestState *models.IngestState, _context *context.Context, stage, message string) error { _context.MessageLog.Info("Telling Pharos we're starting %s for %s/%s", stage, ingestState.WorkItem.Bucket, ingestState.WorkItem.Name) utcNow := time.Now().UTC() ingestState.WorkItem.SetNodeAndPid() ingestState.WorkItem.Stage = stage ingestState.WorkItem.StageStartedAt = &utcNow ingestState.WorkItem.Status = constants.StatusStarted ingestState.WorkItem.Note = message resp := _context.PharosClient.WorkItemSave(ingestState.WorkItem) if resp.Error != nil { _context.MessageLog.Error("Could not mark WorkItem started for %s for %s/%s: %v", stage, ingestState.WorkItem.Bucket, ingestState.WorkItem.Name, resp.Error) return resp.Error } ingestState.WorkItem = resp.WorkItem() return nil }
// MarkWorkItemFailed tells Pharos that this item failed processing // due to a fatal error or too many unsuccessful attempts. func MarkWorkItemFailed(ingestState *models.IngestState, _context *context.Context) error { _context.MessageLog.Info("Telling Pharos processing failed for %s/%s", ingestState.WorkItem.Bucket, ingestState.WorkItem.Name) ingestState.WorkItem.Node = "" ingestState.WorkItem.Pid = 0 ingestState.WorkItem.StageStartedAt = nil ingestState.WorkItem.Retry = false ingestState.WorkItem.NeedsAdminReview = true ingestState.WorkItem.Status = constants.StatusFailed ingestState.WorkItem.Note = "Processing failed. " + ingestState.IngestManifest.AllErrorsAsString() resp := _context.PharosClient.WorkItemSave(ingestState.WorkItem) if resp.Error != nil { _context.MessageLog.Error("Could not mark WorkItem failed for %s/%s: %v", ingestState.WorkItem.Bucket, ingestState.WorkItem.Name, resp.Error) return resp.Error } ingestState.WorkItem = resp.WorkItem() return nil }
// MarkWorkItemSucceeded tells Pharos that this item was processed successfully. func MarkWorkItemSucceeded(ingestState *models.IngestState, _context *context.Context, nextStage string) error { _context.MessageLog.Info("Telling Pharos processing can proceed for %s/%s", ingestState.WorkItem.Bucket, ingestState.WorkItem.Name) ingestState.WorkItem.Node = "" ingestState.WorkItem.Pid = 0 ingestState.WorkItem.Retry = true ingestState.WorkItem.StageStartedAt = nil ingestState.WorkItem.NeedsAdminReview = false ingestState.WorkItem.Stage = nextStage if nextStage == constants.StageCleanup { ingestState.WorkItem.Status = constants.StatusSuccess } else { ingestState.WorkItem.Status = constants.StatusPending } ingestState.WorkItem.Note = fmt.Sprintf("Item is ready for %s", nextStage) resp := _context.PharosClient.WorkItemSave(ingestState.WorkItem) if resp.Error != nil { _context.MessageLog.Error("Could not mark WorkItem ready for %s for %s/%s: %v", nextStage, ingestState.WorkItem.Bucket, ingestState.WorkItem.Name, resp.Error) return resp.Error } ingestState.WorkItem = resp.WorkItem() return nil }