if (!empty_sync_policy()) {
encode_json("sync_policy", *sync_policy, f);
}
+ if (obj_lock_enabled()) {
+ encode_json("obj_lock", obj_lock, f);
+ }
}
void RGWBucketInfo::decode_json(JSONObj *obj) {
if (!sp.empty()) {
set_sync_policy(std::move(sp));
}
+ if (obj_lock_enabled()) {
+ JSONDecoder::decode_json("obj_lock", obj_lock, obj);
+ }
}
void RGWUserInfo::generate_test_instances(list<RGWUserInfo*>& o)
using namespace std;
+void DefaultRetention::decode_json(JSONObj *obj) {
+ JSONDecoder::decode_json("mode", mode, obj);
+ JSONDecoder::decode_json("days", days, obj);
+ JSONDecoder::decode_json("years", years, obj);
+}
+
void DefaultRetention::decode_xml(XMLObj *obj) {
RGWXMLDecoder::decode_xml("Mode", mode, obj, true);
if (mode.compare("GOVERNANCE") != 0 && mode.compare("COMPLIANCE") != 0) {
}
void DefaultRetention::dump(Formatter *f) const {
- f->dump_string("mode", mode);
+ encode_json("mode", mode, f);
if (days > 0) {
- f->dump_int("days", days);
+ encode_json("days", days, f);
} else {
- f->dump_int("years", years);
+ encode_json("years", years, f);
}
}
}
}
+void ObjectLockRule::decode_json(JSONObj *obj) {
+ JSONDecoder::decode_json("defaultRetention", defaultRetention, obj);
+}
+
void ObjectLockRule::decode_xml(XMLObj *obj) {
RGWXMLDecoder::decode_xml("DefaultRetention", defaultRetention, obj, true);
}
}
void ObjectLockRule::dump(Formatter *f) const {
- f->open_object_section("default_retention");
- defaultRetention.dump(f);
- f->close_section();
+ encode_json("defaultRetention", defaultRetention, f);
}
void ObjectLockRule::generate_test_instances(std::list<ObjectLockRule*>& o) {
o.push_back(obj);
}
+void RGWObjectLock::decode_json(JSONObj *obj) {
+ JSONDecoder::decode_json("enabled", enabled, obj);
+ JSONDecoder::decode_json("rule_exist", rule_exist, obj);
+ if (rule_exist) {
+ JSONDecoder::decode_json("rule", rule, obj);
+ }
+}
+
void RGWObjectLock::decode_xml(XMLObj *obj) {
string enabled_str;
RGWXMLDecoder::decode_xml("ObjectLockEnabled", enabled_str, obj, true);
}
void RGWObjectLock::dump(Formatter *f) const {
- f->dump_bool("enabled", enabled);
- f->dump_bool("rule_exist", rule_exist);
+ if (enabled) {
+ encode_json("enabled", enabled, f);
+ }
+ encode_json("rule_exist", rule_exist, f);
if (rule_exist) {
- f->open_object_section("rule");
- rule.dump(f);
- f->close_section();
+ encode_json("rule", rule, f);
}
}
#include <string>
#include "common/ceph_time.h"
#include "common/iso_8601.h"
+#include "common/ceph_json.h"
#include "rgw_xml.h"
class DefaultRetention
decode(years, bl);
DECODE_FINISH(bl);
}
+
+ void decode_json(JSONObj *obj);
void dump(Formatter *f) const;
void decode_xml(XMLObj *obj);
void dump_xml(Formatter *f) const;
DECODE_FINISH(bl);
}
+ void decode_json(JSONObj *obj);
void decode_xml(XMLObj *obj);
void dump_xml(Formatter *f) const;
void dump(Formatter *f) const;
DECODE_FINISH(bl);
}
+ void decode_json(JSONObj *obj);
void decode_xml(XMLObj *obj);
void dump_xml(Formatter *f) const;
ceph::real_time get_lock_until_date(const ceph::real_time& mtime) const;
Bucket=dest_bucket.name,
CopySource={'Bucket': source_bucket.name, 'Key': objname},
Key=objname)
- assert e.response['Error']['Code'] == 'AccessDenied'
\ No newline at end of file
+ assert e.response['Error']['Code'] == 'AccessDenied'
+
+
+def test_object_lock_sync():
+
+ zonegroup = realm.master_zonegroup()
+ zonegroup_conns = ZonegroupConns(zonegroup)
+ primary = zonegroup_conns.rw_zones[0]
+ secondary = zonegroup_conns.rw_zones[1]
+
+ bucket = primary.create_bucket(gen_bucket_name())
+ log.debug('created bucket=%s', bucket.name)
+
+ # enable versioning
+ bucket.configure_versioning(True)
+ zonegroup_meta_checkpoint(zonegroup)
+
+ lock_config = {
+ 'ObjectLockEnabled': 'Enabled',
+ 'Rule': {
+ 'DefaultRetention': {
+ 'Mode': 'COMPLIANCE',
+ 'Days': 1
+ }
+ }
+ }
+
+ # enable object lock on bucket
+ primary.s3_client.put_object_lock_configuration(
+ Bucket=bucket.name,
+ ObjectLockConfiguration = lock_config)
+
+ zonegroup_meta_checkpoint(zonegroup)
+ zone_data_checkpoint(secondary.zone, primary.zone)
+
+ response = secondary.s3_client.get_object_lock_configuration(Bucket=bucket.name)
+ assert(response['ObjectLockConfiguration'] == lock_config)
+
+
+