| Предыдущий | Следующий |
| XACT_S_READONLY | XACT_S_OKINFORM |
XACT_S_SOMENORETAIN
Интерпретация HRESULT
XACT_S_SOMENORETAIN (0x0004D003) — информационный или успешный статус из области MSDTC / COM+ transactions. Короткий ориентир по имени: часть участников без retain. Для диагностики важнее определить первый API и состояние объекта в момент возврата, чем переводить символическое имя как общее сообщение.
Исходное условие в техническом описании сформулировано так: Some enlisted resources could not retain after abort
. Эту формулировку следует сопоставлять с фактическим параметром, handle, файлом или state transition в trace.
Контракт операции
Проверяйте состояние самой транзакции отдельно от причины, которая привела её к этому состоянию. Для распределённого commit важны UOW, фаза протокола, голоса участников, ownership операции и терминальный outcome.
Для этого кода особенно полезно различать два признака из исходной документации: Some enlisted resources could not retain after abort
и Before retrying it, classify its effects as completed, partial, pending, cancelled, adapted, or terminal.
. Они задают более узкую границу, чем название facility.
Наблюдаемые признаки
- идентификатор UOW и первый API, вернувший код
- фаза prepare/commit/abort/recovery и текущий владелец перехода
- голоса и состояние resource managers, включая первый отказ
- тайм-аут, DTC trace и внешние побочные эффекты вне транзакции
- Сопоставьте trace с исходным признаком:
Verify that the caller knows which resources ended outright and does not reuse them as members of a retained transaction. This check separates a legitimate it outcome from code that ignores an incomplete or altered operation.
- Сопоставьте trace с исходным признаком:
In the COM transaction and MSDTC protocol, this result means that the transaction was successfully aborted; However, this is a coordinated transaction, and some number of enlisted resources were aborted outright because they could not support abort-retaining semantics.
- Сопоставьте trace с исходным признаком:
this result is HRESULT 315395 ( 0x0004D003 ) from winerror.h.
Разбор по шагам
- Проверьте именно границу «часть участников без retain» и зафиксируйте объект, аргумент или состояние, которое её подтверждает.
- Сверьте наблюдаемое состояние с отдельным исходным признаком:
The distinction around it determines whether the caller stops, waits, consumes output, or changes state.
.
Повтор и восстановление
Исправляйте конкретную фазу или ownership. Не повторяйте commit/abort на старом объекте вслепую и не создавайте новую бизнес-попытку, пока не понятен исход предыдущей транзакции.
Регрессионная проверка должна отдельно контролировать условие A coordinated abort requests retaining semantics. One resource cannot retain, so the application reopens that session before starting follow-up work.
. Положительный тест обязан проходить после узкого исправления, а отрицательный — по-прежнему воспроизводить ожидаемый отказ на заведомо неверном состоянии.
Технические ссылки
- Microsoft: COM transaction status codes
- Microsoft: ITransaction::Commit
- Microsoft: ITransaction::Abort
- Microsoft: HRESULT values
Нужно найти другой код? Найти другой код состояния или ошибки.