AUTOSAR自适应平台Persistency模块(二)

目录

5、API规范

5.1 键值存储【Key-Value Storage】

5.2 文件存储【File Storage】

5.3 更新/删除持久性数据

5.4 冗余处理【Redundancy Handling】

5.5 Handle类

5.6 错误信息【Errors】

6、服务接口


5、API规范

  访问文件存储和键值存储的api是完全分离的,因此被划分为单独的部分。其他部分描述了常见的功能

  持久化规范中所有指定的类都应该驻留在c++命名空间ara::per中

  持久化的API是围绕着ara::per::SharedHandle和ara::per::UniqueHandle设计的,它们由工厂函数返回,

  如ara::per::OpenKeyValueStorage或ara::per::FileStorage::OpenFileReadWrite。

  自适应应用程序不能直接构造本章中定义的类,因此默认构造函数被认为是不可公开访问的(即被删除、私有或保护)。

5.1 键值存储【Key-Value Storage】

  头文件:#include "ara/per/key_value_storage.h"

下面列举出操作键值存储所需要的函数及类;罗列出的函数用于访问Key-Value Storage,在它损坏后会尽可能的进行恢复,并将其重置为已设置的默认值,

  从而获取分配给Key-Value Storage的存储量

  5.1.1 OpenKeyValueStorage函数

函数原型

ara::core::Result<SharedHandle<KeyValueStorage>> OpenKeyValueStorage(const ara::core::InstanceSpecifier &kvs) noexcept;

描述

创建KeyValueStorage类实例,打开一个键值存储

参数

kvs,由PersistencyKeyValueStorageInterface类型的PortPrototype的短名称路径

返回值

若调用成功,则返回SharedHandle<KeyValueStorage> 类型的实例

若失败返回如下:

PerErrc::kStorageNotFound: 传入的参数不匹配时

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kResourceBusy: 如果UpdatePersistency或ResetPersistency正在执行,

或者RecoverKeyValueStorage或ResetKeyValueStorage正在执行同一个Key-Value Storage

PerErrc::kOutOfStorageSpace: 可用存储空间不足以容纳添的更新值

PerErrc::kNotInitialized: 若函数在initialize之前或Deinitialize之后进行调用

  

  5.1.2 RecoverKeyValueStorage函数

函数原型

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

描述

恢复一个键值存储;允许在冗余检查失败时恢复键值存储

参数

kvs,由PersistencyKeyValueStorageInterface类型的PortPrototype的短名称路径

返回值

void类型

若失败返回如下:

PerErrc::kStorageNotFound: 传入的参数不匹配时

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kResourceBusy: 如果UpdatePersistency或ResetPersistency正在执行,或者RecoverKeyValueStorage或ResetKeyValueStorage正在执行同一个Key-Value Storage

PerErrc::kOutOfStorageSpace: 可用存储空间不足以容纳添的更新值

PerErrc::kNotInitialized: 若函数在initialize之前或Deinitialize之后进行调用

  5.1.3 ResetKeyValueStorage函数

函数原型

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

描述

将键值存储重置为初始状态

参数

kvs,由PersistencyKeyValueStorageInterface类型的PortPrototype的短名称路径

返回值

void类型

若失败返回如下:

PerErrc::kStorageNotFound: 传入的参数不匹配时

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kResourceBusy: 如果UpdatePersistency或ResetPersistency正在执行,或者RecoverKeyValueStorage或ResetKeyValueStorage正在执行同一个Key-Value Storage

PerErrc::kOutOfStorageSpace: 可用存储空间不足以容纳添的更新值

PerErrc::kNotInitialized: 若函数在initialize之前或Deinitialize之后进行调用

  

  5.1.4 GetCurrentKeyValueStorageSize函数

函数原型

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

描述

返回键值存储当前占用的字节数

参数

kvs,由PersistencyKeyValueStorageInterface类型的PortPrototype的短名称路径

返回值

uint64_t类型

若失败返回如下:

PerErrc::kStorageNotFound: 传入的参数不匹配时

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kNotInitialized: 若函数在initialize之前或Deinitialize之后进行调用

  

5.1.5 KeyValueStorage类

    头文件:  #include "ara/per/key_value_storage.h"

5.1.5.1 KeyValueStorage::KeyValueStorage函数

构造函数

KeyValueStorage (KeyValueStorage &&kvs) noexcept

不能使用KeyValueStorage的复制拷贝构造函数

KeyValueStorage (const KeyValueStorage &)=delete;

5.1.5.2 KeyValueStorage::operator=

KeyValueStorage& operator= (KeyValueStorage &&kvs) &noexcept; 复制赋值操作符

KeyValueStorage& operator= (const KeyValueStorage &)=delete; 不能使用KeyValueStorage的复制赋值操作符。

5.1.5.3 KeyValueStorage::~KeyValueStorage函数

~KeyValueStorage () noexcept; 析构函数

5.1.5.4 KeyValueStorage::GetAllKeys函数

函数原型

ara::core::Result<ara::core::Vector<ara::core::String> > GetAllKeys () const noexcept

描述

获取键值存储内存中所有可用建的列表

参数

返回值

ara::core::Vector<ara::core::String>类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kNotInitialized: 若在initialize之前或Deinitialize之后进行调用

5.1.5.5 KeyValueStorage::KeyExists函数

函数原型

ara::core::Result<bool> KeyExists (ara::core::StringView key) const noexcept;

描述

检查key键值在键值存储中是否存在

参数

需检查的key键值

返回值

bool类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kNotInitialized: 若在initialize之前或Deinitialize之后进行调用

5.1.5.6 KeyValueStorage::GetValue函数

函数原型

ara::core::Result<T> GetValue (ara::core::StringView key) const noexcept;【template <class T>】

描述

在键值存储内存中,通过键值key获取value值

参数

键值key

返回值

检索值的结果

若失败返回如下:

PerErrc::kKeyNotFound: 提供的键在键值存储中不存在

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kDataTypeMismatch: 存储值的数据类型与模板类型不匹配

PerErrc::kNotInitialized: 若在initialize之前或Deinitialize之后进行调用

5.1.5.7 KeyValueStorage::SetValue函数

函数原型

ara::core::Result<void> SetValue (ara::core::StringView key, const T &value) noexcept

描述

指定键值key并设置value值

参数

键值key;设置的value值

返回值

void类型

若失败返回如下:

PerErrc::kIllegalWriteAccess: 键值存储配置为只读

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kDataTypeMismatch: 存储值的数据类型与模板类型不匹配

PerErrc::kOutOfStorageSpace: 可用存储空间不足以容纳添的更新值

PerErrc::kNotInitialized: 若在initialize之前或Deinitialize之后进行调用

5.1.5.8 KeyValueStorage::RemoveKey函数

函数原型

ara::core::Result<void> RemoveKey (ara::core::StringView key) noexcept;

描述

根据提供的键值key移除键值key以及相关联的value值

参数

键值key

返回值

void类型

若失败返回如下:

PerErrc::kKeyNotFound: 提供的键在键值存储中不存在

PerErrc::kIllegalWriteAccess: 键值存储配置为只读

PerErrc::kPhysicalStorageFailure:  访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kEncryptionFailed:  存储的数据解密失败

PerErrc::kNotInitialized:  若在initialize之前或Deinitialize之后进行调用

    

5.1.5.9 KeyValueStorage::RecoverKey函数

函数原型

ara::core::Result<void> RecoverKey (ara::core::StringView key) noexcept

描述

根据所提供的键值key恢复这个键值存储

参数

键值key

返回值

void类型

若失败返回如下:

PerErrc::kKeyNotFound: 提供的键在键值存储中不存在

PerErrc::kPhysicalStorageFailure:  访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kEncryptionFailed:  存储的数据解密失败

PerErrc::kOutOfStorageSpace:  可用存储空间不足以容纳添的更新值

PerErrc::kNotInitialized:  在initialize之前或Deinitialize之后进行调用

5.1.5.10 KeyValueStorage::ResetKey函数

函数原型

ara::core::Result<void> ResetKey(ara::core::StringView key) noexcept

描述

将键值存储中的某个键值重置为初始值

参数

键值key

返回值

void类型

若失败返回如下:

PerErrc::kIllegalWriteAccess: 键值存储配置为只读

PerErrc::kPhysicalStorageFailure:  访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kEncryptionFailed:  存储的数据解密失败

PerErrc::kOutOfStorageSpace:  可用存储空间不足以容纳添的更新值

PerErrc::kNotInitialized:  在initialize之前或Deinitialize之后进行调用

PerErrc::kInitValueNotAvailable: 没有为该键值配置初始值

5.1.5.11 KeyValueStorage::RemoveAllKeys函数

函数原型

ara::core::Result<void> RemoveAllKeys () noexcept

描述

从这个键值存储中移除所有键值及相关联值

参数

返回值

void类型

若失败返回如下:

PerErrc::kIllegalWriteAccess: 键值存储配置为只读

PerErrc::kPhysicalStorageFailure:  访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kEncryptionFailed:  存储的数据解密失败

PerErrc::kNotInitialized:  若在initialize之前或Deinitialize之后进行调用

5.1.5.12 KeyValueStorage::SyncToStorage函数

函数原型

ara::core::Result<void> SyncToStorage() noexcept

描述

将更改的键值存储的键值对同步到物理存储

参数

返回值

void类型

若失败返回如下:

PerErrc::kIllegalWriteAccess: 键值存储配置为只读

PerErrc::kPhysicalStorageFailure:  访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kEncryptionFailed:  存储的数据解密失败

PerErrc::kOutOfStorageSpace:  可用存储空间不足以容纳添的更新值

PerErrc::kNotInitialized:  在initialize之前或Deinitialize之后进行调用

5.1.5.13 KeyValueStorage::DiscardPendingChanges函数

函数原型

ara::core::Result<void> DiscardPendingChanges() noexcept

描述

移除自上次调用SyncToStorage()或使用OpenKeyValueStorage()打开该Key-Value Storage以来对该Key-Value Storage的所有挂起的更改

参数

返回值

void类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure:  访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kValidationFailed:  无法确认存储数据的有效性

PerErrc::kEncryptionFailed:  存储的数据解密失败

PerErrc::kNotInitialized:  在initialize之前或Deinitialize之后进行调用

5.2 文件存储【File Storage】

  头文件:#include "ara/per/file_storage.h"

  下面列出操作文件存储所需的所有函数和类

  以下函数用于访问文件存储、在文件存储损坏后尽可能恢复、将其重置为已部署的默认值以及获取分配给文件存储的存储量。此外,存在操作符来组合作为模式传递给OpenFile *函数的ara::per::OpenMode值。

  当以文本模式访问文件时,持久性本身不会改变或解释文件的内容

5.2.1 OpenFileStorage函数

函数原型

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

描述

创建FileStorage类实例,打开一个文件存储

参数

fs,由PersistencyFileStorageInterface类型的PortPrototype的短名称路径

返回值

返回SharedHandle<FileStorage> 类型的实例

若失败返回如下:

PerErrc::kStorageNotFound:   传入的参数不匹配时

PerErrc::kPhysicalStorageFailure:  访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kValidationFailed:  无法确认存储数据的有效性

PerErrc::kEncryptionFailed:  存储的数据解密失败

PerErrc::kResourceBusy: 若UpdatePersistency或ResetPersistency正在执行,或ResetAllFiles正在为相同的文件存储执行,或相同的文件存储SharedHandle正在使用

PerErrc::kOutOfStorageSpac: 可用存储空间不足      

PerErrc::kNotInitialized:  若在initialize之前或Deinitialize之后进行调用

5.2.2 RecoverAllFiles函数

函数原型

ara::core::Result<void> RecoverAllFiles (const ara::core::Instance

Specifier &fs) noexcept

描述

恢复所有文件存储

参数

fs,由PersistencyFileStorageInterface类型的PortPrototype的短名称路径

返回值

void类型

若失败返回如下:

PerErrc::kStorageNotFound:   传入的参数不匹配时

PerErrc::kPhysicalStorageFailure:  访问存储失败

PerErrc::kEncryptionFailed:  存储的数据解密失败

PerErrc::kResourceBusy: 若UpdatePersistency或ResetPersistency正在执行,或者ResetAllFiles正在为相同的文件存储执行,或者相同的文件存储的SharedHandle正在使用

PerErrc::kOutOfStorageSpace:  可用存储空间不足以容纳添的更新值

PerErrc::kNotInitialized:  若函数在initialize之前或Deinitialize之后进行调用

5.2.3 ResetAllFiles函数

函数原型

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

描述

重置文件存储,包括所有文件

参数

fs,由PersistencyFileStorageInterface类型的PortPrototype的短名称路径

返回值

void类型

若失败返回如下:

PerErrc::kStorageNotFound: 传入的参数不匹配时

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kEncryptionFailed:  存储的数据解密失败

PerErrc::kResourceBusy: 若UpdatePersistency或ResetPersistency正在执行,或者

ResetAllFiles正在为相同的文件存储执行,或相同的文件存储的SharedHandle正在使用

PerErrc::kOutOfStorageSpace: 可用存储空间不足以容纳添的更新值

PerErrc::kNotInitialized: 若函数在initialize之前或Deinitialize之后进行调用

5.2.4 GetCurrentFileStorageSize函数

函数原型

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

描述

返回文件存储当前所占用的字节数

参数

fs,由PersistencyFileStorageInterface类型的PortPrototype的短名称路径

返回值

void类型

若失败返回如下:

PerErrc::kStorageNotFound: 传入的参数不匹配时

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kNotInitialized: 若函数在initialize之前或Deinitialize之后进行调用

5.2.5 OpenMode枚举

格式

enum class OpenMode : uint32_t {...};

描述

此枚举定义如何打开文件

枚举成员

enum class OpenMode : uint32_t {
  kAtTheBeginning= 1 << 0,  //当文件打开时,将搜索位置设置为文件的开头。该模式不能与kAtTheEnd模式组合使用。
  kAtTheEnd= 1 << 1,  //当文件打开时,将搜索位置设置为文件的末尾。该模式不能与kAtTheBeginning或kTruncate组合使用
  kTruncate= 1 << 2,  //打开文件时删除现有内容。该模式不能与kAtTheEnd模式组合使用
  kAppend= 1 << 3  //追加到末尾。总是在写入之前查找到文件的末尾
};

5.2.6 operator| for FileStorage::OpenMode

格式: constexpr OpenMode operator| (OpenMode left, OpenMode right);

描述: 将两个OpenMode修饰符合并为一个

参数:两个OpenMode类型的枚举

返回值: OpenMode类型

5.2.7 operator|= for FileStorage::OpenMode

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

描述: 将OpenMode修饰符合并到此OpenMode中

参数:两个OpenMode类型的枚举

返回值: OpenMode &类型

5.2.8 FileCreationState枚举

格式

enum class FileCreationState : uint32_t {...};

描述

此枚举描述如何以及何时创建文件

枚举成员

enum class FileCreationState : uint32_t {
  kCreatedDuringInstallion= 1, //该文件是在应用程序安装后或在resetpersistence之后由Persistency创建的。
  kCreatedDuringUpdate= 2, //该文件是在更新期间由Persistency创建的
  kCreatedDuringReset= 3, //由于调用ResetFile或ResetAllFiles,重新创建了该文件
  kCreatedDuringRecovery= 4, //在检测到损坏后,persistence重新创建了该文件
  kCreatedByApplication= 5  //该文件是由应用程序创建的
};

5.2.9 FileModificationState枚举

格式

enum class FileModificationState : uint32_t {...};

描述

此枚举描述文件最后一次修改的方式和时间

枚举成员

enum class FileModificationState : uint32_t {
  kModifiedDuringUpdate= 2, //文件最后一次由持久化在更新期间修改
  kModifiedDuringReset= 3, //由于调用ResetFile或ResetAllFiles,该文件最后一次被Persistency修改
  kModifiedDuringRecovery= 4, //在检测到损坏后,持久化最后一次修改该文件
  kModifiedByApplication= 5 //该文件最后是由应用程序修改的
};

5.2.10 FileInfo结构体

格式

struct FileInfo {...};

描述

该结构包含由GetFileInfo返回的文件的附加信息

结构体成员

struct FileInfo {
  uint64_t creationTime; //创建文件的时间
  uint64_t modificationTime; //最后一次修改文件的时间
  uint64_t accessTime; //最后一次文件被访问的时间
  FileCreationState fileCreationState; //关于如何以及由谁创建文件的信息
  FileModificationState fileModificationState; //关于文件最后修改的方式和由谁修改的信息
};

5.2.11 FileStorage类

5.2.11.1 FileStorage::GetAllFileNames函数

函数原型

ara::core::Result<ara::core::Vector<ara::core::String> > GetAllFileNames () const noexcept

描述

获取此文件存储的所有当前可用文件的列表

参数

返回值

ara::core::Vector<ara::core::String>类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kNotInitialized: 若函数在Deinitialize之后进行调用

5.2.11.2 FileStorage::DeleteFile函数

函数原型

ara::core::Result<void> DeleteFile(ara::core::StringView fileName) noexcept

描述

从此文件存储区删除文件

参数

fileName文件名

返回值

void类型

若失败返回如下:

PerErrc::kIllegalWriteAccess: 文件存储配置为只读

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kResourceBusy: 如果文件是打开的,或者如果具有相同文件名的RecoverFile

或ResetFile正在执行

PerErrc::kFileNotFound: 提供的文件在文件存储中不存在

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

5.2.11.3 FileStorage::FileExists函数

函数原型

ara::core::Result<bool> FileExists (ara::core::StringView fileName) const noexcept

描述

检查文件在文件存储区是否存在

参数

fileName文件名

返回值

bool类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

5.2.11.4 FileStorage::RecoverFile函数

函数原型

ara::core::Result<void> RecoverFile (ara::core::StringView fileName) noexcept

描述

恢复此文件存储的文件

参数

fileName文件名

返回值

void类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kResourceBusy: 如果文件是打开的,或者如果具有相同文件名的RecoverFile或ResetFile正在执行

PerErrc::kOutOfStorageSpace: 可用存储空间不足

PerErrc::kFileNotFound: 提供的文件在文件存储中不存在

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

5.2.11.5 FileStorage::ResetFile函数

函数原型

ara::core::Result<void> ResetFile (ara::core::StringView  fileName) noexcept

描述

将文件存储的文件内容重置为初始内容

参数

fileName文件名

返回值

void类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

 PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kInitValueNotAvailable: 没有为该文件配置初始值

PerErrc::kResourceBusy: 如果文件是打开的,或者如果具有相同文件名的RecoverFile或ResetFile正在执行

PerErrc::kOutOfStorageSpace: 可用存储空间不足

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

5.2.11.6 FileStorage::GetCurrentFileSize函数

函数原型

ara::core::Result<uint64_t> GetCurrentFileSize (ara::core::StringView fileName) const noexcept

描述

返回此文件存储的文件内容当前所占的空间大小

参数

fileName文件名

返回值

uint64_t类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kFileNotFound: 提供的文件在文件存储中不存在

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

5.2.11.7 FileStorage::GetFileInfo函数

函数原型

ara::core::Result<FileInfo> GetFileInfo (ara::core::StringView fileName) const noexcept

描述

获取此文件存储的文件内容信息

参数

fileName文件名

返回值

FileInfo类型结构体

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kFileNotFound: 提供的文件在文件存储中不存在

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

5.2.11.8 FileStorage::OpenFileReadWrite函数

函数原型

(1)ara::core::Result<UniqueHandle<ReadWriteAccessor>> OpenFileReadWrite(ara::core::StringView fileName) noexcept

描述

打开文件存储的文件进行读写

参数

fileName文件名

返回值

UniqueHandle<ReadWriteAccessor>类型

若失败返回如下:

PerErrc::kIllegalWriteAccess: 文件存储配置为只读模式

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kResourceBusy: 文件已经打开,或者如果同名的DeleteFile、RecoverFile或ResetFile正在执行

PerErrc::kOutOfStorageSpace: 当创建文件时,如果可用存储空间不足或文件数量将大于配置的maxNumberOfFiles

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

函数原型

(2) ara::core::Result<UniqueHandle<ReadWriteAccessor>> OpenFileReadWrite(ara::core::StringView fileName, OpenMode mode) noexcept

描述

以定义的模式打开此文件存储的文件进行读写

参数

文件名称及定义的模式

返回值

UniqueHandle<ReadWriteAccessor>类型

若失败返回如下:

PerErrc::kIllegalWriteAccess: 文件存储配置为只读模式

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kResourceBusy: 文件已经打开,或者如果同名的DeleteFile、RecoverFile或ResetFile正在执行

PerErrc::kOutOfStorageSpace: 当创建文件时,如果可用存储空间不足或文件数量将大于配置的maxNumberOfFiles

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

PerErrc::kInvalidOpenMode: 传递的模式包含无效的模式组合

函数原型

(3) ara::core::Result<UniqueHandle<ReadWriteAccessor>> OpenFileReadWrite(ara::core::StringView fileName, OpenMode mode,
ara::core::Span<ara::core::Byte > buffer) noexcept

描述

使用用户提供的缓冲区打开此文件存储的文件进行读写

参数

文件名称、打开文件模式以及buffer缓存区

返回值

UniqueHandle<ReadWriteAccessor>类型

若失败返回如下:

PerErrc::kIllegalWriteAccess: 文件存储配置为只读模式

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kResourceBusy: 文件已经打开,或者如果同名的DeleteFile、RecoverFile或ResetFile正在执行

PerErrc::kOutOfStorageSpace: 当创建文件时,如果可用存储空间不足或文件数量将大于配置的maxNumberOfFiles

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

PerErrc::kInvalidOpenMode: 传递的模式包含无效的模式组合

5.2.11.9 FileStorage::OpenFileReadOnly函数

函数原型

(1) ara::core::Result<UniqueHandle<ReadAccessor> > OpenFileReadOnly(ara::core::StringView fileName) noexcept

描述

打开文件存储的文件进行读取

参数

文件名称

返回值

UniqueHandle<ReadAccessor>类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kResourceBusy: 文件已经打开,或者如果同名的DeleteFile、RecoverFile或ResetFile正在执行

PerErrc::kFileNotFound: 提供的文件在文件存储区中不存在

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

函数原型

(2) ara::core::Result<UniqueHandle<ReadAccessor>> OpenFileReadOnly(ara::core::StringView fileName, OpenMode mode) noexcept

描述

以定义的模式打开文件存储的文件进行读取

参数

文件名称及打开文件模式

返回值

UniqueHandle<ReadAccessor>类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kResourceBusy: 文件已经打开,或者如果同名的DeleteFile、RecoverFile或ResetFile正在执行

PerErrc::kFileNotFound: 提供的文件在文件存储区中不存在

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

PerErrc::kInvalidOpenMode: 传递的模式包含无效的模式组合

函数原型

(3) ara::core::Result<UniqueHandle<ReadAccessor>> OpenFileReadOnly(ara::core::StringView fileName, OpenMode mode,
ara::core::Span<ara::core::Byte > buffer) noexcept

描述

使用用户提供的缓冲区打开此文件存储的文件进行读取

参数

文件名称、打开文件模式及buffer缓冲区

返回值

UniqueHandle<ReadAccessor>类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kResourceBusy: 文件已经打开,或者如果同名的DeleteFile、RecoverFile或ResetFile正在执行

PerErrc::kFileNotFound: 提供的文件在文件存储区中不存在

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

PerErrc::kInvalidOpenMode: 传递的模式包含无效的模式组合

5.2.11.10 FileStorage::OpenFileWriteOnly函数

函数原型

(1) ara::core::Result<UniqueHandle<ReadWriteAccessor> > OpenFileWriteOnly(ara::core::StringView fileName) noexcept

描述

打开此文件存储的文件进行写入

参数

文件名称

返回值

UniqueHandle<ReadAccessor>类型

若失败返回如下:

PerErrc::kIllegalWriteAccess: 文件存储配置为只读模式

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kResourceBusy: 文件已经打开,或者如果同名的DeleteFile、RecoverFile或

ResetFile正在执行

PerErrc::kOutOfStorageSpace: 当创建文件时,如果可用存储空间不足或文件数量将大于配置的maxNumberOfFiles

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

函数原型

(2) ara::core::Result<UniqueHandle<ReadWriteAccessor>> OpenFileWriteOnly(ara::core::StringView fileName, OpenMode mode) noexcept

描述

以定义的模式打开此文件存储的文件进行写入

参数

文件名称及打开文件模式

返回值

UniqueHandle<ReadAccessor>类型

若失败返回如下:

PerErrc::kIllegalWriteAccess: 文件存储配置为只读模式

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kResourceBusy: 文件已经打开,或者如果同名的DeleteFile、RecoverFile或ResetFile正在执行

PerErrc::kOutOfStorageSpace: 当创建文件时,如果可用存储空间不足或文件数量将大于配置的maxNumberOfFiles

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

PerErrc::kInvalidOpenMode: 传递的模式包含无效的模式组合

函数原型

(3) ara::core::Result<UniqueHandle<ReadWriteAccessor>>
OpenFileWriteOnly(ara::core::StringView fileName, OpenMode mode, ara::core::Span<ara::core::Byte > buffer) noexcept

描述

使用用户提供的缓冲区打开此文件存储的文件进行写入

参数

文件名称、打开文件模式及buffer缓冲区

返回值

UniqueHandle<ReadAccessor>类型

若失败返回如下:

PerErrc::kIllegalWriteAccess: 文件存储配置为只读模式

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kResourceBusy: 文件已经打开,或者如果同名的DeleteFile、RecoverFile或ResetFile正在执行

PerErrc::kOutOfStorageSpace: 当创建文件时,如果可用存储空间不足或文件数量将大于配置的maxNumberOfFiles

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

PerErrc::kInvalidOpenMode: 传递的模式包含无效的模式组合

5.2.12 Origin枚举

头文件: #include "ara/per/read_accessor.h"

格式: enum class Origin : uint32_t {...};

枚举成员如下:

enum class Origin : uint32_t {

kBeginning= 0, //从文件头开始查找

kCurrent= 1, //从当前位置进行查找

kEnd= 2 //从文件末尾进行查找

};

5.2.13 ReadAccessor类

描述: ReadAccessor用于读取文件数据

5.2.13.1 ReadAccessor::PeekChar函数

函数原型

ara::core::Result<char> PeekChar () const noexcept

描述

返回文件当前位置的字符

参数

返回值

char类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

PerErrc::kIsEof: 当前位置在文件末尾或文件为空

5.2.13.2 ReadAccessor::PeekByte函数

函数原型

ara::core::Result<ara::core::Byte> PeekByte () const noexcept

描述

返回文件位于当前位置的字节

参数

返回值

ara::core::Byte类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

PerErrc::kIsEof: 当前位置在文件末尾或文件为空

5.2.13.3 ReadAccessor::GetChar函数

函数原型

ara::core::Result<char> GetChar () noexcept

描述

返回文件当前位置的字符,使当前位置向前移动

参数

返回值

char类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

PerErrc::kIsEof: 当前位置在文件末尾或文件为空

5.2.13.4 ReadAccessor::GetByte函数

函数原型

ara::core::Result<ara::core::Byte> GetByte () noexcept

描述

返回文件当前位置的字节,使当前位置向前移动

参数

返回值

ara::core::Byte类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

PerErrc::kIsEof: 当前位置在文件末尾或文件为空

5.2.13.5 ReadAccessor::ReadText函数

函数原型

ara::core::Result<ara::core::String> ReadText () noexcept

描述

从当前位置开始,将剩余所有字符读入string中

参数

返回值

ara::core::String类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

PerErrc::kIsEof: 当前位置在文件末尾或文件为空

5.2.13.6 ReadAccessor::ReadBinary函数

函数原型

ara::core::Result<ara::core::Vector<ara::core::Byte>> ReadBinary () noexcept

描述

从当前位置开始,将剩余所有字节读入Binary中

参数

返回值

ara::core::Vector<ara::core::Byte>类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

PerErrc::kIsEof: 当前位置在文件末尾或文件为空

5.2.13.7 ReadAccessor::ReadLine函数

函数原型

ara::core::Result<ara::core::String> ReadLine (char delimiter=’\n’) noexcept

描述

将一行完整的字符读入字符串中,并相应推进当前位置

参数

delimiter分隔符

返回值

ara::core::String类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

PerErrc::kIsEof: 当前位置在文件末尾或文件为空

5.2.13.8 ReadAccessor::GetSize函数

函数原型

uint64_t GetSize () const noexcept

描述

返回当前文件的大小

参数

返回值

uint64_t类型

5.2.13.9 ReadAccessor::GetPosition函数

函数原型

uint64_t GetPosition () const noexcept

描述

返回相对于文件开头的当前位置

参数

返回值

uint64_t类型

5.2.13.10 ReadAccessor::SetPosition函数

函数原型

ara::core::Result<void> SetPosition (uint64_t position) noexcept

描述

设置相对于文件开头的当前位置

参数

文件中的当前位置position

返回值

void类型

如失败返回如下:

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

PerErrc::kInvalidPosition: 给定位置超出文件末尾

5.2.13.11 ReadAccessor::MovePosition函数

函数原型

ara::core::Result<uint64_t> MovePosition (Origin origin, int64_t offset) noexcept

描述

移动文件中相对起始点的当前位置

参数

移动偏移字节的起始点以及偏移量

返回值

uint64_t类型

如失败返回如下:

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

PerErrc::kInvalidPosition: 结果位置小于零或超过文件末尾

5.2.13.12 ReadAccessor::IsEof函数

函数原型

bool IsEof () const noexcept

描述

检查当前位置是否在文件末尾

参数

返回值

bool类型

5.2.14 ReadWriteAccessor类

头文件: #include "ara/per/read_write_accessor.h"

描述: ReadWriteAccessor类继承ReadAccessor类,用于读写文件数据

5.2.14.1 ReadWriteAccessor::SetFileSize函数

函数原型

ara::core::Result<void> SetFileSize (uint64_t size) noexcept

描述

将文件的大小减小到原来的大小,有效地删除超过这个大小的文件的当前内容

参数

设置文件的大小size

返回值

void类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

PerErrc::kInvalidSize: 设置文件的大小大于当前文件的大小

5.2.14.2 ReadWriteAccessor::SyncToFile函数

函数原型

ara::core::Result<void> SyncToFile () noexcept

描述

将当前文件内容同步到物理存储

参数

返回值

void类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

PerErrc::kOutOfStorageSpace: 可用存储空间不足

5.2.14.3 ReadWriteAccessor::WriteText函数

函数原型

ara::core::Result<void> WriteText (ara::core::StringView s) noexcept

描述

将stringView的内容写入文件中

参数

要写入的字符StringView

返回值

void类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

PerErrc::kOutOfStorageSpace: 可用存储空间不足

5.2.14.4 ReadWriteAccessor::WriteBinary函数

函数原型

ara::core::Result<void> WriteBinary (ara::core::Span<const ara::core::Byte> b) noexcept

描述

将Span中的字节内容写入到文件中

参数

要写入的字节的一段字节

返回值

void类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kEncryptionFailed: 存储的数据解密失败

PerErrc::kNotInitialized: 若在ara::core::Deinitialize之后调用此方法

PerErrc::kOutOfStorageSpace: 可用存储空间不足

5.2.14.5 ReadWriteAccessor::operator<<

函数原型

ReadWriteAccessor& operator<< (ara::core::StringView s) noexcept;

描述

将StringView的内容写入文件

参数

要写入的字符StringView

返回值

5.3 更新/删除持久性数据

头文件: #include "ara/per/update.h"

概述: 持久化集群允许更新、重置或删除所有已经安装的键值存储和文件存储。应用程序还可以注册一个回调函数,该函数在任何键值存储和文件存储更新后被调用

5.3.1 RegisterApplicationDataUpdateCallback函数

  函数原型: void RegisterApplicationDataUpdateCallback(std::function<void(const

ara::core::InstanceSpecifier &storage,

ara::core::String version)> appDataUpdateCallback) noexcept

  描述: 注册应用程序数据更新后进行回调

5.3.2 UpdatePersistency函数

函数原型

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

描述

在安装新的 manifest后,更新所有的持久化文件存储和键值存储

参数

返回值

void类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kIntegrityCorrupted: 存储的数据由于结构完整性损坏而无法读取

PerErrc::kValidationFailed: 无法确认存储数据的有效性

PerErrc::kEncryptionFailed: 存储数据的加密或解密失败

PerErrc::kResourceBusy: 如果ResetPersistency目前正在执行,或者

RecoverKeyValueStorage或重置KeyValueStorage目前正在执行的任何键值存储,或者如果RecoverAllFiles或ResetAll文件目前正在执行任何文件存储,或键值存储或文件存储的SharedHandle目前正在使用

PerErrc::kOutOfStorageSpace: 可用存储空间不足

PerErrc::kNotInitialized: 若函数在initialize之前或Deinitialize之后进行调用

5.3.3 ResetPersistency函数

函数原型

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

描述

重置所有文件存储和键值存储,完全删除它们的内容

参数

返回值

void类型

若失败返回如下:

PerErrc::kPhysicalStorageFailure: 访问存储失败

PerErrc::kResourceBusy: 如果ResetPersistency目前正在执行,或者

RecoverKeyValueStorage或重置KeyValueStorage目前正在执行的任何键值存储,或者如果RecoverAllFiles或ResetAll文件目前正在执行任何文件存储,或键值存储或文件存储的

SharedHandle目前正在使用

PerErrc::kNotInitialized: 若函数在initialize之前或Deinitialize之后进行调用

5.4 冗余处理【Redundancy Handling】

头文件: #include "ara/per/recovery.h"

描述:

5.4.1 RecoveryReportKind枚举

格式

enum class RecoveryReportKind : uint32_t {...};

描述

定义报告的恢复操作

枚举成员

enum class RecoveryReportKind : uint32_t {
  kKeyValueStorageRecoveryFailed= 1, //键值存储已损坏,有效副本数量不足
  kKeyValueStorageRecovered= 2, //一个键值存储已损坏,但存在足够数量的有效副本
  kKeyRecoveryFailed= 3, //一组键值对已损坏,有效副本数量不足
  kKeyRecovered= 4, //一组键值对已损坏,但仍然存在足够数量的有效副本
  kFileStorageRecoveryFailed= 5, //文件存储已损坏,有效副本数量不足
  kFileStorageRecovered= 6, //文件存储已损坏,但存在足够数量的有效副本
  kFileRecoveryFailed= 7, //一组文件已损坏,有效副本数量不足
  kFileRecovered= 8 //一组文件已损坏,但仍然存在足够数量的有效副本
};

5.4.2 RegisterRecoveryReportCallback函数

  函数原型: 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< uint8 > reportedInstances)> recovery

ReportCallback) noexcept

  描述: 注册一个持久化的恢复报告回调。此回调可用于安全感知应用程序中,以检测与持久化数据的正确性和存储的可靠性相关的持久化操作

5.5 Handle

概述:本节描述持久化集群的API中使用的句柄类的定义。SharedHandle用于提供共享访问一个KeyValueStorage或者FileStorage;UniqueHandle用于提供非共享访问ReadAccessor或者ReadWriteAccessor文件存储。

5.5.1 SharedHandle

5.5.2 UniqueHandle

5.6 错误信息【Errors

    头文件: #include "ara/per/per_error_domain.h"

概述: 持久化集群基于ara::core::Result进行错误处理;持久性集群支持的报错信息见5.6.1

5.6.1 PerErrc枚举

格式

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

描述

持久化报错定义

枚举成员

enum class PerErrc : ara::core::ErrorDomain::CodeType {
    kStorageNotFound= 1, //传入的参数不匹配时
    kKeyNotFound= 2, //提供的键在键值存储中不存在
    kIllegalWriteAccess= 3, //文件存储配置为只读模式
    kPhysicalStorageFailure= 4, //访问存储失败
    kIntegrityCorrupted= 5, // 存储的数据由于结构完整性损坏而无法读取
    kValidationFailed= 6, //无法确认存储数据的有效性
    kEncryptionFailed= 7, //存储数据的加密或解密失败
    kDataTypeMismatch= 8, //存储值的数据类型与模板类型不匹配
    kInitValueNotAvailable= 9, //没有可用的初始值
    kResourceBusy= 10, //资源当前繁忙
    kOutOfStorageSpace= 12, //可用存储空间不足
    kFileNotFound= 13, //提供的文件在文件存储中不存在
    kNotInitialized= 14, //若在initialize之前或Deinitialize之后进行调用
    kInvalidPosition= 15, //给定位置超出文件末尾
    kIsEof= 16, //当前位置在文件末尾或文件为空
    kInvalidOpenMode= 17, //传递的模式包含无效的模式组合
    kInvalidSize= 18 //设置文件的大小大于当前文件的大小
};

5.6.2 GetPerDomain函数

函数原型

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

描述

返回全局PerErrorDomain对象

参数

返回值

ara::core::ErrorDomain &类型的对象

5.6.3 MakeErrorCode函数

函数原型

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

描述

创建错误代码

参数

PerErrc类型的枚举及与错误相关的数据

返回值

ErrorCode对象

5.6.4 PerException 

构造函数

explicit PerException (ara::core::ErrorCode errorCode) noexcept

描述

构造一个包含错误代码的新持久化异常对象

参数

ara::core::ErrorCode类型的错误码

5.6.5 PerErrorDomain

概述: 继承ErrorDomain类,错误处理需要一个ara::core::ErrorDomain,它可以用来检查通过ara::core::Result返回的错误

定义持久性的错误域。

5.6.5.1 PerErrorDomain::Errc

  using Errc = PerErrc; //误码值枚举的别名

5.6.5.2 PerErrorDomain::Exception

  using Exception = PerException; //异常基类的别名

5.6.5.3 PerErrorDomain::PerErrorDomain函数

构造函数

PerErrorDomain () noexcept

描述

创建一个PerErrorDomain实例

参数

返回值

返回一个PerErrorDomain类型实例

5.6.5.4 PerErrorDomain::Name函数

函数原型

const char * Name () const noexcept override;

描述

返回错误域的名称

参数

返回值

char *类型

5.6.5.5 PerErrorDomain::Message函数

函数原型

const char * Message (CodeType errorCode) const noexcept override

描述

返回与错误相关联的信息

参数

CodeType类型的错误码

返回值

char *类型

5.6.5.6 PerErrorDomain::ThrowAsException函数

函数原型

void ThrowAsException (const ara::core::ErrorCode &errorCode) const override;

描述

抛出与错误码相关联的异常

参数

以引用的传入的错误码信息

返回值

6、服务接口

持久化集群不通过ara::com提供任何服务接口。

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值