CephFS does not support disk space reservation. The only flags supported are
`FALLOC_FL_KEEP_SIZE` and `FALLOC_FL_PUNCH_HOLE`.
+>=19.2.2
+
+* RGW: PutObjectLockConfiguration can now be used to enable S3 Object Lock on an
+ existing versioning-enabled bucket that was not created with Object Lock enabled.
+
>=19.0.0
* RGW: GetObject and HeadObject requests now return a x-rgw-replicated-at
void RGWPutBucketObjectLock::execute(optional_yield y)
{
- if (!s->bucket->get_info().obj_lock_enabled()) {
- s->err.message = "object lock configuration can't be set if bucket object lock not enabled";
+ if (!s->bucket->get_info().versioning_enabled()) {
+ s->err.message = "Object lock cannot be enabled unless the "
+ "bucket has versioning enabled";
ldpp_dout(this, 4) << "ERROR: " << s->err.message << dendl;
op_ret = -ERR_INVALID_BUCKET_STATE;
return;
}
op_ret = retry_raced_bucket_write(this, s->bucket.get(), [this, y] {
+ if (!s->bucket->get_info().obj_lock_enabled()) {
+ // automatically enable object lock if the bucket is versioning-enabled
+ if (!s->bucket->get_info().versioning_enabled()) {
+ s->err.message = "Object lock cannot be enabled unless the "
+ "bucket has versioning enabled";
+ ldpp_dout(this, 4) << "ERROR: " << s->err.message << dendl;
+ return -ERR_INVALID_BUCKET_STATE;
+ }
+ s->bucket->get_info().flags |= BUCKET_OBJ_LOCK_ENABLED;
+ }
+
s->bucket->get_info().obj_lock = obj_lock;
op_ret = s->bucket->put_info(this, false, real_time(), y);
return op_ret;