}
}
- if (enable_versioning) {
+ if (versioning_status == VersioningEnabled) {
s->bucket_info.flags |= BUCKET_VERSIONED;
s->bucket_info.flags &= ~BUCKET_VERSIONS_SUSPENDED;
- } else {
+ } else if (versioning_status == VersioningSuspended) {
s->bucket_info.flags |= (BUCKET_VERSIONED | BUCKET_VERSIONS_SUSPENDED);
+ } else {
+ return;
}
op_ret = store->put_bucket_instance_info(s->bucket_info, false, real_time(),
uint32_t op_mask() override { return RGW_OP_TYPE_READ; }
};
+enum BucketVersionStatus {
+ VersioningNotChanged = 0,
+ VersioningEnabled = 1,
+ VersioningSuspended =2,
+};
+
class RGWSetBucketVersioning : public RGWOp {
protected:
- bool enable_versioning;
+ int versioning_status;
bufferlist in_data;
public:
- RGWSetBucketVersioning() : enable_versioning(false) {}
+ RGWSetBucketVersioning() : versioning_status(VersioningNotChanged) {}
int verify_permission() override;
void pre_exec() override;
RGWSetBucketVersioningParser() {}
~RGWSetBucketVersioningParser() override {}
- int get_versioning_status(bool *status) {
+ int get_versioning_status(int *status) {
XMLObj *config = find_first("VersioningConfiguration");
if (!config)
return -EINVAL;
- *status = false;
+ *status = VersioningNotChanged;
XMLObj *field = config->find_first("Status");
if (!field)
return 0;
+ *status = VersioningSuspended;
string& s = field->get_data();
if (stringcasecmp(s, "Enabled") == 0) {
- *status = true;
+ *status = VersioningEnabled;
} else if (stringcasecmp(s, "Suspended") != 0) {
return -EINVAL;
}
in_data.append(data, len);
}
- r = parser.get_versioning_status(&enable_versioning);
+ r = parser.get_versioning_status(&versioning_status);
return r;
}