package contract import ( "errors" "fmt" ) // ErrOwnerRequired — приём по HTTP дошёл до заведения задачи, а владельца ему не // назвали. Значение сентинельное: нести отказу нечего, а имя учётной записи в // него не кладётся никогда. var ErrOwnerRequired = errors.New("owner is required to accept a record") type JobNotFoundError struct { State string Message string } func (e *JobNotFoundError) Error() string { return fmt.Sprintf("%s - %s", e.State, e.Message) } // LostAcquisitionError — захват задачи за время работы шага достался другому. // Шаг, получивший его, завершается без записи результата: иначе два воркера // пишут в одну запись по очереди, портя её результат, и счётчик отказов // сбрасывает тот, кто уже не владелец. type LostAcquisitionError struct { JobID string } func (e *LostAcquisitionError) Error() string { return fmt.Sprintf("%s: job acquisition lost", e.JobID) } type NoopJobError struct { State string } func (e *NoopJobError) Error() string { return fmt.Sprintf("%s: no op job occur", e.State) }