Exemplo n.º 1
0
// 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
}
Exemplo n.º 2
0
// 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
}
Exemplo n.º 3
0
// 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
}