Служит приложениям для предоставления и выполнения действий по восстановлению при ошибках контроля PHM.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 1c1f80bf2db1ПроисхождениеОткрытые вопросы (2)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Служит приложениям для предоставления и выполнения действий по восстановлению при ошибках контроля PHM.
Абстрактный класс ara::phm::RecoveryAction позволяет приложениям предоставлять специфичные для приложения действия по восстановлению для Platform Health Management [SWS_PHM_01141]. После инстанцирования вызов Offer() разрешает готовность к приёму для демона Phm, вследствие чего при обнаруженных ошибках контроля вызывается переопределённый метод RecoveryHandler[SWS_PHM_01143]. Если ошибку не удаётся устранить на стороне приложения, система выполняет эскалацию путём срабатывания сторожевого таймера (watchdog). Операции копирования и перемещения полностью запрещены из соображений безопасности, а административные вызовы, такие как Offer(), не являются потокобезопасными.
Контекст
Класс ara::phm::RecoveryAction представляет собой абстрактный базовый класс в модуле Platform Health Management (PHM) платформы AUTOSAR Adaptive Platform. Он служит стандартизированным интерфейсом для функциональных приложений с целью предоставления специфических действий по восстановлению и обработке ошибок, инициируемых PHM при обнаружении ошибок контроля.
К основным участникам взаимодействия относятся:
Производный компонент приложения: Интерпретация: обычно он должен относиться к State Management, поскольку оно отвечает за скоординированные системные реакции и напрямую упоминается в контексте ошибок. Вопрос Q-714ff81a33aa3e92 (открытый) Приложение реализует специфическое для приложения устранение ошибок путём переопределения метода RecoveryHandler[SWS_PHM_01142].
Демон Phm: управляет регистрацией действий по восстановлению через Offer[SWS_PHM_01143] и при выявлении ошибок управляет вызовом зарегистрированного обработчика [SWS_PHM_01142].
Сторожевой таймер (watchdog): если восстановление на стороне приложения не может быть выполнено успешно, PHM берёт на себя дальнейшую обработку ошибок и для подстраховки инициирует срабатывание сторожевого таймера [SWS_PHM_01142].
Логическая привязка к модели AUTOSAR осуществляется при инстанцировании через ara::core::InstanceSpecifier, который должен указывать на PPortPrototype интерфейса PhmRecoveryAction[SWS_PHM_01141].
Жизненный цикл
Экземпляр создаётся с помощью явного конструктора с передачей подходящего Instance-Specifier [SWS_PHM_01141]. Этот конструктор является потокобезопасным (thread-safe) и безопасным относительно исключений (noexcept).
Поскольку RecoveryAction жёстко привязана к конкретному порту, операции копирования и перемещения полностью запрещены: как конструктор копирования [SWS_PHM_01150], так и оператор присваивания копированием [SWS_PHM_01152] удалены (= delete). Точно так же удалены конструктор перемещения [SWS_PHM_01149] и оператор присваивания перемещением [SWS_PHM_01151]. Спецификация обосновывает это тем, что перемещение после предложения экземпляра может привести к вызову RecoveryHandler до завершения полного конструирования производного класса, что вызвало бы неопределённое поведение или необработанные исключения и поставило бы под угрозу безопасность системы [SWS_PHM_01149], [SWS_PHM_01151].
Жизненный цикл включает два различных состояния:
Не предложено: непосредственно после конструирования, а также после вызова StopOffer[SWS_PHM_01144] экземпляр неактивен. Вызовы RecoveryHandler заблокированы.
Предложено: вызовом Offer()[SWS_PHM_01143] действие активируется в демоне Phm и становится доступным для вызовов обработчика.
Объект освобождается через виртуальный деструктор [SWS_PHM_01145]. В отношении многопоточности конструктор и RecoveryHandler специфицированы как потокобезопасные, тогда как Offer(), StopOffer() и деструктор не являются потокобезопасными (not thread-safe) [SWS_PHM_01141], [SWS_PHM_01142], [SWS_PHM_01143], [SWS_PHM_01144], [SWS_PHM_01145]. Интерпретация: на практике перед уничтожением экземпляра, по-видимому, всегда должен вызываться StopOffer(), чтобы надёжно исключить асинхронные вызовы обработчика во время разрушения объекта. Вопрос Q-a1f47898bed925fd (открытый)
Типичное использование подразделяется на фиксированную последовательность вызовов:
Определение производного класса, реализующего чисто виртуальную функцию-член RecoveryHandler[SWS_PHM_01142].
Инстанцирование производного объекта с указанием Instance-Specifier [SWS_PHM_01141].
Вызов Offer() для предоставления действия по восстановлению демону Phm [SWS_PHM_01143].
Реакция на ошибки: если PHM обнаруживает ошибку, оно вызывает RecoveryHandler(executionError, supervision)[SWS_PHM_01142]. Метод возвращает ara::core::Future<void>, через который сообщается результат устранения ошибки.
Вызов StopOffer(), как только экземпляр больше не должен обслуживать действия по восстановлению [SWS_PHM_01144].
В рамках конфигурации модели и эксплуатации необходимо учитывать специфические условия ошибок:
Нарушения модели и валидации при конструировании [SWS_PHM_01141]:
AraNotInitializedViolation: среда выполнения ARA не была инициализирована до инстанцирования.
InstanceSpecifierMappingIntegrityViolation: Instance-Specifier не может быть разрешён в модели или не ссылается на PortPrototype.
PortInterfaceMappingViolation: прототип порта, на который указывает RecoveryNotificationToPPortPrototypeMapping, не типизирован PhmSupervisionRecoveryNotificationInterface.
ProcessMappingViolation: во время выполнения отсутствует подходящий смоделированный процесс для Instance-Ref.
InstanceSpecifierAlreadyInUseViolation: Instance-Specifier уже используется внутри текущего процесса.
Ошибка связи при предоставлении (offer) [SWS_PHM_01143]:
Если связь с демоном Phm завершается сбоем, Offer() возвращает результат с кодом ошибки PhmErrc::kOfferFailed.
Неустранимые ошибки при восстановлении [SWS_PHM_01142]:
Если State Management не удается устранить зарегистрированную ошибку, возвращенный вызовом RecoveryHandler объект Future возвращает ошибку PhmErrc::kSMCanNotHandleRecovery. После этого Platform Health Management вмешивается и инициирует срабатывание сторожевого таймера (watchdog).
Настоящее руководство по классам было сгенерировано ИИ-ассистентом курации на основе спецификации AUTOSAR R25-11.
The move assignment operator for the RecoveryAction shall not be used. Rationale: Using the move assignment after a RecoveryAction instance has been offered may result in premature invocation of RecoveryHandler before the derived class is fully constructed. This can lead to undefined behavior or unhandled exceptions, compromising system stability and safety.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: e0343e0b39c4Происхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Метод без параметров Offer принадлежит классу ara::phm::RecoveryAction и подключается через заголовочный файл ara/phm/recovery_action.h[SWS_PHM_01143]. Его назначение — предоставление службы компоненту Platform Health Management (PHM), чтобы сделать возможными последующие вызовы RecoveryHandler[SWS_PHM_01143]. Вызов выполняется синхронно и не принимает параметров [SWS_PHM_01143].
Результат выполнения возвращается в виде ara::core::Result<void>[SWS_PHM_01143]. В безошибочном состоянии этот Result пуст. В случае сбоя связи с демоном PHM служба не может быть предложена, и функция возвращает код ошибки PhmErrc::kOfferFailed с семантикой отката [SWS_PHM_01143].
С точки зрения безопасности выполнения метод специфицирован как noexcept и исключебно-безопасный (exception safe) [SWS_PHM_01143]. Однако он явно определен как непотокобезопасный (not thread-safe) [SWS_PHM_01143].
В составе системы существует прямая связь с обработкой ошибок: RecoveryHandler класса ara::phm::RecoveryAction служит для реагирования на ошибки выполнения (ara::exec::ExecutionErrorEvent) и ошибки мониторинга (TypeOfSupervision) [SWS_PHM_01142]. PHM может вызвать этот обработчик только после того, как активация была предварительно явно разрешена через RecoveryAction::Offer[SWS_PHM_01142].
Это указание по использованию было сгенерировано автоматически на основе спецификации.
AraNotInitialized- Violation message that is sent in case a constructor or function Violation checks for an initialized ara and identifies that ara is not initialized. InstanceSpeci- InstanceSpecifier either cannot be resolved in the model in the fierMappingIn- context of your executable, or it refers to a model element other tegrityViolation than a PortPrototype. PortInterfaceMap- A PortPrototype that is referenced by a pingViolation RecoveryNotificationToPPortPrototypeMapping needs to be typed by a PhmSupervisionRecoveryNotificationInterface. ProcessMappingVio- Matching InstanceRef exists, but no matching (modelled) Process lation found that matches the (runtime) process. InstanceSpecifier- Violation message that is sent in case a constructor in the ara AlreadyInUseViola- framework was called with an InstanceSpecifier already in use in tion this process.
Parameter (in)
Parameter
Beschreibung
instance
instance specifier to the PPortPrototype of a PhmRecoveryAction Interface
Request a governed re-review of this record. The record is not changed immediately.
The move constructor operator for the RecoveryAction shall not be used. Rationale: Using the move constructor after a RecoveryAction instance has been offered may result in premature invocation of RecoveryHandler before the derived class is fully constructed. This can lead to undefined behavior or unhandled exceptions, compromising system stability and safety
RecoveryHandler to be invoked by PHM. The handler invocation needs to be enabled before by a call of RecoveryAction::Offer.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 4d5e12f6a819Происхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Чисто виртуальный метод RecoveryHandler в ara::phm::RecoveryAction служит асинхронным обратным вызовом (callback), который вызывается Platform Health Management (PHM), как только мониторинг завершается сбоем [SWS_PHM_01142]. При вызове PHM передает событие ошибки executionError с подробной информацией о восстановлении, а также тип завершившегося сбоем элементарного мониторинга через параметр supervision[SWS_PHM_01142].
Для использования и жизненного цикла действуют строгие условия порядка выполнения и параллелизма:
Активация: вызовы обработчика должны быть предварительно явно разрешены через RecoveryAction::Offer[SWS_PHM_01142], [SWS_PHM_01143]. Их можно снова отключить через StopOffer[SWS_PHM_01144].
Целостность объекта: как конструктор перемещения, так и оператор присваивания с перемещением класса RecoveryAction удалены (=delete), чтобы предотвратить преждевременные вызовы обработчика на еще не полностью сконструированных производных классах после предложения действия [SWS_PHM_01149], [SWS_PHM_01151].
Потокобезопасность: сам метод специфицирован как thread-safe и безопасный по отношению к исключениям [SWS_PHM_01142], тогда как Offer и StopOffer не являются thread-safe [SWS_PHM_01143], [SWS_PHM_01144].
Возврат осуществляется асинхронно через ara::core::Future<void>[SWS_PHM_01142]. Если восстановление прошло успешно, future завершается с void. Если State Management не может выполнить восстановление, future завершается ошибкой с кодом ошибки PhmErrc::kSMCanNotHandleRecovery; в этом случае вмешивается Platform Health Management и инициирует срабатывание сторожевого таймера (watchdog) [SWS_PHM_01142].
Этот текст был сгенерирован ИИ на основе спецификации AUTOSAR R25-11.
Руководство разработчика реализации в подготовке (сложность I1)
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 8cdc07a00e3fПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Метод StopOffer класса ara::phm::RecoveryAction служит для отключения выполнения связанного RecoveryHandler[SWS_PHM_01144]. Он объявлен в заголовке ara/phm/recovery_action.h[SWS_PHM_01144].
Использование и семантика
Функция имеет сигнатуру void StopOffer() noexcept;, не принимает параметров и не возвращает значения [SWS_PHM_01144]. Вызовом приложение сигнализирует Platform Health Management (PHM), что вызовы обработчика больше производиться не должны [SWS_PHM_01144]. Вызов выполняется синхронно; выполняющиеся экземпляры обработчика, по всей видимости, завершаются до или во время отключения (интерпретация). Вопрос Q-a333b1e2f0634ed1 (открытый)
Обработка ошибок и параллелизм
Безопасность по отношению к исключениям: операция объявлена как noexcept и считается полностью exception safe; коды ошибок или исключения отсутствуют [SWS_PHM_01144].
Потокобезопасность: метод явно специфицирован как not thread-safe[SWS_PHM_01144]. Поэтому параллельный вызов на одном и том же экземпляре RecoveryAction требует внешней синхронизации со стороны вызывающего кода.
Этот текст создан ИИ и основан на спецификации AUTOSAR Adaptive R25-11.
The move assignment operator for the RecoveryAction shall not be used. Rationale: Using the move assignment after a RecoveryAction instance has been offered may result in premature invocation of RecoveryHandler before the derived class is fully constructed. This can lead to undefined behavior or unhandled exceptions, compromising system stability and safety.
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал