对象版本锁
概述
对象版本锁是基于对象元数据实现的 WORM,针对对象的每个版本,系统都会维护一份对象版本锁信息。对象版本锁信息包括如下内容:
{
mode: i8,
time: u32,
hold: bool,
}
我们将这些信息分为两个部分:保留信息(Retention)与合法持有信息(Legal-Hold)。详细说明如下:
字段 | 类型 | 说明 |
---|---|---|
mode |
String |
保留信息(Retention)。用以说明对象版本锁的模式,分为以下两种:
|
time |
String |
保留信息(Retention),对象保留截止时间对应的时间戳,在这个时间之前,对象受到保护。 |
hold |
Bool |
合法持有信息,表明是否持有该对象。
|
删除对象
保留信息 Retention 和合法持有信息 Legal-Hold 均对对象的保护有影响,当删除对象时,需要同时考虑这两部分信息。
-
示例一:当
mode
为GOVERNANCE
,time
为2023-05-01T00:00:00Z
,hold
为true
时。假设1:现在的时间为
2023-04-27T00:00:00Z
,则对象受GOVERNANCE
模式的保护,不能被删除;同时hold
为true
,也要求对象不能被删除。因此,该情形下,对象不能被删除。假设2:现在的时间为
2023-05-27T00:00:00Z
,则对象不受GOVERNANCE
模式的保护,但同时,因为hold
为true
,要求对象不能被删除。因此,在该情形下,对象不能被删除。 -
示例二:当
mode
为GOVERNANCE
,time
为2023-05-01T00:00:00Z
,hold
为false
时。假设1:现在的时间为
2023-04-27T00:00:00Z
,则对象受GOVERNANCE
模式的保护,不能被删除;同时hold
为false
,对象可以删除。因为没共同满足删除条件,因此,对象仍然不能被删除。假设2:现在的时间为
2023-05-27T00:00:00Z
,则对象不受GOVERNANCE
模式的保护,能被删除;同时hold
为false
,对象可以被删除。同时满足两个删除条件,因此,对象能被删除。
说明 |
---|
通过上面的示例,我们知道,当保留信息 Retention 和合法持有信息 Legal-Hold 均允许对象被删除时,对象才能被删除。 |
修改对象版本锁
说明 |
---|
如需修改已存在的对象的对象版本锁信息,需要使用 S3 的接口来实现。具体可参考 S3 兼容接口相关内容。 |
针对一个具体的对象,其对象版本锁信息中的 hold
字段,可以随时修改为 true
或 false
。但是 Retention 信息不能随意修改,如需修改,需满足如下条件。
-
当
mode
为GOVERNANCE
时。-
当前时间 <=
time
时,默认只能延长保留时间time
。若需修改mode
或者延长保留时间time
,则可使用 S3 的 bypass 相关请求头实现。 -
当前时间 >
time
时,mode
与time
均可以随意修改。
-
-
当
mode
为COMPLIANCE
时。-
当前时间 <=
time
时,mode
不可以修改,且保留时间time
只能延长。 -
当前时间 >
time
时,mode
与time
均可以随意修改。
-
-
mode
与time
需同时设置,不能仅设置其一。