| Предыдущий | Следующий |
| 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.
Проверка гипотезы
- Проверьте именно границу «все участники без retain» и зафиксируйте объект, аргумент или состояние, которое её подтверждает.
- Сверьте наблюдаемое состояние с отдельным исходным признаком:
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 .
. Положительный тест обязан проходить после узкого исправления, а отрицательный — по-прежнему воспроизводить ожидаемый отказ на заведомо неверном состоянии.
Технические ссылки
- Microsoft: COM transaction status codes
- Microsoft: ITransaction::Commit
- Microsoft: ITransaction::Abort
- Microsoft: HRESULT values
Нужно найти другой код? Найти другой код состояния или ошибки.