4.4. Ceph 文件系统
现在,在创建快照时为快照目录更新 mtime 和 change_attr
在以前的版本中,libcephfs
客户端不会更新 mtime,并在创建或删除 snaps 时更改属性。因此,NFS 客户端无法正确列出 CephFS NFS-Ganesha 导出中的 CephFS 快照。
在这个版本中,当快照被创建、删除和重命名时,mtime 和 change_attr 会为快照目录 .snap
更新。正确的 mtime 和 change_attr 确保列出快照不会返回过时的快照条目。
cephfs-top -d [--delay]
选项只接受整数值,范围介于 1 到 25
在以前的版本中,由于一些新的 curses 方法,cephfs-top -d [--delay]
选项无法正常工作。新的 curses 方法只接受整数值,因为在从 helper 功能获取浮点值时抛出异常。
在这个版本中,cephfs-top -d [--delay]
选项只接受整数值,范围在 1 到 25 之间,cephfs-top
实用程序可以正常工作。
在 unlink 完成后创建相同的 dentries 不会使 MDS 守护进程崩溃
在以前的版本中,在 unlink 和 create 操作之间有一个 racy 条件。因此,如果因为任何原因导致之前的未链接请求延迟,并且在此期间尝试创建相同的 dentries,则会导致 MDS 守护进程崩溃或新创建失败,但写入的内容将会丢失。
在这个版本中,用户需要确保在未链接完成前等待同一 dentries 时出现冲突。
运行 ceph nfs cluster info CLUSTER_ID
命令时,不存在的集群不再显示。
在以前的版本中,当运行 ceph nfs cluster info CLUSTER_ID命令时
,不会检查集群是否存在,因为这会显示不存在的集群的信息,如 virtual_ip
和 backend
、null 和空。
在这个版本中,'ceph nfs cluster info CLUSTER_ID' 命令检查集群是否存在,在查询 不存在的集群时,不会抛出 Error ENOENT: 集群。
snap-schedule 模块不再错误地引用 volumes 模块
在以前的版本中,在尝试获取子卷路径时,snap-schedule 模块会错误地引用 volumes 模块。由于使用了不正确的 volumes 模块和远程方法名称,因此会显示 ImportError
回溯信息。
在这个版本中,未测试且不正确的代码会被重新处理,方法是通过 snap-schedule CLI 接口方法调用的。现在,在尝试添加子卷级别调度时,snap-schedule 模块可以正确地解析子卷路径。
整数溢出和 ops_in_flight
值溢出不再发生
在以前的版本中,_calculate_ops
将依赖于配置选项 filer_max_purge_ops
,可即时修改。因此,如果 ops_in_flight
的值设为 uint64
的功能,则会有一个整数溢出,这会使 ops_in_flight
大于 max_purge_ops
,且无法返回合理的值。
在这个版本中,在 ops_in_flight
中使用 filer_max_purge_ops
会被忽略,因为它已在 Filer::_do_purge_range ()
中使用。整数溢出和 ops_in_flight
值溢出不再发生。
无效的 OSD 请求不再提交到 RADOS
在以前的版本中,当第一个 dentry 有足够的元数据且大小大于 max_write_size
时,无效的 OSD 请求将提交到 RADOS。因此,RADOS 会失败无效的请求,从而导致 CephFS 为只读。
在这个版本中,所有 OSD 请求都会填充验证的信息,然后再将其发送到 RADOS,且没有无效的 OSD 请求会导致 CephFS 为只读。
MDS 现在处理所有 stray 目录条目。
在以前的版本中,MDS stray 目录处理逻辑中的一个错误会导致 MDS 跳过处理几个 stray 目录条目。因此,MDS 不会处理所有 stray 目录条目,从而导致已删除的文件没有释放空间。
在这个版本中,stray 索引指针已被修正,以便 MDS 处理所有 stray 目录。
附加到 Ceph 文件系统的池的池级别快照被禁用
在以前的版本中,池级 snaps 和 mon-managed snaps 具有自己的 snap ID 命名空间,这会导致 ID 间的冲突,Ceph Monitor 无法唯一标识一个 snap,因为它是池级 snap 还是 mon-managed snap。因此,在引用 ID 时会删除错误的 snap,这存在于池级 snaps 和 mon-managed snaps 集合中。
在这个版本中,附加到 Ceph 文件系统的池级别 snaps 被禁用,且不会发生池 ID 冲突。因此,当 CephFS snap 被删除时,不会发生意外的数据丢失。
客户端请求不再在 MDS 和客户端之间无限期地退回
在以前的版本中,Ceph 协议在 CephFS 客户端和 MDS 之间客户端请求之间存在不匹配。因此,在 CephFS 客户端和 MDS 间通信时,对应的信息会被截断或丢失,客户端请求会在 MDS 和客户端之间无限期地退回。
在这个版本中,客户端请求的协议中相应成员的类型被修正,方法是使它们使用相同的类型,并且新代码与旧的 Ceph 兼容。客户端请求不会无限期地在 MDS 和客户端之间退回,并在被充分重试后停止。
在 Ceph Manager 守护进程服务中添加了代码 assert 来检测元数据崩溃
在以前的版本中,管理器守护进程服务会为运行 Postgres 等工作负载引入与快照相关的元数据崩溃类型。
在这个版本中,在管理器守护进程服务中添加了代码 assert,它会在检测到新崩溃时触发。这降低了损坏的增加,并允许收集日志来确定原因。
如果在集群升级到 Red Hat Ceph Storage 6.1 后守护进程崩溃,请联系红帽支持以分析和纠正操作。
由于 sessionmap 版本不匹配的问题,MDS 守护进程不再崩溃
在以前的版本中,当 MDS 故障转移发生时,MDS 会话映射日志无法正确保留。因此,当新的 MDS 尝试重播日志时,会话映射日志会与 MDCache 中的信息不匹配,或者来自其他日志日志的信息,从而导致 MDS 守护进程触发崩溃本身。
在这个版本中,尝试强制重播 sessionmap 版本而不是崩溃 MDS 守护进程会导致因为 sessionmap 版本不匹配的问题而崩溃 MDS 守护进程。
在等待 cap revocation confirmment 时 MDS 不再无限期卡住
在以前的版本中,如果 __setattrx
() 失败,_write ()
将保留 CEPH_CAP_FILE_WR
caps 引用,MDS 会无限期卡住等待上限的撤销确认。它还会导致其他客户端的请求无限期卡住。
在这个版本中,如果 __setattrx ()
失败,且 MDS 的上限撤销请求没有卡住,则会发布 CEPH_CAP_FILE_WR
caps reference。