牛虻与专家

导航

 
RGW 添加 AppendObject API,可以以追加写的方式上传对象.

特性出至:rgw: Add append object api. #22755 (https://github.com/ceph/ceph/pull/22755)

  • 用 AppendObject 操作上传的对象叫 appendable object,用 PutObject 操作上传的对象叫 normal object
  • 对已存在的 normal object 进行 AppendObject 操作会返回错误;对已存在的 appendable object 进行 PutObject 操作会覆写该对象,且对象的类型变为 normal object
  • appendable object 通过 multisite 被同步到对端集群后,对应目标对象的类型会变为 normal object,但是源对象还是 appendable object,仍可以进行 AppendObject 操作;
  • 当存储桶的版本控制功能开启或暂停时,不能对存储桶内对象使用 AppendObject 操作

 s3 appedn API: 

   PUT /{bucket}/{object}?append&position= HTTP/1.1

  append 参数: 用于指定这是一个AppendObject操作。

  position 参数用于指定从何处进行追加。首次追加操作的position必须为0,后续追加操作的position是Object的当前长度。

例如,第一次AppendObject请求指定position值为0,content-length是65536,则第二次AppendObject需要指定position为65536。

每次操作成功后,响应消息头x-rgw-next-append-position也会返回下一次追加的位置

 

错误信息:

{ ERR_POSITION_NOT_EQUAL_TO_LENGTH, {409, "PositionNotEqualToLength"}},
{ ERR_OBJECT_NOT_APPENDABLE, {409, "ObjectNotAppendable"}},
{ ERR_INVALID_BUCKET_STATE, {409, "InvalidBucketState"}},

  • s3 apped debug: 使用append 接口后会触发GC机制,导致过一段时候后,创建的对象会被删除。(The append operation will trigger the garbage collection mechanism) https://tracker.ceph.com/issues/42670

 

RGW append实现的不足:

  • 目前ceph append api 只支持对添加了append标签的对象进行追加操作。但是不支持对原有对象automic object 和multpart 对象进行append 操作。 

        依据目前ceph 社区提供的append api 接口可以进行内部的扩展,是可以做到兼并原来对象的append操作。

 

append 的操作限制:

  • 多版本开启后,不支持追加操作。
  • 开启压缩加密后,追加操作并未进行实际的加密压缩,而是跳过加密和压缩执行过程,进行追加操作。
posted on 2019-09-22 14:01  牛虻&专家  阅读(914)  评论(0编辑  收藏  举报