4.4. Ceph 对象网关
使用 AWS CLI 进行多部分上传不再导致 Ceph 对象网关崩溃
在以前的版本中,在使用 AWS CLI 进行多部分上传过程中,RGW 会因为校验和算法和报告行为在 AWS S3 和 AWS SDK 中崩溃,特别是新的 CRC64NVME checksum 算法。
在这个版本中,Ceph 对象网关可以安全地处理未知校验和字符串。因此,AWS CLI 不再会导致多部分上传崩溃 Ceph 对象网关。
删除的对象不再出现在存储桶列表中
在以前的版本中,CompleteMultipart
和 AbortMultipart
上传之间的竞争可能会导致结果不一致。因此,对象可能会出现在存储桶列表中,即使它们不再存在。
在这个版本中,AbortMultipart
上传中使用 serializer,并正确删除的对象不再出现在存储桶列表中。
Ceph 对象网关在对象删除过程中不再崩溃
在以前的版本中,在某些情况下,未初始化的 check_objv
参数变量可能会导致在对象删除路径中访问无效的内存地址。因此,会出现分段错误。
在这个版本中,check_objv
参数总是被初始化,对象删除可以如预期完成。
使用 copy-object
的 tail 对象不再错误删除
在以前的版本中,在对象复制到自身时,在 tail 对象上有一个引用计数 invariant。这会导致现有对象已更改,而不是复制。因此,对 tail 对象的引用会被减少。当 refcount on tail 对象丢弃为 0 时,它们会在下一个垃圾回收(GC)周期内被删除。
在这个版本中,在完成 copy-to-self 时,tail 对象上的 refcount 不再被减少。
现在,当添加不正确的 thumbprints 时,AssumeRoleWithWebIdentity
操作会失败
在以前的版本中,由于代码中错误地设置了布尔值标志,即使 CreateOIDCProvider 调用中注册了不正确的 thumbprint,AssumeRoleWithWebIdentity
操作也会成功。因此,当应该失败时,AssumeRoleWithWebIdentity
可以成功。
在这个版本中,当 CreateOIDCProvider
调用中没有找到正确的 thumbprints 时,不会设置布尔值标志。因此,如果最终用户在 CreateOIDCProvider
调用中没有提供正确的 thumbprint,则 AssumeRoleWithWebIdentity
操作现在会如预期失败。
当 RADOS 处于最大池容量时,Ceph 对象网关现在可以删除对象
在以前的版本中,当 RADOS 池接近其最大配额时,Ceph 对象网关无法删除对象。
在这个版本中,即使 RADOS 达到其最大池阈值,Ceph 对象网关也可以删除对象。
用户 Put Object
权限现在在复制的存储桶中被识别
在以前的版本中,在复制的存储桶中无法识别具有 Put Object
访问权限的复制源存储桶的存储桶策略。因此,当访问复制的存储桶时,会发出一个 Access Denied
错误。
在这个版本中,在评估复制的存储桶的权限评估过程中会加载复制源存储桶策略,如预期一样。
Parquet 对象上的大型查询不再发出 内存不足
错误
在以前的版本中,在某些情况下,当在 Parquet 对象上处理查询时,该对象会在大型块中读取。这会导致 Ceph 对象网关将较大的缓冲区加载到内存中,这对于低端机器而言太大。当 Ceph 对象网关与 OSD 进程在一起时,内存会特别影响,这会消耗大量内存。当 内存不足错误时
,操作系统会终止 Ceph 对象网关进程。
在这个版本中,reader-buffer 大小有更新的限制,用于读取列块。默认大小现在为 16 MB,大小可以通过 Ceph 对象网关配置文件来更改。
radosgw-admin
不再由非正数值崩溃
在以前的版本中,当运行 radosgw-admin bucket reshard
命令时,使用 non-positive -num-shards
值(如零或负数)会导致 radosgw-admin
崩溃。
在这个版本中,如果提供了非positive 值,会检查 --num-shards
值会发出错误消息。因此,radosgw-admin
reshard 命令会如预期运行,且无法创建崩溃。
Ceph 对象网关在签名验证过程中不再失败
在以前的版本中,如果 JSON Web Token (JWT)没有使用第一个 x5c 认证进行签名,签名验证会失败。
在这个版本中,为签名验证选择正确的证书,即使不是第一个认证也是如此。因此,签名验证可以如预期完成。
现在,当存储桶版本暂停时,对象会根据生命周期规则集删除
在以前的版本中,由于生命周期代码中的错误,如果存储桶版本处于暂停状态,生命周期进程不会删除对象。因此,对象仍然在存储桶列表中被看到。
在这个版本中,生命周期代码已被修复,现在生命周期过程会根据规则集删除对象,对象不再列在存储桶列表中。
多部分上传现在可以添加对象标签
在以前的版本中,当客户端发送时,Ceph Object Gateway S3 多部分上传对象标签无法识别。因此,在多部分上传过程中,客户端无法在初始对象创建过程中成功应用对象标签。
在这个版本中,对象标签会被收集并存储。现在,可以添加对象标签,并在多部分上传过程中识别。
STS 实现现在支持大于 1024 字节的加密密钥
在以前的版本中,Ceph Object Gateway STS 实现不支持大于 1024 字节的加密密钥。
在这个版本中,支持大于 1024 字节的加密密钥,如预期一样。
bucket 日志记录配置不再允许设置相同的源和目标存储桶
在以前的版本中,设置存储桶日志记录配置时没有检查,验证源和目标存储桶是否不同。
在这个版本中,当源和目标相同时,存储桶日志配置设置将被拒绝。
Ceph 对象网关不再会因为处理错误的 kafka
错误消息而崩溃
在以前的版本中,带有 kafka
消息代理的错误条件没有被正确处理。因此,在某些情况下,Ceph Objet Gateway 会崩溃。
在这个版本中,kafka
错误消息会被正确处理,不会导致 Ceph 对象网关崩溃。
Bugzilla:2327774,Bugzilla:2343980
ACL 存储桶操作现在可以按预期工作
在以前的版本中,本地变量 'uri' shadowed a member 变量的名称相同。因此,存储桶 ACL 操作的子集将失败。
在这个版本中,shadowing local duplicated 变量已被删除,ACL 存储桶操作现在可以正常工作。
目标存储桶现在需要存储桶策略才能将日志写入它们
在以前的版本中,在存储桶日志记录的目标存储桶上运行任何权限检查。因此,任何用户都可以在不需要特定权限的情况下将日志写入目标存储桶。
在这个版本中,必须在目标中添加存储桶策略,以允许特定用户将日志写入它们。
如果本地列在身份验证顺序外部之前,S3 请求不再被拒绝
在以前的版本中,当请求未被本地身份验证引擎成功验证时,S3 请求将被拒绝。因此,当身份验证顺序在外部前具有本地时,使用 OpenStack Keystone EC2 凭证的 S3 请求无法与 Ceph 对象网关进行身份验证
在这个版本中,使用 OpenStack Keystone EC2 凭据签名的 S3 请求成功通过 Ceph 对象网关进行身份验证,即使在外部之前也会列出身份验证。
将对象转换到云时不再发送 Ceph 对象网关内部 HTTP 标头
在以前的版本中,当将对象转换为 Cloud 时,一些 Ceph 对象网关内部 HTTP 标头值会发送到 Cloud 端点。因此,一些 S3 云服务无法识别标头,并且失败了转换或无法恢复对象的操作。
在这个版本中,内部 HTTP 标头不会发送到云,过渡到云可以正常工作。
radosgw-admin bucket logging flush
命令现在可以按预期工作
在以前的版本中,使用 radosgw-admin bucket logging flush
命令会返回下一个 lob 对象名称。因此,在不列出日志存储桶的情况下,用户不知道已刷新的日志对象的名称。
在这个版本中,刷新的对象的正确名称会如预期返回。
升级集群现在可以正确地获取 notification_v2 主题
在以前的版本中,将升级的存储桶通知升级到 notification_v2。因此,notification_v2 中的主题不会按预期检索。
在这个版本中,cluster 升级后会按预期检索 notification_v2 主题。
olh get
现在如预期完成
在以前的版本中,对与版本相关的程序错误的 2023 修复会导致内部代码路径引用对象逻辑头(OLH)不正确的属性名称。因此,在运行 radosgw-admin olh get
命令时会发出错误。
在这个版本中,内部属性名称已被修正,确保可以正常工作。
Swift 容器列表现在报告对象上次修改的时间
在以前的版本中,Ceph Object Gateway Swift 容器列表实现缺少发送 last_modified
JSON 字段的逻辑。因此,Swift 容器列表不会报告对象最后一次修改的时间。
在这个版本中,last_modified
JSON 字段已添加到 Swift 容器列表响应中,确保正确报告对象修改时间。
Ceph 对象网关现在从其 checksum 类型特定的标头和跟踪器识别额外的校验和
在以前的版本中,aws-sdk-go-v2
checksum 的行为与其他 SDK 不同,因为它没有发送 x-amz-checksum 或
,并且永远不会包含 x-
amz-sdk-checksumx-amz-decoded-content-length
,尽管 AWS 文档需要它。因此,发送时无法识别额外的校验和,一些 AWS 数据块的请求无法检查解码的内容长度,并显示 InvalidArgument
错误。
在这个版本中,Ceph 对象网关可以从其 checksum-type 特定标头或跟踪器识别额外的校验和。Ceph 对象网关不再测试并断言已解码内容长度,因为块签名计算不必要。
现在,在 oidc
命名空间中创建 AssumeRoleWithWebIdentity
调用的 shadow 用户
在以前的版本中,使用不正确的方法加载存储桶统计,这会导致在 oidc
命名空间中不会创建 AssumeRoleWithWebIdentity
调用的 shadow 用户。因此,用户无法区分 shadow 用户和本地 rgw
用户。
在这个版本中,存储桶统计会被正确加载,用户在 oidc
命名空间中正确创建用户。用户现在可以正确地识别与进行 AssumeRoleWithWebIdentity
调用的联邦用户的 shadow 用户。