Что означает код HRESULT 0x0004D007 (XACT_S_ALLNORETAIN)?

 
Предыдущий Следующий
XACT_S_MADECHANGESINFORM XACT_S_ABORTING

XACT_S_ALLNORETAIN

Где находится ошибка

XACT_S_ALLNORETAIN (0x0004D007) — информационный или успешный статус из области MSDTC / COM+ transactions. Короткий ориентир по имени: все участники без retain. Для диагностики важнее определить первый API и состояние объекта в момент возврата, чем переводить символическое имя как общее сообщение.

Исходное условие в техническом описании сформулировано так: Abort succeeded without retaining the transaction. Эту формулировку следует сопоставлять с фактическим параметром, handle, файлом или state transition в trace.

Критическая граница

Проверяйте состояние самой транзакции отдельно от причины, которая привела её к этому состоянию. Для распределённого commit важны UOW, фаза протокола, голоса участников, ownership операции и терминальный outcome.

Для этого кода особенно полезно различать два признака из исходной документации: Abort succeeded without retaining the transaction и Verify that every participant treats the old transaction as finished and no retained continuation is assumed. Without that proof, it can mask a caller error even though HRESULT failure severity is not set.. Они задают более узкую границу, чем название facility.

Минимальный полезный trace

  • идентификатор UOW и первый API, вернувший код
  • фаза prepare/commit/abort/recovery и текущий владелец перехода
  • голоса и состояние resource managers, включая первый отказ
  • тайм-аут, DTC trace и внешние побочные эффекты вне транзакции
  • Сопоставьте trace с исходным признаком: Reconcile side effects associated with it before compensation or a second invocation is attempted.
  • Сопоставьте trace с исходным признаком: Correctly separating it from neighboring values selects the proper continuation and cleanup path.
  • Сопоставьте trace с исходным признаком: Release or recreate transactional objects before further work. Do not reuse the old unit of work or resources that require a retained abort boundary.

Проверка гипотезы

  1. Проверьте именно границу «все участники без retain» и зафиксируйте объект, аргумент или состояние, которое её подтверждает.
  2. Сверьте наблюдаемое состояние с отдельным исходным признаком: An application aborts with a retaining request but receives this status. It closes the old sessions and begins a new transaction before retrying the business operation..

Критерий исправления

Исправляйте конкретную фазу или ownership. Не повторяйте commit/abort на старом объекте вслепую и не создавайте новую бизнес-попытку, пока не понятен исход предыдущей транзакции.

Регрессионная проверка должна отдельно контролировать условие this result is HRESULT 315399 ( 0x0004D007 ) from winerror.h. AllStat describes it as “The transaction was successfully aborted; However, the abort was non-retaining.” The severity bit indicates a nonfailure result, but the value carries a specific condition that must not be collapsed into plain S_OK .. Положительный тест обязан проходить после узкого исправления, а отрицательный — по-прежнему воспроизводить ожидаемый отказ на заведомо неверном состоянии.

Технические ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.