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