From f7236ba1f7923eb643bbeb8bf861fc80dc915d6a Mon Sep 17 00:00:00 2001 From: Marcus Watts Date: Thu, 2 Aug 2018 23:49:30 -0400 Subject: [PATCH] Add several types to ceph-dencoder. Add types: RGWBucketEntryPoint obj_version rgw_user These are structures that are visible as data at rest inside of rados when a bucket is made via radosgw. RGWBucketEntryPoint is the contents of a rados object with names that may be either "" or "/" rgw_user is a structure contained inside of RGWBucketEntryPoint and other structures. obj_version is visible as the xattr "ceph.objclass.version" on rados objects in ".rgw.meta" that contain ".bucket.meta." Fixes: http://tracker.ceph.com/issues/35885 Signed-off-by: Marcus Watts --- src/cls/version/cls_version_types.h | 1 + src/rgw/rgw_basic_types.h | 2 ++ src/rgw/rgw_common.h | 1 + src/rgw/rgw_dencoder.cc | 29 +++++++++++++++++++++++++++++ src/rgw/rgw_json_enc.cc | 5 +++++ 5 files changed, 38 insertions(+) diff --git a/src/cls/version/cls_version_types.h b/src/cls/version/cls_version_types.h index 15433b46fd110..852183f30e57a 100644 --- a/src/cls/version/cls_version_types.h +++ b/src/cls/version/cls_version_types.h @@ -47,6 +47,7 @@ struct obj_version { void dump(Formatter *f) const; void decode_json(JSONObj *obj); + static void generate_test_instances(list& o); }; WRITE_CLASS_ENCODER(obj_version) diff --git a/src/rgw/rgw_basic_types.h b/src/rgw/rgw_basic_types.h index b2b9b7b4ec75c..eb19311b21d0f 100644 --- a/src/rgw/rgw_basic_types.h +++ b/src/rgw/rgw_basic_types.h @@ -104,6 +104,8 @@ struct rgw_user { } return (id < rhs.id); } + void dump(Formatter *f) const; + static void generate_test_instances(list& o); }; WRITE_CLASS_ENCODER(rgw_user) diff --git a/src/rgw/rgw_common.h b/src/rgw/rgw_common.h index 88febde24b729..80738a7b76307 100644 --- a/src/rgw/rgw_common.h +++ b/src/rgw/rgw_common.h @@ -1599,6 +1599,7 @@ struct RGWBucketEntryPoint void dump(Formatter *f) const; void decode_json(JSONObj *obj); + static void generate_test_instances(list& o); }; WRITE_CLASS_ENCODER(RGWBucketEntryPoint) diff --git a/src/rgw/rgw_dencoder.cc b/src/rgw/rgw_dencoder.cc index 41216fe91b27e..2cbbcb05d061f 100644 --- a/src/rgw/rgw_dencoder.cc +++ b/src/rgw/rgw_dencoder.cc @@ -573,3 +573,32 @@ void objexp_hint_entry::generate_test_instances(list& o) o.push_back(it); o.push_back(new objexp_hint_entry); } + +void RGWBucketEntryPoint::generate_test_instances(list& o) +{ + RGWBucketEntryPoint *bp = new RGWBucketEntryPoint(); + init_bucket(&bp->bucket, "tenant", "bucket", "pool", ".index.pool", "marker", "10"); + bp->owner = "owner"; + bp->creation_time = ceph::real_clock::from_ceph_timespec({{2}, {3}}); + + o.push_back(bp); + o.push_back(new RGWBucketEntryPoint); +} + +void rgw_user::generate_test_instances(list& o) +{ + rgw_user *u = new rgw_user("tenant", "user"); + + o.push_back(u); + o.push_back(new rgw_user); +} + +void obj_version::generate_test_instances(list& o) +{ + obj_version *v = new obj_version; + v->ver = 5; + v->tag = "tag"; + + o.push_back(v); + o.push_back(new obj_version); +} diff --git a/src/rgw/rgw_json_enc.cc b/src/rgw/rgw_json_enc.cc index 6b4756cda9054..60b621e3bf9e9 100644 --- a/src/rgw/rgw_json_enc.cc +++ b/src/rgw/rgw_json_enc.cc @@ -1760,3 +1760,8 @@ void objexp_hint_entry::dump(Formatter *f) const encode_json("exp_time", ut, f); f->close_section(); } + +void rgw_user::dump(Formatter *f) const +{ + ::encode_json("user", *this, f); +} -- 2.39.5