DEENESPTFRRUARHIKOZHNL

模块 ara::per — Persistency

Spezifikation: AUTOSAR_AP_SWS_Persistency.pdf (R25-11) · 140 API-Records

模块指南人工智能生成

以持久、事务安全且硬件抽象的方式保存结构化键值对和文件。
AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 5a09fccb0066 来源 未决问题(1)
因果锚点:R25-11 自 R25-11 起有效 为此规范版本重新合成。
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

以持久、事务安全且硬件抽象的方式保存结构化键值对和文件。

Adaptive模块Persistency(ara::per)提供了一个用于非易失性数据存储的独立于硬件的抽象层,涵盖了结构化键值存储(KeyValueStorage)和基于文件的访问(FileStorage)(EXP_SWArchitecture 第43页)。对键值对的修改会进行内存缓冲,并且需要显式的同步调用(SyncToStorage)以进行持久化保存([SWS_PER_00049])。除数据完整性和恢复机制外,该模块还管理软件更新期间的更新与迁移过程([SWS_PER_00357])。

功能集群Persistency(ara::per)为AUTOSAR Adaptive Platform提供了用于非易失性数据存储的标准化抽象层(EXP_SWArchitecture 第43页)。它提供了两种基本访问模型:用于结构化参数的基于键的存储KeyValueStorage,以及用于非结构化有效负载数据流的基于文件的存储FileStorage(SWS_Persistency 第219页)。Adaptive Applications以及中央平台守护进程(如State Management、Diagnostic Management或Update and Configuration Management)均使用这些接口持久化存储其状态,而与物理文件系统或闪存驱动程序无关(EXP_SWArchitecture 第93页)。

PerArchContext cluster_apps Konsumenten cluster_per ara::per (Persistency Cluster) cluster_platform Plattformdienste & Basis AA Adaptive Application KVS KeyValueStorage (PortInterface) AA->KVS FS FileStorage (PortInterface) AA->FS LIFE Installation & Update (NativeInterface) AA->LIFE REC Recovery & Diagnostics (NativeInterface) AA->REC SM State Management SM->KVS DM 诊断管理 DM->KVS DM->FS VUCM Update & Configuration Mgmt VUCM->KVS VUCM->FS RP Remote Persistency RP->KVS CRYPTO Cryptography (ara::crypto) KVS->CRYPTO OS Operating System (POSIX VFS / NVRAM) KVS->OS FS->OS

上下文图:Persistency集群在Adaptive Platform中的嵌入情况,包括应用程序和平台使用者以及底层操作系统。来源:EXP_SWArchitecture 第93页、EXP_SWArchitecture 第43页。

KeyValueStorage中的写操作遵循严格的内存事务语义([SWS_PER_00046])。对键值对的修改首先保持在易失性缓冲中,仅在通过同步调用SyncToStorage后才永久写入存储介质([SWS_PER_00049]),而DiscardPendingChanges则丢弃未保存的状态([SWS_PER_00365])。在FileStorage中,通过专用、类型化的访问器(ReadAccessor、WriteAccessor、ReadWriteAccessor)进行访问,这些访问器专门通过UniqueHandle进行管理([SWS_PER_00113]、[SWS_PER_00114]、[SWS_PER_00115])。

事务性键值存储与物理刷盘Adaptive Applicationara::per (KeyValueStorage)Betriebssystem / NVRAMSetValue(key, value)在 RAM 中缓冲值(事务状态)Result<void> (Erfolg)altCommit-Pfad (Dauerhaftes Sichern)SyncToStorage()计算 CRC / 冗余及可选加密write() / fsync()Status OKResult<void> (Persistiert)回滚路径(丢弃未保存的更改)DiscardPendingChanges()丢弃易失性 RAM 更改Result<void>(已重置)

时序图:具有内存缓冲和物理刷新的键值存储的写入和同步序列。来源:[SWS_PER_00046]、[SWS_PER_00049]、[SWS_PER_00365]、EXP_SWArchitecture 第230页。

此外,该模块还集成了用于生命周期和容错的全面机制:运行期间的配置更改通过CheckForManifestUpdate和ReloadPersistencyManifest处理([SWS_PER_00576]、[SWS_PER_00577]),而应用程序特定的数据迁移则通过更新回调进行([SWS_PER_00356]、[SWS_PER_00357])。如果基于清单的冗余或完整性检查失败,回调会通报损坏状态([SWS_PER_00433]),随后损坏的数据可通过RecoverKeyValueStorage、RecoverFile或重置操作进行修复([SWS_PER_00333]、[SWS_PER_00337]、[SWS_PER_00334])。

ara::per的系统边界与架构集成

功能集群Persistency(ara::per)为AUTOSAR Adaptive Platform上的非易失性数据存储提供标准化抽象机制(EXP_SWArchitecture 第43页)。它将用户定义的应用程序和功能平台服务与操作系统特定的文件系统、分区结构以及闪存或NVRAM驱动程序解耦(EXP_SWArchitecture 第93页)。其提供两种独立的主要存储范式:通过KeyValueStorage进行的基于键的数据访问,以及通过FileStorage进行的层次化文件存储(SWS_Persistency 第219页)。诸如Diagnostic Management(EXP_SWArchitecture 第176页)、State Management(EXP_SWArchitecture 第55页)、Update and Configuration Management(SWS_UpdateAndConfigurationManagement 第18页)和Remote Persistency(SWS_RemotePersistency 第9页)等平台服务将这些接口用作标准化端口接口([SWS_PER_00052]、[SWS_PER_00116])。

除了提供本地存储抽象之外,ara::per还在与宿主操作系统的接口处直接集成了加密原语和冗余检查(EXP_SWArchitecture 第230页)。Persistency存储的功能配置在AUTOSAR清单中进行声明式建模,并将配额规范、完整性哈希、CRC方法以及加密路径绑定到具体实例(SWS_Persistency 第104页)。其他功能集群的库组件通过各自的目标配置直接绑定Persistency,而守护进程则类似于常规应用程序通过Instance-Specifier访问存储单元(SWS_Persistency 第35页)。

PerArchContext cluster_apps Konsumenten cluster_per ara::per (Persistency Cluster) cluster_platform Plattformdienste & Basis AA Adaptive Application KVS KeyValueStorage (PortInterface) AA->KVS FS FileStorage (PortInterface) AA->FS LIFE Installation & Update (NativeInterface) AA->LIFE REC Recovery & Diagnostics (NativeInterface) AA->REC SM State Management SM->KVS DM 诊断管理 DM->KVS DM->FS VUCM Update & Configuration Mgmt VUCM->KVS VUCM->FS RP Remote Persistency RP->KVS CRYPTO Cryptography (ara::crypto) KVS->CRYPTO OS Operating System (POSIX VFS / NVRAM) KVS->OS FS->OS

上下文图:Persistency集群在Adaptive Platform中的嵌入情况,包括应用程序和平台使用者以及底层操作系统。来源:EXP_SWArchitecture 第93页、EXP_SWArchitecture 第43页。

键值存储:实例化、事务语义与刷新机制

对结构化参数的访问通过类ara::per::KeyValueStorage进行,该类通过指定ara::core::InstanceSpecifier调用ara::per::OpenKeyValueStorage打开([SWS_PER_00052])。返回的SharedHandle<KeyValueStorage>以类型安全的方式封装了存储区域,并通过基础容器已删除的移动和复制构造函数防止不受控的重复([SWS_PER_00322]、[SWS_PER_00324]、[SWS_PER_00367])。键值对通过SetValue([SWS_PER_00046])和GetValue([SWS_PER_00044]、[SWS_PER_00332])进行修改或查询;其中KeyExists([SWS_PER_00043])提供存在性检查,GetAllKeys([SWS_PER_00042])提供所有活动键的完整列表。

写入和删除操作遵循严格的内存事务语义:通过SetValue、RemoveKey([SWS_PER_00047])或RemoveAllKeys([SWS_PER_00048])进行的更改最初保留在进程的易失性缓冲区中(EXP_SWArchitecture 第230页)。仅当显式调用SyncToStorage时,才会以原子方式将所有待处理的修改永久保存到物理介质上([SWS_PER_00049])。如果要丢弃尚未写入的事务步骤,DiscardPendingChanges会将状态重置为最后一次SyncToStorage或打开时的状态([SWS_PER_00365])。可以通过GetCurrentValueSize([SWS_PER_00554])监控单个值的存储需求,并通过GetCurrentKeyValueStorageSize([SWS_PER_00405])聚合监控包含冗余和元数据的存储需求(EXP_SWArchitecture 第231页)。

事务性键值存储与物理刷盘Adaptive Applicationara::per (KeyValueStorage)Betriebssystem / NVRAMSetValue(key, value)在 RAM 中缓冲值(事务状态)Result<void> (Erfolg)altCommit-Pfad (Dauerhaftes Sichern)SyncToStorage()计算 CRC / 冗余及可选加密write() / fsync()Status OKResult<void> (Persistiert)回滚路径(丢弃未保存的更改)DiscardPendingChanges()丢弃易失性 RAM 更改Result<void>(已重置)

时序图:具有内存缓冲和物理刷新的键值存储的写入和同步序列。来源:[SWS_PER_00046]、[SWS_PER_00049]、[SWS_PER_00365]、EXP_SWArchitecture 第230页。

基于文件的存储访问与类型化访问器层次结构

类ara::per::FileStorage用于非结构化数据流、二进制块或日志文件,它通过ara::per::OpenFileStorage进行初始化([SWS_PER_00116])。在FileStorage容器中,可以通过GetAllFileNames列出已存在的文件([SWS_PER_00110]),通过FileExists检查其是否存在([SWS_PER_00112]),或通过DeleteFile删除文件([SWS_PER_00111])。大小配额通过GetCurrentFileSize([SWS_PER_00407])和GetCurrentFileStorageSize([SWS_PER_00406])确定(EXP_SWArchitecture 第231页)。

文件访问本身遵循通过专用访问器类进行接口分离的原则(EXP_SWArchitecture 第88页)。根据所需的模式(OpenMode、[SWS_PER_00147],可通过按位运算符[SWS_PER_00144]、[SWS_PER_00434]组合),工厂方法生成独占的UniqueHandle实例([SWS_PER_00371]、[SWS_PER_00569]):

常见的定位和大小操作,如GetPosition([SWS_PER_00162])、SetPosition([SWS_PER_00163])、使用MovePosition和枚举Origin([SWS_PER_00146]、[SWS_PER_00164])、GetSize([SWS_PER_00424])进行的相对导航,以及文件结束检查IsEof([SWS_PER_00107]),都固定在通用基类FileAccessor中。扩展的文件元数据(如时间戳和创建原因)通过GetFileInfo和结构体FileInfo读取([SWS_PER_00435]、[SWS_PER_00436]、[SWS_PER_00438]、[SWS_PER_00441]、[SWS_PER_00442]、[SWS_PER_00443]、[SWS_PER_00444]、[SWS_PER_00445])。解释:严格分离为不可复制的访问器实例,除了类型安全之外,主要应是为了在操作系统级别确定性地防止并发写冲突。 问题 Q-a990a7aa44326447 (未决)

PerAccessorHierarchy FileStorage FileStorage (Container-Verwaltung) ReadAccessor ReadAccessor + ReadText() + ReadLine() + ReadBinary() + GetChar() / PeekChar() + GetByte() / PeekByte() FileStorage->ReadAccessor OpenFileReadOnly() WriteAccessor WriteAccessor + WriteText() + WriteBinary() + SetFileSize() + SyncToFile() FileStorage->WriteAccessor OpenFileWriteOnly() ReadWriteAccessor ReadWriteAccessor (Kombinierter Lese-/Schreibzugriff) FileStorage->ReadWriteAccessor OpenFileReadWrite() FileAccessor FileAccessor + GetPosition() + SetPosition() + MovePosition() + GetSize() + IsEof() ReadAccessor->FileAccessor WriteAccessor->FileAccessor ReadWriteAccessor->ReadAccessor ReadWriteAccessor->WriteAccessor

结构图:文件访问类和访问器句柄的接口与类层次结构。来源:[SWS_PER_00113]、[SWS_PER_00114]、[SWS_PER_00115]、EXP_SWArchitecture 第88页。

生命周期管理、更新流程与清单同步

针对Update and Configuration Management(UCM)执行的软件更新和全新安装,Persistency提供了专门的生命周期操作(EXP_SWArchitecture 第92页)。如果在应用程序运行期间应用了更新的目标配置,则应用程序可以使用CheckForManifestUpdate来确定是否存在配置更改([SWS_PER_00576])。使用ReloadPersistencyManifest,ara::per重新读取更新后的配置,随后更改的存储定义将在下次关闭并重新打开后生效([SWS_PER_00577])。

为了迁移现有的应用程序数据,通过RegisterApplicationDataUpdateCallback注册一个回调函数,当基于不同的契约版本状态需要进行数据迁移时,该函数由ara::per触发([SWS_PER_00356])。单个元素的选择性更改可以通过RegisterDataUpdateIndication进行监控([SWS_PER_00578])。Persistency更新的整个过程在验证阶段由UpdatePersistency触发([SWS_PER_00357])。在成功更新之后,CleanUpPersistency会删除过时的备份和迁移数据([SWS_PER_00567]),而ResetPersistency则完全清空存储区域,以便在下次打开时从清单中全新生成([SWS_PER_00358])。

Manifest 更新与数据迁移Adaptive Applicationara::per (Persistency)UCM / ManifestCheckForManifestUpdate()Result<bool>(更新可用)optManifest-Aktualisierung erkanntReloadPersistencyManifest()Lese neue Target-ConfigurationKonfiguration geladenResult<void>UpdatePersistency()Callback: appDataUpdateCallback(storage, version)Migriere anwendungsspezifische DatenMigration abgeschlossenResult<void> (UpdatePersistency OK)CleanUpPersistency()删除临时备份和旧数据Result<void> (Bereinigt)

时序图:包含配置检查、回调迁移和清理的Persistency更新流程。来源:[SWS_PER_00356]、[SWS_PER_00357]、[SWS_PER_00567]、[SWS_PER_00576]、[SWS_PER_00577]、EXP_SWArchitecture 第92页。

完整性监控、冗余处理与恢复

为了捕获损坏的数据记录,键值存储和文件存储支持可配置的冗余副本和完整性机制(CRC、哈希、MAC身份验证和加密)(SWS_Persistency 第104页、EXP_SWArchitecture 第230页)。如果内部冗余检查失败,可以通过RegisterRecoveryReportCallback通知安全相关应用程序([SWS_PER_00433])。该回调传递RecoveryReportKind(例如kKeyValueStorageRecoveryFailed)以及受影响的实例和键/文件名([SWS_PER_00432]、EXP_SWArchitecture 第91页)。

为了有针对性地恢复受损数据,提供了细粒度的修复和重置方法:

PerRecoveryFlow Start 数据访问或完整性检查 Check 冗余/完整性检查 (CRC、哈希、MAC、副本) Start->Check Report Trigger RegisterRecoveryReportCallback (RecoveryReportKind gemeldet) Check->Report Fehler Success 存储恢复一致状态 Check->Success OK Decide Wiederherstellungsstrategie? Report->Decide RecoverStorage RecoverKeyValueStorage() / RecoverAllFiles() Decide->RecoverStorage 完整容器校正 RecoverSingle RecoverKey() / RecoverFile() (Best-Effort) Decide->RecoverSingle Einzelwert-Reparatur ResetDefault ResetKeyValueStorage() / ResetAllFiles() (Werkswerte) Decide->ResetDefault 重置为初始状态 RecoverStorage->Success RecoverSingle->Success ResetDefault->Success

活动图:数据损坏时的决策路径,从冗余检查经由回调直至恢复或重置。来源:[SWS_PER_00333]、[SWS_PER_00334]、[SWS_PER_00432]、[SWS_PER_00433]。

发生错误时的行为

ara::per中的错误状态不是通过不受控的C++异常传播,而是通过返回值类型ara::core::Result确定性地表示([SWS_PER_00044]、[SWS_PER_00113])。该模块通过GetPerDomain定义了自己的错误域([SWS_PER_00352]),由PerErrorDomain实现,通过Name([SWS_PER_00314])和Message([SWS_PER_00315])以及枚举PerErrc或类型别名Errc进行标准化错误解析([SWS_PER_00311]、[SWS_PER_00411])。对于启用了异常的环境,提供了PerException([SWS_PER_00355]、[SWS_PER_00412])和ThrowAsException([SWS_PER_00350]),而MakeErrorCode封装了平台合规错误代码的创建([SWS_PER_00351])。

典型的错误代码涵盖与资源和并发相关的冲突:如果相关存储元素已打开或正在被维护操作(如UpdatePersistency)并行修改,则操作如OpenKeyValueStorage([SWS_PER_00052])、OpenFileStorage([SWS_PER_00116])、DeleteFile([SWS_PER_00111])或RecoverKeyValueStorage([SWS_PER_00333])将以kResourceBusy失败。在分配不兼容的类型时,SetValue会报告错误kDataTypeMismatch([SWS_PER_00046])。对于物理硬件错误(PerErrc::kPhysical),会区分是否存在回滚语义(例如在读和定位操作如[SWS_PER_00167]、[SWS_PER_00168]中指针保持不变),或者是否可能发生没有回滚保证的数据损坏(例如在[SWS_PER_00122]、[SWS_PER_00166]、[SWS_PER_00423]中)。

为了诊断同步和访问错误,该模块生成标准化的DLT日志消息(SWS_Persistency 第110页)。在此,像SyncToStorage(消息ID 0x80008037)、SyncToFile(0x80008036)和DiscardPendingChanges(0x80008038)这样的消息会详细记录受影响的键集和存储占用情况,从而即使在不完全关机(例如通过ara::core::Deinitialize)的情况下也能保持状态的可重构性(SWS_Persistency 第110页)。

进一步详细证据

Persistency集群的架构和交互基于以下规范性要求和文档出处:

本模块指南基于AUTOSAR Adaptive版本R25-11的规范。所述内容仅基于具有约束力的SWS需求和分配的架构文档。

function: 116 class: 10 enumeration: 6 variable: 5 type alias: 2 struct: 1

ara::per

FileAccessor contains a common basis for ReadAccessor and WriteAccessor

作为基类 ReadAccessor, WriteAccessor

This structure contains additional information on a file returned by GetFileInfo.

The File Storage contains a set of files identified by their file names.

The Key-Value Storage contains a set of keys with associated values.

Defines the error domain for Persistency.

继承自 ara::core::ErrorDomain

Exception type thrown by Persistency.

继承自 ara::core::Exception

ReadAccessor is used to read file data

继承自 FileAccessor

作为基类 ReadWriteAccessor

ReadWriteAccessor is used to read and write file data

继承自 ReadAccessor, WriteAccessor

Handle to a File Storage or Key-Value Storage

Handle to a ReadAccessor or ReadWriteAccessor

WriteAccessor is used to write file data

继承自 FileAccessor

作为基类 ReadWriteAccessor

Checks for updates of the Persistency Target Configuration. This method can be used to detect configuration updates that are installed by UCM while the Adaptive Application that uses Persistency is running. To re-read the updated Target Configuration, the Adaptive Application needs to call ara::per:: ReloadPersistencyManifest.

ara::core::Result< bool > CheckForManifestUpdate () noexcept;

Removes backup data and other unused data of all Persistency Key-Value Storages and File Storages.

ara::core::Result< void > CleanUpPersistency () noexcept;

Returns the space in bytes currently occupied by a File Storage. The returned size includes all metadata and the space used for redundancy and backups. The returned size is only guaranteed to be accurate if the File Storage is not opened and no other operation on the File Storage takes place at the same time.

ara::core::Result< std::uint64_t > GetCurrentFileStorageSize (const ara::core::InstanceSpecifier &fs) noexcept;

Returns the space in bytes currently occupied by a Key-Value Storage. The returned size includes all metadata and the space used for redundancy and backups. The returned size is only guaranteed to be accurate if the Key-Value Storage is not opened and no other operation on the Key-Value Storage takes place at the same time.

ara::core::Result< std::uint64_t > GetCurrentKeyValueStorageSize (const ara::core::InstanceSpecifier &kvs) noexcept;

Returns the global PerErrorDomain object.

constexpr const ara::core::ErrorDomain & GetPerDomain () noexcept;

Creates an error code.

constexpr ara::core::ErrorCode MakeErrorCode (PerErrc code, ara::core::ErrorDomain::SupportDataType data) noexcept;

Opens a File Storage. OpenFileStorage will fail with kResourceBusy when the File Storage is currently being modified by a call from another thread to UpdatePersistency, CleanUpPersistency, ResetPersistency, RecoverAllFiles, or ResetAllFiles. Because multiple threads can access the same File Storage concurrently, the File Storage might not be closed when the SharedHandle returned by this function goes out of scope. It will only be closed when all SharedHandles that refer to the same File Storage went out of scope.

ara::core::Result< SharedHandle< FileStorage > > OpenFileStorage (const ara::core::InstanceSpecifier &fs) noexcept;

Opens a Key-Value Storage. OpenKeyValueStorage will fail with kResourceBusy when the Key-Value Storage is currently being modified by a call from another thread to UpdatePersistency, CleanUpPersistency, Reset Persistency, RecoverKeyValueStorage, or ResetKeyValueStorage. Because multiple threads can access the same Key-Value Storage concurrently, the Key-Value Storage might not be closed when the SharedHandle returned by this function goes out of scope. It will only be closed when all SharedHandles that refer to the same Key-Value Storage went out of scope.

ara::core::Result< SharedHandle< KeyValueStorage > > OpenKeyValue Storage (const ara::core::InstanceSpecifier &kvs) noexcept;
operator| 函数

Merges two OpenMode modifiers into one.

constexpr OpenMode operator| (OpenMode left, OpenMode right);
operator|= 函数

Merges an OpenMode modifier into this OpenMode.

OpenMode & operator|= (OpenMode &left, const OpenMode &right);

Recovers a File Storage, including all files. RecoverAllFiles recovers a File Storage when the redundancy checks fail. It will fail with kResourceBusy when the File Storage is currently open, or when it is modified by a call from another thread to UpdatePersistency, CleanUpPersistency, ResetPersistency, RecoverAllFiles, or ResetAllFiles. This method does a best-effort recovery of all files. After recovery, files might show outdated or initial content, or might be lost.

ara::core::Result< void > RecoverAllFiles (const ara::core::Instance Specifier &fs) noexcept;

Recovers a Key-ValueStorage. RecoverKeyValueStorage allows to recover a Key-Value Storage when the redundancy checks fail. It will fail with kResourceBusy when the Key-Value Storage is currently open, or when it is modified by a call from another thread to UpdatePersistency, CleanUpPersistency, Reset Persistency, RecoverKeyValueStorage, or ResetKeyValueStorage. This method does a best-effort recovery of all key-value pairs. After recovery, keys might show outdated or initial value, or might be lost.

ara::core::Result< void > RecoverKeyValueStorage (const ara::core::InstanceSpecifier &kvs) noexcept;

Registers an application data update callback with Persistency. The provided callback function will be called by Persistency if an update of stored application data might be necessary. This decision is based on the contract versions. The contract version that last accessed Persistency is provided as an argument to the callback, as well as the ara::core::InstanceSpecifier referring to the updated Key- Value Storage or File Storage. Based on this information, the Adaptive Application can decide which updates are actually necessary, e.g. a migration from any older contract version could be supported, with different steps required for each of these. The provided function will be called from the context of ara::per::UpdatePersistency, ara::per::OpenKeyValueStorage, or ara::per::OpenFileStorage.

void RegisterApplicationDataUpdateCallback (std::function< void(const ara::core::InstanceSpecifier &storage, ara::core::String contract Version)> appDataUpdateCallback) noexcept;

Registers a data update indication callback with Persistency. The provided callback function will be called by Persistency when an update of stored data happened. It will be called from the context of ara::per::UpdatePersistency, ara:: per::OpenKeyValueStorage, or ara::per::OpenFileStorage.

void RegisterDataUpdateIndication (std::function< void(const ara::core::InstanceSpecifier &updatedStorage, ara::core::StringView updatedElement)> dataUpdateIndication, ara::core::InstanceSpecifier monitoredStorage, ara::core::Vector< ara::core::String > monitored Elements) noexcept;

Register a recovery reporting callback with Persistency. This callback can be used in safety-aware Adaptive Applications to detect actions of the Persistency that are related to the correctness of the persisted data and the reliability of the storage.

void RegisterRecoveryReportCallback (std::function< void(const ara::core::InstanceSpecifier &storage, ara::per::RecoveryReportKind recoveryReportKind, ara::core::Vector< ara::core::String > reported Elements, ara::core::Vector< std::uint8_t > reportedInstances)> recoveryReportCallback) noexcept;

Re-reads the Target Configuration. This method can be used to prepare for updates of the Key-Value Storages and File Storages of Persistency after a new Target Configuration was installed by UCM while the Adaptive Application that uses Persistency is running. Storages are only updated after closing them, either when they are opened again or by an explicit call to ara:: per::UpdatePersistency.

ara::core::Result< void > ReloadPersistencyManifest () noexcept;

Resets a File Storage, including all files. ResetAllFiles resets a File Storage to the initial state, containing only the files which were deployed from the Target Configuration, with their initial content. Afterwards, the File Storage will appear as if it was newly installed from the current Target Configuration. It will fail with kResourceBusy when the File Storage is currently open, or when it is modified by a call from another thread to UpdatePersistency, CleanUpPersistency, ResetPersistency, RecoverAllFiles, or ResetAllFiles.

ara::core::Result< void > ResetAllFiles (const ara::core::Instance Specifier &fs) noexcept;

Resets a Key-Value Storage to the initial state. ResetKeyValueStorage allows to reset a Key-Value Storage to the initial state, containing only key-value pairs which were deployed from the Target Configuration, with their initial values. Afterwards, the Key-Value Storage will appear as if it was newly installed from the current Target Configuration. It will fail with kResourceBusy when the Key-Value Storage is currently open, or when it is modified by a call from another thread to UpdatePersistency, CleanUpPersistency, Reset Persistency, RecoverKeyValueStorage, or ResetKeyValueStorage.

ara::core::Result< void > ResetKeyValueStorage (const ara::core::InstanceSpecifier &kvs) noexcept;

Resets all Key-Value Storages and File Storages by entirely removing their content. The Key-Value Storages and File Storages will be re-created when ara::per:: OpenFileStorage or ara::per::OpenKeyValueStorage is called next time.

ara::core::Result< void > ResetPersistency () noexcept;

Updates all Persistency Key-Value Storages and File Storages after a new Target Configuration was installed. This method can be used to update the persistent data of the Adaptive Application during verification phase.

ara::core::Result< void > UpdatePersistency () noexcept;

This enumeration describes how and when a file was created.

enum class FileCreationState : std::uint32_t {...};

This enumeration describes how and when a file was last modified.

enum class FileModificationState : std::uint32_t {...};
OpenMode 枚举

This enumeration defines how a file shall be opened. The values can be combined (using | and |=) as long as they do not contradict each other.

enum class OpenMode : std::uint32_t {...};
Origin 枚举

Specification of origin used in MovePosition.

enum class Origin : std::uint32_t {...};
PerErrc 枚举

Defines the errors for Persistency. The enumeration values 0 - 255 are reserved for AUTOSAR assigned errors, the stack provider is free to define additional errors starting from 256.

enum class PerErrc : ara::core::ErrorDomain::CodeType {...};

Defines the reported recovery actions.

enum class RecoveryReportKind : std::uint32_t {...};

命名空间

模块的 UML 类图

Abgerundete Rahmen = Namespaces; hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); graue Boxen = modulfremde bzw. externe Basisklassen. Klicken öffnet die Klassenseite.

G cluster_1 ara::per nara__per__FileAccessor932 FileAccessor nara__per__ReadAccessor956 ReadAccessor nara__per__ReadAccessor956->nara__per__FileAccessor932 nara__per__ReadWriteAccessor483 ReadWriteAccessor nara__per__ReadWriteAccessor483->nara__per__ReadAccessor956 nara__per__WriteAccessor940 WriteAccessor nara__per__ReadWriteAccessor483->nara__per__WriteAccessor940 nara__per__WriteAccessor940->nara__per__FileAccessor932 nara__per__FileInfo503 «struct» FileInfo nara__per__FileStorage945 FileStorage nara__per__KeyValueStorage981 KeyValueStorage nara__per__PerErrorDomain979 PerErrorDomain nara__core__ErrorDomain335 ara::core::ErrorDomain nara__per__PerErrorDomain979->nara__core__ErrorDomain335 nara__per__PerException768 PerException nara__core__Exception792 ara::core::Exception nara__per__PerException768->nara__core__Exception792 nara__per__SharedHandle980 SharedHandle nara__per__UniqueHandle733 UniqueHandle