IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

Golang OpenTelemetry: span.SetStatus надо вызывать после span.RecordError ?

Да, рекомендуется вызывать span.SetStatus после span.RecordError, чтобы явно установить статус спана в зависимости от записанной ошибки. Это не обязательное требование, но такой порядок помогает сделать код более читаемым и логичным. Вот почему:


Причины вызывать span.SetStatus после span.RecordError

  1. Последовательность действий:
    • Сначала фиксируем детали ошибки с помощью span.RecordError, чтобы сохранить её контекст.
    • Затем устанавливаем общий статус спана (codes.Error), чтобы указать, что операция завершилась с ошибкой.
  2. Ясность кода:
    • Этот порядок делает намерения разработчика понятными: «Сначала мы фиксируем ошибку, затем говорим системе, что весь спан должен быть помечен как завершившийся с ошибкой.»
  3. Избежание путаницы:
    • Если сначала вызывается span.SetStatus, а потом span.RecordError, может возникнуть вопрос: «Какой статус будет иметь спан, если RecordError не обновляет статус?»

Пример: Правильный порядок вызовов

Можно ли вызывать только RecordError?

Да, можно, если вам не нужно устанавливать статус. Однако это может быть неинтуитивным:

  • Некоторые системы наблюдения (например, Jaeger) могут отображать Span как успешный, если не установлен статус codes.Error, даже если была вызвана RecordError.

Можно ли вызывать только SetStatus?

Да, но вы потеряете возможность записать детали ошибки. Это полезно только в случаях, когда ошибка ожидаема и её запись в трейс избыточна.


Что произойдёт, если поменять порядок?

Если вызвать span.SetStatus перед span.RecordError, технически всё будет работать, но:

  1. RecordError не обновляет статус спана, так что порядок вызовов не повлияет на конечный статус.
  2. Код станет менее читаемым для других разработчиков, которые могут ожидать логичного порядка: «Сначала фиксируем ошибку, потом ставим статус».

Итог

Вызывать span.SetStatus после span.RecordError — это хорошая практика:

  • Она делает код более логичным.
  • Упрощает анализ кода и устранение ошибок.
  • Гарантирует, что статус отражает зафиксированную ошибку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *