DEENESPTFRRUARHIKOZHNL

Modul ara::per — Persistency

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

Modul-GuideKI-GENERIERT

Sichert strukturierte Schlüssel-Wert-Paare und Dateien persistent, transaktionssicher und hardwareabstrahiert ab.
KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 5a09fccb0066 Herkunft Offene Fragen (1)
Kausaler Anker: R25-11 Gültig ab R25-11 Neu synthetisiert für diesen Spezifikationsstand.
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Sichert strukturierte Schlüssel-Wert-Paare und Dateien persistent, transaktionssicher und hardwareabstrahiert ab.

Das Adaptive-Modul Persistency (ara::per) stellt eine hardwareunabhängige Abstraktionsschicht zur nicht-flüchtigen Datenhaltung bereit, die sowohl strukturierte Schlüssel-Wert-Speicher (KeyValueStorage) als auch dateibasierten Zugriff (FileStorage) umfasst (EXP_SWArchitecture S. 43). Modifikationen an Schlüssel-Wert-Paaren unterliegen einer In-Memory-Pufferung und erfordern einen expliziten Synchronisationsaufruf (SyncToStorage), um dauerhaft gesichert zu werden ([SWS_PER_00049]). Neben Datenintegritäts- und Wiederherstellungsmechanismen regelt das Modul auch Update- und Migrationsprozesse bei Softwareaktualisierungen ([SWS_PER_00357]).

Der funktionale Cluster Persistency (ara::per) stellt für die AUTOSAR Adaptive Platform eine standardisierte Abstraktionsschicht zur nicht-flüchtigen Datenhaltung bereit (EXP_SWArchitecture S. 43). Er bietet zwei grundlegende Zugriffsmodelle: den schlüsselbasierten Speicher KeyValueStorage für strukturierte Parameter sowie den dateibasierten Speicher FileStorage für unstrukturierte Nutzdatenströme (SWS_Persistency S. 219). Sowohl Adaptive Applications als auch zentrale Plattform-Daemons wie State Management, Diagnostic Management oder Update and Configuration Management nutzen diese Schnittstellen, um ihre Zustände unabhängig von physischen Dateisystem- oder Flash-Treibern persistent abzulegen (EXP_SWArchitecture S. 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 Diagnostic Management 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

Kontextdiagramm: Einbettung des Clusters Persistency in die Adaptive Platform mit Anwendungs- und Plattformkonsumenten sowie dem unterlagerten Betriebssystem. Quellen: EXP_SWArchitecture S. 93, EXP_SWArchitecture S. 43.

Schreiboperationen im KeyValueStorage folgen einer strikten In-Memory-Transaktionssemantik ([SWS_PER_00046]). Modifikationen an Schlüssel-Wert-Paaren verbleiben zunächst flüchtig gepuffert und werden erst über den synchronen Aufruf SyncToStorage dauerhaft auf das Speichermedium geschrieben ([SWS_PER_00049]), während DiscardPendingChanges ungesicherte Stände verwirft ([SWS_PER_00365]). Im FileStorage erfolgt der Zugriff über spezialisierte, typisierte Accessoren (ReadAccessor, WriteAccessor, ReadWriteAccessor), die exklusiv über UniqueHandle verwaltet werden ([SWS_PER_00113], [SWS_PER_00114], [SWS_PER_00115]).

Transaktionale Schlüssel-Wert-Speicherung und physischer FlushAdaptive Applicationara::per (KeyValueStorage)Betriebssystem / NVRAMSetValue(key, value)Puffere Wert im RAM (Transaktionsstatus)Result<void> (Erfolg)altCommit-Pfad (Dauerhaftes Sichern)SyncToStorage()Berechne CRC / Redundanz & optionale Verschlüsselungwrite() / fsync()Status OKResult<void> (Persistiert)Rollback-Pfad (Verwerfen ungesicherter Änderungen)DiscardPendingChanges()Verwirf flüchtige RAM-ÄnderungenResult<void> (Zurückgesetzt)

Sequenzdiagramm: Schreib- und Synchronisationsablauf eines Key-Value-Speichers mit In-Memory-Pufferung und physischem Flush. Quellen: [SWS_PER_00046], [SWS_PER_00049], [SWS_PER_00365], EXP_SWArchitecture S. 230.

Darüber hinaus integriert das Modul umfassende Mechanismen für Lebenszyklus und Fehlertoleranz: Konfigurationswechsel während der Laufzeit werden über CheckForManifestUpdate und ReloadPersistencyManifest verarbeitet ([SWS_PER_00576], [SWS_PER_00577]), während anwendungsspezifische Datenmigrationen über Update-Callbacks erfolgen ([SWS_PER_00356], [SWS_PER_00357]). Schlagen manifestbasierte Redundanz- oder Integritätsprüfungen fehl, informieren Callbacks über den Korruptionsstatus ([SWS_PER_00433]), woraufhin beschädigte Daten mittels RecoverKeyValueStorage, RecoverFile oder durch Reset-Operationen repariert werden können ([SWS_PER_00333], [SWS_PER_00337], [SWS_PER_00334]).

Systemgrenzen und Architekturintegration von ara::per

Der funktionale Cluster Persistency (ara::per) stellt standardisierte Abstraktionsmechanismen für die nicht-flüchtige Datenhaltung auf der AUTOSAR Adaptive Platform bereit (EXP_SWArchitecture S. 43). Er entkoppelt sowohl benutzerdefinierte Anwendungen als auch funktionale Plattform-Dienste von betriebssystemspezifischen Dateisystemen, Partitionsstrukturen sowie Flash- oder NVRAM-Treibern (EXP_SWArchitecture S. 93). Die Bereitstellung umfasst zwei getrennte primäre Speicherparadigmen: den schlüsselbasierten Datenzugriff über KeyValueStorage sowie die hierarchische Dateiablage über FileStorage (SWS_Persistency S. 219). Plattform-Dienste wie Diagnostic Management (EXP_SWArchitecture S. 176), State Management (EXP_SWArchitecture S. 55), Update and Configuration Management (SWS_UpdateAndConfigurationManagement S. 18) und Remote Persistency (SWS_RemotePersistency S. 9) nutzen diese Schnittstellen als standardisierte Port-Interfaces ([SWS_PER_00052], [SWS_PER_00116]).

Zusätzlich zur Bereitstellung lokaler Speicherabstraktionen integriert ara::per kryptografische Primitiven und Redundanzprüfungen direkt an der Schnittstelle zum Host-Betriebssystem (EXP_SWArchitecture S. 230). Die funktionale Konfiguration eines Persistenz-Speichers wird im AUTOSAR-Manifest deklarativ modelliert und bindet Quota-Vorgaben, Integritäts-Hashes, CRC-Verfahren sowie kryptografische Verschlüsselungspfade an konkrete Instanzen (SWS_Persistency S. 104). Bibliotheksanteile anderer Funktionscluster binden Persistenz direkt über eigene Target-Configurations ein, während Daemon-Prozesse ähnlich wie reguläre Applikationen über Instance-Specifier auf Speichereinheiten zugreifen (SWS_Persistency S. 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 Diagnostic Management 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

Kontextdiagramm: Einbettung des Clusters Persistency in die Adaptive Platform mit Anwendungs- und Plattformkonsumenten sowie dem unterlagerten Betriebssystem. Quellen: EXP_SWArchitecture S. 93, EXP_SWArchitecture S. 43.

Schlüssel-Wert-Speicher: Instanziierung, Transaktionssemantik und Flush-Mechanismen

Der Zugriff auf strukturierte Parameter erfolgt über die Klasse ara::per::KeyValueStorage, die über den Aufruf ara::per::OpenKeyValueStorage unter Angabe eines ara::core::InstanceSpecifier geöffnet wird ([SWS_PER_00052]). Das zurückgegebene SharedHandle<KeyValueStorage> kapselt den Speicherbereich typsicher und verhindert durch gelöschte Move- und Copy-Konstruktoren der Basiskontainer eine unkontrollierte Duplizierung ([SWS_PER_00322], [SWS_PER_00324], [SWS_PER_00367]). Über SetValue ([SWS_PER_00046]) und GetValue ([SWS_PER_00044], [SWS_PER_00332]) werden Schlüssel-Wert-Paare modifiziert oder abgefragt; dabei stellt KeyExists ([SWS_PER_00043]) die Existenzprüfung und GetAllKeys ([SWS_PER_00042]) die vollständige Auflistung aller aktiven Schlüssel bereit.

Schreib- und Löschoperationen unterliegen einer strikten In-Memory-Transaktionssemantik: Änderungen durch SetValue, RemoveKey ([SWS_PER_00047]) oder RemoveAllKeys ([SWS_PER_00048]) verbleiben zunächst im flüchtigen Puffer des Prozesses (EXP_SWArchitecture S. 230). Erst der explizite Aufruf von SyncToStorage sichert alle ausstehenden Modifikationen atomar und dauerhaft auf den physischen Datenträger ([SWS_PER_00049]). Sollen noch ungeschriebene Transaktionsschritte verworfen werden, setzt DiscardPendingChanges den Zustand auf den Stand des letzten SyncToStorage oder des Öffnens zurück ([SWS_PER_00365]). Speicherbedarfe lassen sich über GetCurrentValueSize ([SWS_PER_00554]) für einzelne Werte sowie aggregiert inklusive Redundanz- und Metadaten über GetCurrentKeyValueStorageSize ([SWS_PER_00405]) überwachen (EXP_SWArchitecture S. 231).

Transaktionale Schlüssel-Wert-Speicherung und physischer FlushAdaptive Applicationara::per (KeyValueStorage)Betriebssystem / NVRAMSetValue(key, value)Puffere Wert im RAM (Transaktionsstatus)Result<void> (Erfolg)altCommit-Pfad (Dauerhaftes Sichern)SyncToStorage()Berechne CRC / Redundanz & optionale Verschlüsselungwrite() / fsync()Status OKResult<void> (Persistiert)Rollback-Pfad (Verwerfen ungesicherter Änderungen)DiscardPendingChanges()Verwirf flüchtige RAM-ÄnderungenResult<void> (Zurückgesetzt)

Sequenzdiagramm: Schreib- und Synchronisationsablauf eines Key-Value-Speichers mit In-Memory-Pufferung und physischem Flush. Quellen: [SWS_PER_00046], [SWS_PER_00049], [SWS_PER_00365], EXP_SWArchitecture S. 230.

Dateibasierter Speicherzugriff und typisierte Accessor-Hierarchien

Für unstrukturierte Datenströme, Binärblöcke oder Protokolldateien dient die Klasse ara::per::FileStorage, die über ara::per::OpenFileStorage initialisiert wird ([SWS_PER_00116]). Innerhalb eines FileStorage-Containers lassen sich vorhandene Dateien über GetAllFileNames auflisten ([SWS_PER_00110]), deren Existenz via FileExists prüfen ([SWS_PER_00112]) oder Dateien über DeleteFile entfernen ([SWS_PER_00111]). Die Größenkontingente werden über GetCurrentFileSize ([SWS_PER_00407]) und GetCurrentFileStorageSize ([SWS_PER_00406]) ermittelt (EXP_SWArchitecture S. 231).

Der Dateizugriff selbst folgt dem Prinzip der Schnittstellentrennung über spezialisierte Accessor-Klassen (EXP_SWArchitecture S. 88). Abhängig vom geforderten Modus (OpenMode, [SWS_PER_00147], kombinierbar via Bitwise-Operatoren [SWS_PER_00144], [SWS_PER_00434]) erzeugen die Fabrikmethoden exklusive UniqueHandle-Instanzen ([SWS_PER_00371], [SWS_PER_00569]):

Gemeinsame Positions- und Größenoperationen wie GetPosition ([SWS_PER_00162]), SetPosition ([SWS_PER_00163]), relatives Navigieren mittels MovePosition und Enumeration Origin ([SWS_PER_00146], [SWS_PER_00164]), GetSize ([SWS_PER_00424]) sowie die Dateiendeprüfung IsEof ([SWS_PER_00107]) sind in der gemeinsamen Basisklasse FileAccessor verankert. Erweiterte Datei-Metadaten wie Zeitstempel und Erstellungsursachen werden über GetFileInfo und die Struktur FileInfo ausgelesen ([SWS_PER_00435], [SWS_PER_00436], [SWS_PER_00438], [SWS_PER_00441], [SWS_PER_00442], [SWS_PER_00443], [SWS_PER_00444], [SWS_PER_00445]). Interpretation: Die strikte Trennung in unkopierbare Accessor-Instanzen dürfte neben der Typsicherheit primär dazu dienen, konkurrierende Schreibkonflikte auf Betriebssystemebene deterministisch zu verhindern. Frage Q-a990a7aa44326447 (offen)

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

Strukturdiagramm: Schnittstellen- und Klassenhierarchie der Dateizugriffsklassen und Accessor-Handles. Quellen: [SWS_PER_00113], [SWS_PER_00114], [SWS_PER_00115], EXP_SWArchitecture S. 88.

Lebenszyklusverwaltung, Update-Abläufe und Manifest-Synchronisation

Für Software-Aktualisierungen und Neuinstallationen durch das Update and Configuration Management (UCM) bietet Persistency dedizierte Lebenszyklus-Operationen (EXP_SWArchitecture S. 92). Wird während der Laufzeit einer Applikation eine aktualisierte Zielkonfiguration eingespielt, kann die Anwendung mittels CheckForManifestUpdate feststellen, ob Konfigurationsänderungen vorliegen ([SWS_PER_00576]). Mit ReloadPersistencyManifest liest ara::per die aktualisierte Konfiguration neu ein, woraufhin geänderte Speicherdefinitionen nach dem nächsten Schließen und Wiederöffnen aktiv werden ([SWS_PER_00577]).

Zur Migration bestehender Anwendungsdaten wird über RegisterApplicationDataUpdateCallback eine Rückruffunktion hinterlegt, die von ara::per getriggert wird, wenn anhand abweichender Contract-Versionsstände eine Datenmigration erforderlich ist ([SWS_PER_00356]). Punktuelle Änderungen einzelner Elemente lassen sich über RegisterDataUpdateIndication überwachen ([SWS_PER_00578]). Der Gesamtprozess der Persistenzaktualisierung wird während der Verifikationsphase durch UpdatePersistency angestoßen ([SWS_PER_00357]). Nach erfolgreicher Aktualisierung entfernt CleanUpPersistency veraltete Backup- und Migrationsdaten ([SWS_PER_00567]), während ResetPersistency die Speicherbereiche vollständig leert, sodass sie beim nächsten Öffnen initial aus dem Manifest neu erzeugt werden ([SWS_PER_00358]).

Manifest-Aktualisierung und DatenmigrationAdaptive Applicationara::per (Persistency)UCM / ManifestCheckForManifestUpdate()Result<bool> (Update verfügbar)optManifest-Aktualisierung erkanntReloadPersistencyManifest()Lese neue Target-ConfigurationKonfiguration geladenResult<void>UpdatePersistency()Callback: appDataUpdateCallback(storage, version)Migriere anwendungsspezifische DatenMigration abgeschlossenResult<void> (UpdatePersistency OK)CleanUpPersistency()Lösche temporäre Backup- und AltdatenResult<void> (Bereinigt)

Sequenzdiagramm: Ablauf einer Persistenz-Aktualisierung mit Konfigurationsprüfung, Callback-Migration und Bereinigung. Quellen: [SWS_PER_00356], [SWS_PER_00357], [SWS_PER_00567], [SWS_PER_00576], [SWS_PER_00577], EXP_SWArchitecture S. 92.

Integritätsüberwachung, Redundanzbehandlung und Wiederherstellung

Um korrumpierte Datensätze abzufangen, unterstützen Key-Value- und Dateispeicher konfigurierbare Redundanzkopien und Integritätsmechanismen (CRC, Hash, MAC-Authentifizierung und Verschlüsselung) (SWS_Persistency S. 104, EXP_SWArchitecture S. 230). Schlagen interne Redundanzprüfungen fehl, können sicherheitsrelevante Anwendungen über RegisterRecoveryReportCallback informiert werden ([SWS_PER_00433]). Der Callback übermittelt den RecoveryReportKind (z. B. kKeyValueStorageRecoveryFailed) sowie betroffene Instanzen und Schlüssel/Dateinamen ([SWS_PER_00432], EXP_SWArchitecture S. 91).

Zur gezielten Wiederherstellung beschädigter Daten stehen granulare Reparatur- und Rücksetzmethoden zur Verfügung:

  • Wiederherstellung: Auf Speicherebene erlauben RecoverKeyValueStorage ([SWS_PER_00333]) und RecoverAllFiles ([SWS_PER_00335]) die Reparatur geschlossener Container; auf Elementebene stellen RecoverKey ([SWS_PER_00427]) und RecoverFile ([SWS_PER_00337]) einzelne beschädigte Einträge im Best-Effort-Verfahren wieder her.
  • Rücksetzen auf Werkswerte: Über ResetKeyValueStorage ([SWS_PER_00334]) und ResetAllFiles ([SWS_PER_00336]) können Container auf den Zustand der Erstauslieferung zurückgesetzt werden; analog versetzen ResetKey ([SWS_PER_00426]) oder ResetFile ([SWS_PER_00338]) Einzelelemente in ihren konfigurierten Ausgangszustand.
PerRecoveryFlow Start Datenzugriff oder Integritätsprüfung Check Redundanz-/Integritätsprüfung (CRC, Hash, MAC, Kopien) Start->Check Report Trigger RegisterRecoveryReportCallback (RecoveryReportKind gemeldet) Check->Report Fehler Success Speicher wieder im konsistenten Zustand Check->Success OK Decide Wiederherstellungsstrategie? Report->Decide RecoverStorage RecoverKeyValueStorage() / RecoverAllFiles() Decide->RecoverStorage Vollständige Container-Korrektur RecoverSingle RecoverKey() / RecoverFile() (Best-Effort) Decide->RecoverSingle Einzelwert-Reparatur ResetDefault ResetKeyValueStorage() / ResetAllFiles() (Werkswerte) Decide->ResetDefault Rücksetzen auf Init-Stand RecoverStorage->Success RecoverSingle->Success ResetDefault->Success

Aktivitätsdiagramm: Entscheidungspfad bei Datenkorruption von der Redundanzprüfung über Callbacks bis zur Wiederherstellung oder dem Reset. Quellen: [SWS_PER_00333], [SWS_PER_00334], [SWS_PER_00432], [SWS_PER_00433].

Verhalten im Fehlerfall

Fehlerzustände werden in ara::per nicht über unkontrollierte C++-Exceptions propagiert, sondern deterministisch über den Rückgabetyp ara::core::Result abgebildet ([SWS_PER_00044], [SWS_PER_00113]). Das Modul definiert eine eigene Fehlerdomäne über GetPerDomain ([SWS_PER_00352]), implementiert durch PerErrorDomain mit standardisierter Fehlerauflösung über Name ([SWS_PER_00314]) und Message ([SWS_PER_00315]) sowie der Enumeration PerErrc bzw. dem Typalias Errc ([SWS_PER_00311], [SWS_PER_00411]). Für Umgebungen mit aktivierten Exceptions stehen PerException ([SWS_PER_00355], [SWS_PER_00412]) und ThrowAsException ([SWS_PER_00350]) zur Verfügung, während MakeErrorCode die Erstellung plattformkonformer Fehlercodes kapselt ([SWS_PER_00351]).

Typische Fehlercodes decken ressourcen- und concurrency-bezogene Konflikte ab: Operationen wie OpenKeyValueStorage ([SWS_PER_00052]), OpenFileStorage ([SWS_PER_00116]), DeleteFile ([SWS_PER_00111]) oder RecoverKeyValueStorage ([SWS_PER_00333]) schlagen mit kResourceBusy fehl, falls das betreffende Speicherelement bereits geöffnet ist oder parallel durch Wartungsoperationen wie UpdatePersistency verändert wird. Beim Zuweisen inkompatibler Typen meldet SetValue den Fehler kDataTypeMismatch ([SWS_PER_00046]). Bei physischen Hardwarefehlern (PerErrc::kPhysical) wird differenziert, ob eine Rollback-Semantik vorliegt (z. B. bei Lese- und Positionsoperationen wie [SWS_PER_00167], [SWS_PER_00168], wo die Zeiger unverändert bleiben) oder ob Datenkorruption ohne Rollback-Garantie eintreten kann (z. B. bei [SWS_PER_00122], [SWS_PER_00166], [SWS_PER_00423]).

Zur Diagnose von Synchronisations- und Zugriffsfehlern erzeugt das Modul standardisierte DLT-Protokollmeldungen (SWS_Persistency S. 110). Hierbei protokollieren Meldungen wie SyncToStorage (Message-ID 0x80008037), SyncToFile (0x80008036) und DiscardPendingChanges (0x80008038) detailliert betroffene Schlüsselmengen und Speicherbelegungen, wodurch auch bei unvollständigem Herunterfahren (z. B. via ara::core::Deinitialize) der Zustand rekonstruierbar bleibt (SWS_Persistency S. 110).

Weiterführende Detailbelege

Die Architektur und Interaktion des Persistenz-Clusters stützen sich auf folgende normative Vorgaben und Dokumentstellen:

Dieser Modul-Leitfaden basiert auf den Spezifikationen des AUTOSAR-Adaptive-Releases R25-11. Die Aussagen stützen sich ausschließlich auf die verbindlichen SWS-Anforderungen und die zugeordneten Architekturdokumente.

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

ara::per

FileAccessor contains a common basis for ReadAccessor and WriteAccessor

Basis für ReadAccessor, WriteAccessor

FileInfo class

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.

erbt von ara::core::ErrorDomain

Exception type thrown by Persistency.

erbt von ara::core::Exception

ReadAccessor is used to read file data

erbt von FileAccessor

Basis für ReadWriteAccessor

ReadWriteAccessor is used to read and write file data

erbt von ReadAccessor, WriteAccessor

Handle to a File Storage or Key-Value Storage

Handle to a ReadAccessor or ReadWriteAccessor

WriteAccessor is used to write file data

erbt von FileAccessor

Basis für 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;
GetPerDomain function

Returns the global PerErrorDomain object.

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

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| function

Merges two OpenMode modifiers into one.

constexpr OpenMode operator| (OpenMode left, OpenMode right);
operator|= function

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;
ResetAllFiles function

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;
FileCreationState enumeration

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 enumeration

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 enumeration

Specification of origin used in MovePosition.

enum class Origin : std::uint32_t {...};
PerErrc enumeration

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 {...};
RecoveryReportKind enumeration

Defines the reported recovery actions.

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

Namespaces

UML-Klassendiagramm des Moduls

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