第三章: 持久性
PPS在运行时是在内存中维护它的对象的。如有需要,它将:
(1)将其对象保存到持久存储中,可以在运行时按需保存,也可以在关闭时保存
(2)在启动时恢复其对象,或者立即恢复,也可在第一次加载时(延迟加载)
( 注:PPS也可以用于创建很少(或从未)被发布或被订阅,但需要持久性的对象。“关机”指的是PPS服务器进程的有序退出。有序退出可以由SIGTERM、SIGINT或SIGQUIT触发。由于其他信号(例如SIGKILL、SIGSEGV和SIGABRT)不会导致有序退出,因此它们不会构成持久性目的的“关闭”。)
一:持久存储
PPS支持跨重启的持久存储。这种存储需要可靠的文件系统。
PPS使用的底层持久存储依赖于一个可靠的文件系统,例如:
(1) disk — Power-Safe filesystem
(2)NAND Flash — ETFS filesystem
(3)Nor Flash — FFS3 filesystem
(4)other — customer-generated filesystem
如果需要将对象持久化到专用的硬件,比如小型NVRAM(不支持文件系统),那么可以创建自己的客户端,订阅要保存的PPS对象。在每个对象更改时,PPS将通知您的客户端,允许客户端实时更新NVRAM。
持久性和文件系统的限制
存储PPS对象的持久性目录使用与PPS根目录完全相同的目录层次结构。因此,对象持久性受到路径和文件名长度以及底层文件系统的目录嵌套限制的限制。
例如,QNX Neutrino NFS服务器支持最大嵌套深度为15个级别。此限制也适用于使用此服务的PPS。
二:保存对象
在关闭时,PPS总是将修改后的对象保存在一个持久的文件系统中。你还可以通过调用对象上的fsync()接口来强制PPS在任何时候保存对象。
当PPS将其数据保存在持久文件系统中时,它将每个对象保存在自己的文件中,保存在复制PPS对象树的层次结构的目录层次结构中。例如,对于默认配置,PPS对象/ PPS /example/object1存储在/var/pps/example/object1.
PPS目录的默认位置是/var/pps.可以使用PPS -p选项更改此位置.
您 可以编辑PPS文件的持久版本。如果安全性对您的系统很重要,您应该让PPS将其数据保存在加密的文件系统中。
您可以设置对象和属性限定符,使PPS不保存特定的对象或属性。
为持久存储更改目录
root PPS对象树(默认为/ PPS)看起来像这样:
PPS从持久化树(默认情况下为/var/PPS)填充根对象树,其中存储您希望持久化的对象和属性。
当需要要指定一个不同的目录作为持久存储时:
(1)创建您自己的持久性目录(如mkdir /myobjects)。
(2)从不同的挂载点(例如/fs/ PPS)启动PPS服务,并指定新的持久性目录:
pps -m /fs/pps -p /myobjects
三:加载对象
当PPS启动时,它会立即从持久文件系统上以已编码的文件名构建目录层次结构。
在其默认配置中,PPS到第一次访问某个文件时才会延迟加载目录中的对象。访问对象可以通过对PPS对象的进行open()调用,也可以是对PPS目录的进行readdir()调用。
您可以通过在启动时提供-l(“el”)选项来更改配置,以拥有PPS。