| Предыдущий | Следующий |
| XACT_S_ALLNORETAIN | XACT_S_SINGLEPHASE |
XACT_S_ABORTING
Практический смысл
XACT_S_ABORTING (0x0004D008) — информационный или успешный статус из области MSDTC / COM+ transactions. Короткий ориентир по имени: идёт abort. Для диагностики важнее определить первый API и состояние объекта в момент возврата, чем переводить символическое имя как общее сообщение.
Исходное условие в техническом описании сформулировано так: Transaction abort is already in progress
. Эту формулировку следует сопоставлять с фактическим параметром, handle, файлом или state transition в trace.
Что именно нужно отделить
Проверяйте состояние самой транзакции отдельно от причины, которая привела её к этому состоянию. Для распределённого commit важны UOW, фаза протокола, голоса участников, ownership операции и терминальный outcome.
Для этого кода особенно полезно различать два признака из исходной документации: Transaction abort is already in progress
и Wait for the terminal abort result using the coordinator’s completion mechanism. Cancel dependent work and preserve the first reason that initiated abort.
. Они задают более узкую границу, чем название facility.
Что сохранить до изменений
- идентификатор UOW и первый API, вернувший код
- фаза prepare/commit/abort/recovery и текущий владелец перехода
- голоса и состояние resource managers, включая первый отказ
- тайм-аут, DTC trace и внешние побочные эффекты вне транзакции
- Сопоставьте trace с исходным признаком:
Verify that the caller does not issue conflicting commit, enlist, or repeated abort operations while termination is underway. The documented condition must be demonstrated so this result is not mistaken for an unrelated success state.
- Сопоставьте trace с исходным признаком:
Comparing it with related statuses protects the caller from applying failure recovery to normal state.
- Сопоставьте trace с исходным признаком:
A timeout handler calls abort while another thread has already started it. The second thread receives this status and waits instead of racing a commit request.
Как проверить причину
- Проверьте именно границу «идёт abort» и зафиксируйте объект, аргумент или состояние, которое её подтверждает.
- Сверьте наблюдаемое состояние с отдельным исходным признаком:
Any state transition preceding this result must be included in rollback, continuation, and retry planning.
.
Безопасное восстановление
Исправляйте конкретную фазу или ownership. Не повторяйте commit/abort на старом объекте вслепую и не создавайте новую бизнес-попытку, пока не понятен исход предыдущей транзакции.
Регрессионная проверка должна отдельно контролировать условие Also record xact_s_aborting_operation , xact_s_aborting_state_before , xact_s_aborting_state_after , UTC time, process and thread identifiers, component version, and a correlation ID. Use redacted telemetry for this result, retaining only the stable technical identifiers that distinguish the operation.
. Положительный тест обязан проходить после узкого исправления, а отрицательный — по-прежнему воспроизводить ожидаемый отказ на заведомо неверном состоянии.
Технические ссылки
- Microsoft: COM transaction status codes
- Microsoft: ITransaction::Commit
- Microsoft: ITransaction::Abort
- Microsoft: HRESULT values
Нужно найти другой код? Найти другой код состояния или ошибки.
