4.6. Ceph 对象网关
admin topic list 命令不再显示自动生成的内部主题
在以前的版本中,由于用户可以看到比创建的内容更多的主题,因此自动生成的内部主题通过 topic list 命令暴露给用户。
在这个版本中,内部生成的主题不会在 admin topic list 命令中显示,用户现在只会看到预期的主题列表。
弃用的 bucket name 字段不再显示在 topic list 命令中
在以前的版本中,如果拉取模式通知(pubsub
),通知存储在存储桶中。但是,虽然此模式已弃用,但 topic list 命令仍会显示空存储桶名称字段。
在这个版本中,空存储桶名称字段会被删除。
现在,通知会在生命周期转换中发送
在以前的版本中,在转换时分配的逻辑(与过期不同)丢失。因此,在转换时不会看到通知。
在这个版本中,添加了新的逻辑,通知会在生命周期转换时发送。
RGWCopyObjRequest
已被修复,重命名操作可以正常工作
在以前的版本中,在 zipper 转换后,RGWCopyObjRequest
初始化错误,会破坏重命名操作。因此,许多 rgw_rename ()
场景无法复制源对象,并且因为二级问题,即使副本失败也会删除源。
在这个版本中,RGWCopyObjRequest
被修正,并为不同的重命名操作添加了几个单元测试情况。
Ceph 对象网关无法再被静默访问
在以前的版本中,代表 Ceph 对象网关角色的变量在初始化前被访问,从而导致 segfault。
在这个版本中,操作会被重新排序,且没有非非法的访问。角色根据需要强制执行。
现在,每个错误的 CSV 对象结构显示错误消息
在以前的版本中,带有未关闭的双引号的 CSV 文件将导致 assert,后跟崩溃。
在这个版本中,引入了一个错误消息,其中包含每个错误的 CSV 对象结构。
在 Ceph 仪表板中查询与用户相关的信息时,用户不再遇到 'user not found' 错误
在以前的版本中,在 Ceph 仪表板中,最终用户无法从 Ceph 对象网关检索与用户相关的信息,因为仪表板无法识别的完整 user_id
中存在命名空间,从而导致出现 "user not found" 错误。
在这个版本中,一个完全构建的用户 ID,其中包括 租户
、namespace
和 user_id
,并在将 GET 请求发送到 admin ops 以获取用户信息时单独返回每个字段。最终用户现在可以检索正确的 user_id
,可用于进一步从 Ceph 对象网关获取其他用户相关信息。
Ceph 对象网关现在传递带有新流编码表单格式格式良好的有效负载的请求
在以前的版本中,Ceph 对象网关无法识别 STREAMING-AWS4-HMAC-SHA256-PAYLOAD
和 STREAMING-UNSIGNED-PAYLOAD-TRAILER
编码表单,从而导致请求失败。
在这个版本中,用来识别、解析和适用的逻辑,验证为新编码表单提供的新尾部请求签名是否已实现。Ceph 对象网关现在通过新流编码形式格式良好的有效负载来传递请求。
现在,对 radosgw admin bucket 和 bucket reshard stat 计算的 check stat 计算现在都正确
在以前的版本中,由于代码更改,radosgw-admin bucket 检查 stat 计算和 bucket reshard stat 计算在有从未指定版本转换为版本化的对象时不正确。
在这个版本中,计算已被修正,不再生成不正确的存储桶 stat 输出。
在多部分上传失败时,tail 对象不再丢失
在以前的版本中,在多部分上传过程中,如果因为场景(如超时)上传部分失败,且上传被重启,则第一次尝试清理会在后续尝试中删除 tail 对象。因此,生成的 Ceph 对象网关多部分对象会损坏,因为缺少一些 tail 对象。它将响应 HEAD 请求,但在 GET 请求期间失败。
在这个版本中,代码会正确清理第一次尝试。生成的 Ceph 对象网关多部分对象不再损坏,可由客户端读取。
CompleteMultipartUpload
及其通知中的 ETag 值现在存在
在以前的版本中,与通知相关的更改会导致与完成多部分上传对应的对象句柄,使其包含生成的 ETag。因此,因为 CompleteMultipartUpload
及其通知的结果,没有进行多部分上传的 ETags。(计算并存储了正确的 ETag,因此后续操作包含正确的 ETag 结果。)
在这个版本中,CompleteMultipartUpload
刷新对象,并按预期打印它。CompleteMultipartUpload
及其通知中存在 ETag 值。
通过 swift 列出容器(bucket)不再会导致 Ceph 对象网关崩溃
在以前的版本中,swift-object-storage
调用路径缺少调用,以使用对应的存储桶更新对象句柄(zipper backport 问题)。因此,当为同一 bucket 配置 S3 网站时,通过 swift 列出容器(bucket)会导致 Ceph 对象网关崩溃。
在这个版本中,添加了所需的 zipper 逻辑,且崩溃不再发生。
在没有生命周期策略的存储桶上处理生命周期不会崩溃
在以前的版本中,尝试手动处理没有生命周期策略的存储桶中的生命周期,从而导致 radosgw-admin 程序崩溃。
在这个版本中,在句柄操作前检查 null 存储桶句柄,以避免崩溃。
datapool 的区详情现在可以修改
rgw::zone_create ()
函数会在创建区域时初始化默认放置目标和池名称。此功能以前还用于带有 exclusive=false
的 radosgw-admin 区集。但是,zone set
不允许修改 STANDARD 存储类的 data_pool。
在这个版本中,如果 default-placement 目标已存在,并且 datapool 的区详情可以如预期修改,则不应覆盖 default-placement 目标。
浮点数的 modulo 操作现在返回正确的结果
在以前的版本中,对浮点数的 modulo 操作返回错误的结果。
在这个版本中,SQL 引擎已被改进,以处理浮点的 modulo 操作并返回正确的结果。
SQL 语句正确地返回对不区分大小写的布尔值表达式的结果
在以前的版本中,SQL 语句包含带有声明部分大写字母的布尔值表达式,从而导致错误的解释和错误的结果。
在这个版本中,对语句的解释区分大小写,因此对于任何情况都会返回正确的结果。
SQL 引擎返回正确的 NULL 值
在以前的版本中,SQL 语句包含来自 NULL 的 cast 到类型,因此返回错误的结果,而不是返回 NULL。
在这个版本中,SQL 引擎标识来自 NULL 的 cast,并返回 NULL。
eTags 值现在存在于 CompleteMultipartUpload
及其通知中
在以前的版本中,与通知相关的更改会导致对象句柄(与完成多部分上传对应)不包含生成的 ETag。因此,CompleteMultipartUpload
及其通知没有 ETags。(计算并存储了正确的 ETag,因此后续操作包含正确的 ETag 结果。)
在这个版本中,CompleteMultipartUpload
刷新对象,并按预期打印它。ETag 值现在存在于 CompleteMultipartUpload
及其通知中。
在对象名称中发送带有内嵌反斜杠(/)的工作负载到 cloud-sync 不再会导致同步失败
在以前的版本中,当工作负载在名称中包含带有嵌入式反斜杠(/)的对象时,云同步期间对象路径的 URL 转义会导致同步失败,即使用虚拟目录路径时。
在这个版本中,不正确的转义已被修正,在对象名称中带有嵌入式反斜杠(/)的工作负载可以按预期发送到 cloud-sync。
包含布尔表达式返回布尔值类型的 SQL 语句
在以前的版本中,包含布尔值表达式(投射)的 SQL 语句将返回字符串类型而不是布尔值类型。
在这个版本中,引擎会根据声明语法将字符串识别为布尔值表达式,引擎可以成功返回布尔值类型(true/false)。
现在,工作调度程序在 should_work
功能中考虑下一个日期
在以前的版本中,should_work
功能中使用的逻辑决定了生命周期是否应该在当前时间启动运行,不会考虑下一个日期。因此,任何自定义工作时间 "XY:TW-AB:CD" 都会在 AB < XY 时中断生命周期处理。
在这个版本中,工作调度程序会考虑下一个日期,各种自定义生命周期工作调度现在可以正常工作。
merge_and_store_attrs ()
方法不再导致属性更新操作失败
在以前的版本中,merge_and_store_attrs ()
方法中有一个错误,它处理协调更改以及更改的存储桶实例属性,从而导致一些属性更新操作静默失败。因此,存储桶子集中的一些元数据操作会失败。例如,存储桶所有者更改会在设置了速率限制的存储桶上失败。
在这个版本中,merge_and_store_attrs ()
方法已被修复,所有受影响的场景现在可以正常工作。
checksum 和 malformed trailers 不再导致崩溃
在以前的版本中,在 java AWS4Test.testMultipartUploadWithPauseAWS4
期间 AWSv4ComplMulti
异常会导致一些客户端输入崩溃,特别是使用 checksum trailers 的崩溃。
在这个版本中,一个例外处理程序在 do_aws4_auth_completion ()
中实施。checksum 和 malformed trailers 不再导致崩溃。
改进的块边界检测的实现
在以前的版本中,不会处理 0-length 尾部块边界格式的有效格式。因此,Ceph 对象网关无法正确识别尾部块的开头,从而导致 403 错误。
在这个版本中,实现了改进的块边界检测,在匿名访问情况下不再发生意外的 403 错误。
Kafka 消息和空闲超时的默认值不再会导致挂起
在以前的版本中,Kafka 消息和空闲超时的默认值会在等待 Kafka 代理时挂起。
在这个版本中,超时会被调整,它不再挂起。
删除存储桶标记不再失败
在以前的版本中,RADOS SAL merge_and_store_attrs ()
中存在一个不正确的逻辑,会导致删除的属性不进行材料化。这也会影响 DeleteLifecycle
。因此,在某些代码路径中,纯属性删除不会生效。
在这个版本中,存储 bucket 标签的逻辑使用 RADOS SAL put_info ()
而不是 merge_and_store_attrs ()
。删除存储桶标记现在可以如预期成功。
现在,S3 PutACL
和 ACL 更改会正确复制对象 mtime
在以前的版本中,S3 PutACL
操作不会更新对象 mtime
。因此,应用后 ACL 更改不会复制,因为基于时间戳的对象更改检查会错误地返回 false。
在这个版本中,S3 PutACL
和 ACL 会更改对象 mtime
会正确复制。
现在,所有转换情况都可以分配通知
在以前的版本中,因为池转换不会发送通知,在转换时分配通知的逻辑被错误地范围到云转换情况。
在这个版本中,通知分配被添加到池转换范围中,所有转换情况都可以分配通知。
year 2106 后 RetainUntilDate
不再截断,并适用于新的 PutObjectRetention
请求
在以前的版本中,PutObjectRetention
请求在年 2106后指定 RetainUntilDate
,从而导致之前用于对象锁定强制的日期。这不会影响 'PutBucketObjectLockConfiguration' 请求,其中指定持续时间(以天为单位)。
在这个版本中,RetainUntilDate
会保存并按预期工作,用于新的 PutObjectRetention
请求。之前存在的请求不会自动修复。要修复现有请求,请通过基于 x-amz-object-lock-retain-until-date
来使用 header Object
请求来识别请求,并使用 RetainUntilDate
重新保存。
如需更多信息,请参阅 S3 放置对象保留
bucket 生命周期处理规则不再停滞
在以前的版本中,每个 shard bucket-lifecycle 规则的枚举规则包含与并发删除存储桶生命周期规则相关的逻辑错误。因此,分片可能会进入一个状态,这会停止处理该分片,从而导致无法处理一些存储桶生命周期规则。
在这个版本中,枚举可以跳过删除的条目,与这个问题相关的生命周期处理停滞已解决。
删除版本存储桶中的对象会导致统计不匹配
由于版本存储桶混合使用当前和非当前对象,因此删除对象可能会导致在本地和远程站点上的 bucket 和用户统计差异。这不会导致在任一站点上出现对象泄漏,只是统计信息。