Sirve a las aplicaciones para proporcionar y ejecutar medidas de recuperación en caso de fallos de supervisión de PHM.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 1c1f80bf2db1ProcedenciaPreguntas abiertas (2)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
Sirve a las aplicaciones para proporcionar y ejecutar medidas de recuperación en caso de fallos de supervisión de PHM.
La clase abstracta ara::phm::RecoveryAction permite a las aplicaciones proporcionar medidas de recuperación específicas de la aplicación para Platform Health Management [SWS_PHM_01141]. Tras la instanciación, la llamada a Offer() habilita la disponibilidad de recepción para el demonio Phm, de modo que, ante fallos de supervisión detectados, se llama al método sobrescrito RecoveryHandler[SWS_PHM_01143]. Si el fallo no se puede subsanar por parte de la aplicación, el sistema escala activando el watchdog. Las operaciones de copia y de movimiento están completamente deshabilitadas por motivos de seguridad, y las llamadas de administración como Offer() no son seguras para hilos.
Contexto
La clase ara::phm::RecoveryAction es una clase base abstracta en el módulo Platform Health Management (PHM) de AUTOSAR Adaptive Platform. Sirve como interfaz estandarizada para que las aplicaciones funcionales proporcionen medidas específicas de recuperación y de tratamiento de errores, las cuales son iniciadas por PHM al detectarse fallos de supervisión.
Entre los interlocutores principales se encuentran:
El componente de aplicación derivado: Interpretación: este probablemente suela ubicarse en State Management, ya que este es responsable de las reacciones coordinadas del sistema y se menciona directamente en el contexto del fallo. Pregunta Q-714ff81a33aa3e92 (abierta) La aplicación implementa la subsanación de errores específica de la aplicación sobrescribiendo el método RecoveryHandler[SWS_PHM_01142].
El demonio Phm: Gestiona el registro de acciones de recuperación a través de Offer[SWS_PHM_01143] y controla, ante fallos detectados, la llamada del manejador registrado [SWS_PHM_01142].
El watchdog: Si la recuperación por parte de la aplicación no puede llevarse a cabo con éxito, PHM asume el tratamiento posterior del fallo y activa el watchdog como medida de seguridad [SWS_PHM_01142].
La vinculación lógica con el modelo AUTOSAR se realiza durante la instanciación a través de un ara::core::InstanceSpecifier, que debe hacer referencia a un PPortPrototype de una interfaz PhmRecoveryAction[SWS_PHM_01141].
Ciclo de vida
Se crea una instancia mediante el constructor explícito pasando el Instance-Specifier correspondiente [SWS_PHM_01141]. Este constructor es seguro para hilos (thread-safe) y seguro frente a excepciones (noexcept).
Dado que una RecoveryAction está ligada de forma fija a un puerto específico, las operaciones de copia y de movimiento están completamente deshabilitadas: tanto el constructor de copia [SWS_PHM_01150] como el operador de asignación por copia [SWS_PHM_01152] están eliminados (= delete). Asimismo, están eliminados el constructor de movimiento [SWS_PHM_01149] y el operador de asignación por movimiento [SWS_PHM_01151]. La especificación justifica esto indicando que un movimiento tras ofrecer la instancia podría provocar que el RecoveryHandler se llame antes de la construcción completa de la clase derivada, lo que conllevaría un comportamiento indefinido o excepciones no controladas y pondría en peligro la seguridad del sistema [SWS_PHM_01149], [SWS_PHM_01151].
El ciclo de vida abarca dos estados distintos:
No ofrecido: Inmediatamente después de la construcción, así como tras la llamada a StopOffer[SWS_PHM_01144], la instancia está inactiva. Las llamadas a RecoveryHandler están deshabilitadas.
Ofrecido: Mediante la llamada a Offer()[SWS_PHM_01143], la acción se activa en el demonio Phm y se habilita para las llamadas al manejador.
El objeto se libera mediante el destructor virtual [SWS_PHM_01145]. En cuanto a la concurrencia, el constructor y el RecoveryHandler están especificados como seguros para hilos, mientras que Offer(), StopOffer() y el destructor no son seguros para hilos (not thread-safe) [SWS_PHM_01141], [SWS_PHM_01142], [SWS_PHM_01143], [SWS_PHM_01144], [SWS_PHM_01145]. Interpretación: en la práctica, es de suponer que siempre deba llamarse a StopOffer() antes de destruir una instancia, con el fin de excluir de forma segura llamadas asíncronas al manejador durante el desmantelamiento del objeto. Pregunta Q-a1f47898bed925fd (abierta)
El uso típico se divide en una secuencia de llamadas fija:
Definición de una clase derivada que implementa la función miembro virtual pura RecoveryHandler[SWS_PHM_01142].
Instanciación del objeto derivado indicando el Instance-Specifier [SWS_PHM_01141].
Llamada a Offer() para proporcionar la acción de recuperación al demonio Phm [SWS_PHM_01143].
Reacción ante fallos: si PHM detecta un fallo, llama a RecoveryHandler(executionError, supervision)[SWS_PHM_01142]. El método devuelve un ara::core::Future<void>, a través del cual se notifica el resultado de la subsanación del fallo.
Llamada a StopOffer() en cuanto la instancia ya no deba atender acciones de recuperación [SWS_PHM_01144].
Destrucción del objeto a través del destructor [SWS_PHM_01145].
En el marco de la configuración del modelo y del funcionamiento deben tenerse en cuenta condiciones de error específicas:
Infracciones de modelo y de validación durante la construcción [SWS_PHM_01141]:
AraNotInitializedViolation: El entorno de ejecución ARA no se inicializó antes de la instanciación.
InstanceSpecifierMappingIntegrityViolation: El Instance-Specifier no se puede resolver en el modelo o no hace referencia a un PortPrototype.
PortInterfaceMappingViolation: El prototipo de puerto referenciado a través de RecoveryNotificationToPPortPrototypeMapping no está tipificado mediante un PhmSupervisionRecoveryNotificationInterface.
ProcessMappingViolation: En tiempo de ejecución no existe ningún proceso modelado adecuadamente para el Instance-Ref.
InstanceSpecifierAlreadyInUseViolation: El Instance-Specifier ya se está utilizando dentro del proceso actual.
Error de comunicación durante el ofrecimiento [SWS_PHM_01143]:
Si falla la comunicación con el demonio Phm, Offer() devuelve un resultado con el código de error PhmErrc::kOfferFailed.
Errores irrecuperables en la recuperación [SWS_PHM_01142]:
Si State Management no puede resolver el error notificado, el Future devuelto por RecoveryHandler devuelve el error PhmErrc::kSMCanNotHandleRecovery. Acto seguido, Platform Health Management interviene y dispara el watchdog.
Esta guía de clase ha sido generada por un asistente de curación de IA sobre la base de la especificación 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.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: e0343e0b39c4Procedencia
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
El método sin parámetros Offer pertenece a la clase ara::phm::RecoveryAction y se incluye a través del archivo de encabezado ara/phm/recovery_action.h[SWS_PHM_01143]. Su finalidad es la puesta a disposición del servicio frente a Platform Health Management (PHM), con el fin de permitir llamadas posteriores del RecoveryHandler[SWS_PHM_01143]. La llamada se realiza de forma síncrona y no recibe parámetros [SWS_PHM_01143].
El resultado de la ejecución se devuelve como ara::core::Result<void>[SWS_PHM_01143]. En estado libre de errores, este Result está vacío. Si la comunicación con el demonio PHM falla, el servicio no puede ofrecerse y la función devuelve el código de error PhmErrc::kOfferFailed con semántica de reversión [SWS_PHM_01143].
En lo que respecta a la seguridad de ejecución, el método está especificado como noexcept y seguro frente a excepciones (exception safe) [SWS_PHM_01143]. Sin embargo, se define expresamente como no seguro para subprocesos (not thread-safe) [SWS_PHM_01143].
En el conjunto del sistema existe un acoplamiento directo con el tratamiento de errores: el RecoveryHandler de la clase ara::phm::RecoveryAction sirve para responder a errores de ejecución (ara::exec::ExecutionErrorEvent) y errores de supervisión (TypeOfSupervision) [SWS_PHM_01142]. El PHM solo puede llamar a este manejador después de que la activación se haya habilitado previamente de forma explícita mediante RecoveryAction::Offer[SWS_PHM_01142].
Esta nota de uso se generó de forma automatizada sobre la base de la especificación.
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.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 4d5e12f6a819Procedencia
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
El método virtual puro RecoveryHandler en ara::phm::RecoveryAction sirve como callback asíncrono invocado por Platform Health Management (PHM) en cuanto falla una supervisión [SWS_PHM_01142]. En la llamada, PHM transfiere el evento de error executionError con información detallada sobre la recuperación, así como el tipo de la supervisión elemental fallida a través del parámetro supervision[SWS_PHM_01142].
Para el uso y el ciclo de vida se aplican condiciones estrictas de orden y concurrencia:
Activación: Las llamadas del manejador deben habilitarse previamente de forma explícita mediante RecoveryAction::Offer[SWS_PHM_01142], [SWS_PHM_01143]. Se pueden volver a desactivar mediante StopOffer[SWS_PHM_01144].
Integridad del objeto: Tanto el constructor de movimiento como el operador de asignación por movimiento de RecoveryAction están eliminados (=delete), para evitar que, tras ofrecer la acción, se ejecuten llamadas prematuras al manejador en clases derivadas aún no construidas por completo [SWS_PHM_01149], [SWS_PHM_01151].
Seguridad de subprocesos: El método en sí está especificado como thread-safe y seguro frente a excepciones [SWS_PHM_01142], mientras que Offer y StopOffer no son thread-safe [SWS_PHM_01143], [SWS_PHM_01144].
El retorno se realiza de forma asíncrona mediante un ara::core::Future<void>[SWS_PHM_01142]. Si la recuperación fue exitosa, el future se completa con void. Si State Management no puede llevar a cabo la recuperación, el future falla con el código de error PhmErrc::kSMCanNotHandleRecovery; en este caso, Platform Health Management interviene y dispara el watchdog [SWS_PHM_01142].
Este texto ha sido generado por una IA sobre la base de la especificación AUTOSAR R25-11.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 8cdc07a00e3fProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
El método StopOffer de la clase ara::phm::RecoveryAction sirve para desactivar la ejecución del RecoveryHandler correspondiente [SWS_PHM_01144]. Está declarado en el encabezado ara/phm/recovery_action.h[SWS_PHM_01144].
Uso y semántica
La función tiene la signatura void StopOffer() noexcept;, no toma parámetros y no devuelve ningún valor [SWS_PHM_01144]. Mediante la llamada, la aplicación indica a Platform Health Management (PHM) que ya no deben realizarse más llamadas al manejador [SWS_PHM_01144]. La llamada se realiza de forma síncrona; cabe suponer que las instancias del manejador en ejecución concluyan antes o durante la desactivación (interpretación). Pregunta Q-a333b1e2f0634ed1 (abierta)
Tratamiento de errores y concurrencia
Seguridad frente a excepciones: La operación está declarada como noexcept y se considera totalmente exception safe; no existen códigos de error ni excepciones [SWS_PHM_01144].
Seguridad de subprocesos: El método está especificado explícitamente como not thread-safe[SWS_PHM_01144]. Por lo tanto, una llamada concurrente en la misma instancia de RecoveryAction requiere sincronización externa por parte del invocador.
Este texto ha sido elaborado por una IA y se basa en la especificación 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 · Original en alemán