1.20 TTL功能

优质
小牛编辑
125浏览
2023-12-01

TTL功能

在删除或覆盖object时,FDS会先将object副本移动至trash,以便找回数据,防止误删除。

FDS TTL(Time-to-Live)功能能够设置object的生存周期,其粒度为bucket级别,即可以为一个bucket设置TTL,从而自动定时的清理指定的object。

过期规则

Bucket中Object过期的定义: 当前时间 > Object上传时间 + expiration

Trash中Object过期的定义 : 当前时间 > Object移入Trash的时间 + nonCurrentVersionExpiration

符合过期规则的Object都会被标记为过期(不一定立刻删除),不管它实在TTL设置之前传入还是在TTL设置之后传入。

TTL配置方法

只有bucket owner可以配置TTL。

通过HTTP PUT请求/{bucketName}?lifecycle来为某个bucket设置TTL,要设置的内容放在报文体中。

通过HTTP GET请求/{bucketName}?lifecycle来查询某个bucket设置TTL。

目前只能通过python命令行工具设置TTL,方式为 fds -m put -b $BUCKET_NAME --lifecycle $TTL_CONFIG,格式如下。

控制台配置TTL:

点击Bucket的生命周期 Bucket生命周期

配置TTL规则: 规则

配置格式

TTL配置为json字符串,类似

{
  "rules": [ // rule列表
    {
      "enabled": true,     // 是否启用该rule,为false时忽略该rule
      "prefix": "images/", // 前缀,若object名不满足该前缀时,忽略该rule
      "actions": {         // action列表,当object匹配该规则时,开始执行actions。action分为以下几类:
        "nonCurrentVersionExpiration": { // 若trash中的旧版本存在超过指定时限,则将该旧版本彻底删除
          "days": 7        // float型,单位为天
        },
        "expiration": {    // 若object存在超过指定时限,则将该object移至trash
          "days": 30
        },
        "abortIncompleteMultipartUpload": { // 若分片上传任务执行时间超过指定时限仍未完成,则abort该分片上传任务
          "days": 7
        }
      }
    },
    {
      "enabled": true,
      "prefix": "log/",
      "actions": {
        "nonCurrentVersionExpiration": {
          "days": 7
        },
        "expiration": {
          "days": 30
        }
      }
    },
    ...
  ]
}

可以通过配置不同的prefix来为各个“目录”下的object设置不同的生存周期。若一个object名同时满足多个rule,则优先选择prefix最长的rule进行处理。

其他事项

  • object实际生存时间会和设置的TTL有误差,可能会晚于指定时间1~2天才被删除。但不会被提前删除。
  • 如果不设置TTL,则永远保留用户上传的object;trash中的副本会在7天后被删除;未complete的分片上传任务会在7天后abort。
  • 目前并不是所有集群都上线了TTL功能,之后会陆续更新其他集群,详情可在FDS支持群里询问。

FAQ

  1. 修改多久配置会生效? 从FDS下次TTL扫描开始生效,目前FDS不能保证当天生效,这个问题后期会改善。
  2. 删除a.txt之后,再删除a.txt,是否重新开始计算? 这个问题的关键是要理解FDS TTL的过期策略。Trash中Object过期的定义 : 当前时间 > Object移入Trash的时间 + nonCurrentVersionExpiration。 因为新的a.txt移入Trash中的时间发生了改变,过期时间也会重新计算。
  3. 以prefix开头的对象和文件夹都会删除吗? 首先,FDS并没有文件夹的概念,文件夹只是只是一种抽象的理解方式,在FDS中,只是以文件夹名字为prefix的对象。 例如,bucket下面有如下内容: ddd/a.txt ddd/abc/a.txt ddda.txt ddd.txt dddb.txt 如果TTL的prefix设置为ddd,则上述对象都会被删除。