| Предыдущий | Следующий |
| XACT_S_ABORTING | XACT_S_LOCALLY_OK |
XACT_S_SINGLEPHASE
Что фиксирует код
XACT_S_SINGLEPHASE (0x0004D009) — информационный или успешный статус из области MSDTC / COM+ transactions. Короткий ориентир по имени: однофазное завершение. Для диагностики важнее определить первый API и состояние объекта в момент возврата, чем переводить символическое имя как общее сообщение.
Исходное условие в техническом описании сформулировано так: Resource manager performed a single-phase commit
. Эту формулировку следует сопоставлять с фактическим параметром, handle, файлом или state transition в trace.
Граница отказа
Проверяйте состояние самой транзакции отдельно от причины, которая привела её к этому состоянию. Для распределённого commit важны UOW, фаза протокола, голоса участников, ownership операции и терминальный outcome.
Для этого кода особенно полезно различать два признака из исходной документации: Resource manager performed a single-phase commit
и Verify that the single-phase optimization is permitted and the resource manager’s durable result is authoritative. The verification prevents it from being promoted to broader success than the producing API promised.
. Они задают более узкую границу, чем название facility.
Evidence для инцидента
- идентификатор UOW и первый API, вернувший код
- фаза prepare/commit/abort/recovery и текущий владелец перехода
- голоса и состояние resource managers, включая первый отказ
- тайм-аут, DTC trace и внешние побочные эффекты вне транзакции
- Сопоставьте trace с исходным признаком:
A transaction has one durable resource manager, which completes single-phase commit. The coordinator records the optimized path and closes the unit of work.
- Сопоставьте trace с исходным признаком:
In the COM transaction and MSDTC protocol, this result means that the resource manager has performed a single-phase commit of the transaction. The high-level request can be considered complete after it only when its documented postcondition has been checked.
- Сопоставьте trace с исходным признаком:
The nearby-status comparison controls whether outputs are usable and whether more work is expected.
Проверка без догадок
- Проверьте именно границу «однофазное завершение» и зафиксируйте объект, аргумент или состояние, которое её подтверждает.
- Сверьте наблюдаемое состояние с отдельным исходным признаком:
Record the optimization and final resource result. Do not attempt a second prepare or commit; handle recovery according to the resource manager’s single-phase contract.
.
Коррекция и regression test
Исправляйте конкретную фазу или ownership. Не повторяйте commit/abort на старом объекте вслепую и не создавайте новую бизнес-попытку, пока не понятен исход предыдущей транзакции.
Регрессионная проверка должна отдельно контролировать условие Also record xact_s_singlephase_operation , xact_s_singlephase_state_before , xact_s_singlephase_state_after , UTC time, process and thread identifiers, component version, and a correlation ID. Protect user data in logs and keep only the identifiers required to reproduce component state.
. Положительный тест обязан проходить после узкого исправления, а отрицательный — по-прежнему воспроизводить ожидаемый отказ на заведомо неверном состоянии.
Технические ссылки
- Microsoft: COM transaction status codes
- Microsoft: ITransaction::Commit
- Microsoft: ITransaction::Abort
- Microsoft: HRESULT values
Нужно найти другой код? Найти другой код состояния или ошибки.
