1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #include "rgw_common.h"
8 #include "rgw_acl_s3.h"
10 #include "rgw_bucket.h"
11 #include "rgw_keystone.h"
12 #include "rgw_basic_types.h"
14 #include "rgw_data_sync.h"
16 #include "rgw_orphan.h"
18 #include "common/ceph_json.h"
19 #include "common/Formatter.h"
21 #define dout_context g_ceph_context
22 #define dout_subsys ceph_subsys_rgw
24 void encode_json(const char *name
, const obj_version
& v
, Formatter
*f
)
26 f
->open_object_section(name
);
27 f
->dump_string("tag", v
.tag
);
28 f
->dump_unsigned("ver", v
.ver
);
32 void decode_json_obj(obj_version
& v
, JSONObj
*obj
)
34 JSONDecoder::decode_json("tag", v
.tag
, obj
);
35 JSONDecoder::decode_json("ver", v
.ver
, obj
);
38 void encode_json(const char *name
, const RGWUserCaps
& val
, Formatter
*f
)
44 void encode_json(const char *name
, const rgw_pool
& pool
, Formatter
*f
)
46 f
->dump_string(name
, pool
.to_str());
49 void decode_json_obj(rgw_pool
& pool
, JSONObj
*obj
)
52 decode_json_obj(s
, obj
);
56 void RGWOLHInfo::dump(Formatter
*f
) const
58 encode_json("target", target
, f
);
61 void RGWOLHPendingInfo::dump(Formatter
*f
) const
64 encode_json("time", ut
, f
);
67 void RGWObjManifestPart::dump(Formatter
*f
) const
69 f
->open_object_section("loc");
72 f
->dump_unsigned("loc_ofs", loc_ofs
);
73 f
->dump_unsigned("size", size
);
76 void RGWObjManifestRule::dump(Formatter
*f
) const
78 encode_json("start_part_num", start_part_num
, f
);
79 encode_json("start_ofs", start_ofs
, f
);
80 encode_json("part_size", part_size
, f
);
81 encode_json("stripe_max_size", stripe_max_size
, f
);
82 encode_json("override_prefix", override_prefix
, f
);
85 void rgw_bucket_placement::dump(Formatter
*f
) const
87 encode_json("bucket", bucket
, f
);
88 encode_json("placement_rule", placement_rule
, f
);
91 void RGWObjManifest::dump(Formatter
*f
) const
93 map
<uint64_t, RGWObjManifestPart
>::const_iterator iter
= objs
.begin();
94 f
->open_array_section("objs");
95 for (; iter
!= objs
.end(); ++iter
) {
96 f
->dump_unsigned("ofs", iter
->first
);
97 f
->open_object_section("part");
102 f
->dump_unsigned("obj_size", obj_size
);
103 ::encode_json("explicit_objs", explicit_objs
, f
);
104 ::encode_json("head_size", head_size
, f
);
105 ::encode_json("max_head_size", max_head_size
, f
);
106 ::encode_json("prefix", prefix
, f
);
107 ::encode_json("rules", rules
, f
);
108 ::encode_json("tail_instance", tail_instance
, f
);
109 ::encode_json("tail_placement", tail_placement
, f
);
112 void rgw_log_entry::dump(Formatter
*f
) const
114 f
->dump_string("object_owner", object_owner
.to_str());
115 f
->dump_string("bucket_owner", bucket_owner
.to_str());
116 f
->dump_string("bucket", bucket
);
117 f
->dump_stream("time") << time
;
118 f
->dump_string("remote_addr", remote_addr
);
119 f
->dump_string("user", user
);
122 f
->dump_string("obj", s
.str());
123 f
->dump_string("op", op
);
124 f
->dump_string("uri", uri
);
125 f
->dump_string("http_status", http_status
);
126 f
->dump_string("error_code", error_code
);
127 f
->dump_unsigned("bytes_sent", bytes_sent
);
128 f
->dump_unsigned("bytes_received", bytes_received
);
129 f
->dump_unsigned("obj_size", obj_size
);
130 f
->dump_stream("total_time") << total_time
;
131 f
->dump_string("user_agent", user_agent
);
132 f
->dump_string("referrer", referrer
);
133 f
->dump_string("bucket_id", bucket_id
);
136 void ACLPermission::dump(Formatter
*f
) const
138 f
->dump_int("flags", flags
);
141 void ACLGranteeType::dump(Formatter
*f
) const
143 f
->dump_unsigned("type", type
);
146 void ACLGrant::dump(Formatter
*f
) const
148 f
->open_object_section("type");
152 f
->dump_string("id", id
.to_str());
153 f
->dump_string("email", email
);
155 f
->open_object_section("permission");
159 f
->dump_string("name", name
);
160 f
->dump_int("group", (int)group
);
161 f
->dump_string("url_spec", url_spec
);
164 void RGWAccessControlList::dump(Formatter
*f
) const
166 map
<string
, int>::const_iterator acl_user_iter
= acl_user_map
.begin();
167 f
->open_array_section("acl_user_map");
168 for (; acl_user_iter
!= acl_user_map
.end(); ++acl_user_iter
) {
169 f
->open_object_section("entry");
170 f
->dump_string("user", acl_user_iter
->first
);
171 f
->dump_int("acl", acl_user_iter
->second
);
176 map
<uint32_t, int>::const_iterator acl_group_iter
= acl_group_map
.begin();
177 f
->open_array_section("acl_group_map");
178 for (; acl_group_iter
!= acl_group_map
.end(); ++acl_group_iter
) {
179 f
->open_object_section("entry");
180 f
->dump_unsigned("group", acl_group_iter
->first
);
181 f
->dump_int("acl", acl_group_iter
->second
);
186 multimap
<string
, ACLGrant
>::const_iterator giter
= grant_map
.begin();
187 f
->open_array_section("grant_map");
188 for (; giter
!= grant_map
.end(); ++giter
) {
189 f
->open_object_section("entry");
190 f
->dump_string("id", giter
->first
);
191 f
->open_object_section("grant");
192 giter
->second
.dump(f
);
199 void ACLOwner::dump(Formatter
*f
) const
201 encode_json("id", id
.to_str(), f
);
202 encode_json("display_name", display_name
, f
);
205 void ACLOwner::decode_json(JSONObj
*obj
) {
207 JSONDecoder::decode_json("id", id_str
, obj
);
209 JSONDecoder::decode_json("display_name", display_name
, obj
);
212 void RGWAccessControlPolicy::dump(Formatter
*f
) const
214 encode_json("acl", acl
, f
);
215 encode_json("owner", owner
, f
);
218 void ObjectMetaInfo::dump(Formatter
*f
) const
220 encode_json("size", size
, f
);
221 encode_json("mtime", utime_t(mtime
), f
);
224 void ObjectCacheInfo::dump(Formatter
*f
) const
226 encode_json("status", status
, f
);
227 encode_json("flags", flags
, f
);
228 encode_json("data", data
, f
);
229 encode_json_map("xattrs", "name", "value", "length", xattrs
, f
);
230 encode_json_map("rm_xattrs", "name", "value", "length", rm_xattrs
, f
);
231 encode_json("meta", meta
, f
);
235 void RGWCacheNotifyInfo::dump(Formatter
*f
) const
237 encode_json("op", op
, f
);
238 encode_json("obj", obj
, f
);
239 encode_json("obj_info", obj_info
, f
);
240 encode_json("ofs", ofs
, f
);
241 encode_json("ns", ns
, f
);
244 void RGWAccessKey::dump(Formatter
*f
) const
246 encode_json("access_key", id
, f
);
247 encode_json("secret_key", key
, f
);
248 encode_json("subuser", subuser
, f
);
251 void RGWAccessKey::dump_plain(Formatter
*f
) const
253 encode_json("access_key", id
, f
);
254 encode_json("secret_key", key
, f
);
257 void encode_json_plain(const char *name
, const RGWAccessKey
& val
, Formatter
*f
)
259 f
->open_object_section(name
);
264 void RGWAccessKey::dump(Formatter
*f
, const string
& user
, bool swift
) const
267 if (!subuser
.empty()) {
271 encode_json("user", u
, f
);
273 encode_json("access_key", id
, f
);
275 encode_json("secret_key", key
, f
);
278 void RGWAccessKey::decode_json(JSONObj
*obj
) {
279 JSONDecoder::decode_json("access_key", id
, obj
, true);
280 JSONDecoder::decode_json("secret_key", key
, obj
, true);
281 if (!JSONDecoder::decode_json("subuser", subuser
, obj
)) {
283 JSONDecoder::decode_json("user", user
, obj
);
284 int pos
= user
.find(':');
286 subuser
= user
.substr(pos
+ 1);
291 void RGWAccessKey::decode_json(JSONObj
*obj
, bool swift
) {
297 if (!JSONDecoder::decode_json("subuser", subuser
, obj
)) {
298 JSONDecoder::decode_json("user", id
, obj
, true);
299 int pos
= id
.find(':');
301 subuser
= id
.substr(pos
+ 1);
304 JSONDecoder::decode_json("secret_key", key
, obj
, true);
307 struct rgw_flags_desc
{
312 static struct rgw_flags_desc rgw_perms
[] = {
313 { RGW_PERM_FULL_CONTROL
, "full-control" },
314 { RGW_PERM_READ
| RGW_PERM_WRITE
, "read-write" },
315 { RGW_PERM_READ
, "read" },
316 { RGW_PERM_WRITE
, "write" },
317 { RGW_PERM_READ_ACP
, "read-acp" },
318 { RGW_PERM_WRITE_ACP
, "read-acp" },
322 static void mask_to_str(rgw_flags_desc
*mask_list
, uint32_t mask
, char *buf
, int len
)
324 const char *sep
= "";
327 snprintf(buf
, len
, "<none>");
331 uint32_t orig_mask
= mask
;
332 for (int i
= 0; mask_list
[i
].mask
; i
++) {
333 struct rgw_flags_desc
*desc
= &mask_list
[i
];
334 if ((mask
& desc
->mask
) == desc
->mask
) {
335 pos
+= snprintf(buf
+ pos
, len
- pos
, "%s%s", sep
, desc
->str
);
344 if (mask
== orig_mask
) // no change
349 static void perm_to_str(uint32_t mask
, char *buf
, int len
)
351 return mask_to_str(rgw_perms
, mask
, buf
, len
);
354 static struct rgw_flags_desc op_type_flags
[] = {
355 { RGW_OP_TYPE_READ
, "read" },
356 { RGW_OP_TYPE_WRITE
, "write" },
357 { RGW_OP_TYPE_DELETE
, "delete" },
361 static void op_type_to_str(uint32_t mask
, char *buf
, int len
)
363 return mask_to_str(op_type_flags
, mask
, buf
, len
);
366 void RGWSubUser::dump(Formatter
*f
) const
368 encode_json("id", name
, f
);
370 perm_to_str(perm_mask
, buf
, sizeof(buf
));
371 encode_json("permissions", (const char *)buf
, f
);
374 void RGWSubUser::dump(Formatter
*f
, const string
& user
) const
379 encode_json("id", s
, f
);
381 perm_to_str(perm_mask
, buf
, sizeof(buf
));
382 encode_json("permissions", (const char *)buf
, f
);
385 static uint32_t str_to_perm(const string
& s
)
387 if (s
.compare("read") == 0)
388 return RGW_PERM_READ
;
389 else if (s
.compare("write") == 0)
390 return RGW_PERM_WRITE
;
391 else if (s
.compare("read-write") == 0)
392 return RGW_PERM_READ
| RGW_PERM_WRITE
;
393 else if (s
.compare("full-control") == 0)
394 return RGW_PERM_FULL_CONTROL
;
398 void RGWSubUser::decode_json(JSONObj
*obj
)
401 JSONDecoder::decode_json("id", uid
, obj
);
402 int pos
= uid
.find(':');
404 name
= uid
.substr(pos
+ 1);
406 JSONDecoder::decode_json("permissions", perm_str
, obj
);
407 perm_mask
= str_to_perm(perm_str
);
410 static void user_info_dump_subuser(const char *name
, const RGWSubUser
& subuser
, Formatter
*f
, void *parent
)
412 RGWUserInfo
*info
= static_cast<RGWUserInfo
*>(parent
);
413 subuser
.dump(f
, info
->user_id
.to_str());
416 static void user_info_dump_key(const char *name
, const RGWAccessKey
& key
, Formatter
*f
, void *parent
)
418 RGWUserInfo
*info
= static_cast<RGWUserInfo
*>(parent
);
419 key
.dump(f
, info
->user_id
.to_str(), false);
422 static void user_info_dump_swift_key(const char *name
, const RGWAccessKey
& key
, Formatter
*f
, void *parent
)
424 RGWUserInfo
*info
= static_cast<RGWUserInfo
*>(parent
);
425 key
.dump(f
, info
->user_id
.to_str(), true);
428 void RGWUserInfo::dump(Formatter
*f
) const
431 encode_json("user_id", user_id
.to_str(), f
);
432 encode_json("display_name", display_name
, f
);
433 encode_json("email", user_email
, f
);
434 encode_json("suspended", (int)suspended
, f
);
435 encode_json("max_buckets", (int)max_buckets
, f
);
437 encode_json("auid", auid
, f
);
439 encode_json_map("subusers", NULL
, "subuser", NULL
, user_info_dump_subuser
,(void *)this, subusers
, f
);
440 encode_json_map("keys", NULL
, "key", NULL
, user_info_dump_key
,(void *)this, access_keys
, f
);
441 encode_json_map("swift_keys", NULL
, "key", NULL
, user_info_dump_swift_key
,(void *)this, swift_keys
, f
);
443 encode_json("caps", caps
, f
);
446 op_type_to_str(op_mask
, buf
, sizeof(buf
));
447 encode_json("op_mask", (const char *)buf
, f
);
449 if (system
) { /* no need to show it for every user */
450 encode_json("system", (bool)system
, f
);
452 encode_json("default_placement", default_placement
, f
);
453 encode_json("placement_tags", placement_tags
, f
);
454 encode_json("bucket_quota", bucket_quota
, f
);
455 encode_json("user_quota", user_quota
, f
);
456 encode_json("temp_url_keys", temp_url_keys
, f
);
458 string user_source_type
;
459 switch ((RGWUserSourceType
)type
) {
461 user_source_type
= "rgw";
464 user_source_type
= "keystone";
467 user_source_type
= "ldap";
470 user_source_type
= "none";
473 user_source_type
= "none";
476 encode_json("type", user_source_type
, f
);
480 static void decode_access_keys(map
<string
, RGWAccessKey
>& m
, JSONObj
*o
)
487 static void decode_swift_keys(map
<string
, RGWAccessKey
>& m
, JSONObj
*o
)
490 k
.decode_json(o
, true);
494 static void decode_subusers(map
<string
, RGWSubUser
>& m
, JSONObj
*o
)
501 void RGWUserInfo::decode_json(JSONObj
*obj
)
505 JSONDecoder::decode_json("user_id", uid
, obj
, true);
506 user_id
.from_str(uid
);
508 JSONDecoder::decode_json("display_name", display_name
, obj
);
509 JSONDecoder::decode_json("email", user_email
, obj
);
511 JSONDecoder::decode_json("suspended", susp
, obj
);
512 suspended
= (__u8
)susp
;
513 JSONDecoder::decode_json("max_buckets", max_buckets
, obj
);
514 JSONDecoder::decode_json("auid", auid
, obj
);
516 JSONDecoder::decode_json("keys", access_keys
, decode_access_keys
, obj
);
517 JSONDecoder::decode_json("swift_keys", swift_keys
, decode_swift_keys
, obj
);
518 JSONDecoder::decode_json("subusers", subusers
, decode_subusers
, obj
);
520 JSONDecoder::decode_json("caps", caps
, obj
);
523 JSONDecoder::decode_json("op_mask", mask_str
, obj
);
524 rgw_parse_op_type_list(mask_str
, &op_mask
);
527 JSONDecoder::decode_json("system", sys
, obj
);
529 JSONDecoder::decode_json("default_placement", default_placement
, obj
);
530 JSONDecoder::decode_json("placement_tags", placement_tags
, obj
);
531 JSONDecoder::decode_json("bucket_quota", bucket_quota
, obj
);
532 JSONDecoder::decode_json("user_quota", user_quota
, obj
);
533 JSONDecoder::decode_json("temp_url_keys", temp_url_keys
, obj
);
535 string user_source_type
;
536 JSONDecoder::decode_json("type", user_source_type
, obj
);
537 if (user_source_type
== "rgw") {
539 } else if (user_source_type
== "keystone") {
540 type
= TYPE_KEYSTONE
;
541 } else if (user_source_type
== "ldap") {
543 } else if (user_source_type
== "none") {
548 void RGWQuotaInfo::dump(Formatter
*f
) const
550 f
->dump_bool("enabled", enabled
);
551 f
->dump_bool("check_on_raw", check_on_raw
);
553 f
->dump_int("max_size", max_size
);
554 f
->dump_int("max_size_kb", rgw_rounded_kb(max_size
));
555 f
->dump_int("max_objects", max_objects
);
558 void RGWQuotaInfo::decode_json(JSONObj
*obj
)
560 if (false == JSONDecoder::decode_json("max_size", max_size
, obj
)) {
561 /* We're parsing an older version of the struct. */
562 int64_t max_size_kb
= 0;
564 JSONDecoder::decode_json("max_size_kb", max_size_kb
, obj
);
565 max_size
= max_size_kb
* 1024;
567 JSONDecoder::decode_json("max_objects", max_objects
, obj
);
569 JSONDecoder::decode_json("check_on_raw", check_on_raw
, obj
);
570 JSONDecoder::decode_json("enabled", enabled
, obj
);
573 void rgw_data_placement_target::dump(Formatter
*f
) const
575 encode_json("data_pool", data_pool
, f
);
576 encode_json("data_extra_pool", data_extra_pool
, f
);
577 encode_json("index_pool", index_pool
, f
);
580 void rgw_data_placement_target::decode_json(JSONObj
*obj
) {
581 JSONDecoder::decode_json("data_pool", data_pool
, obj
);
582 JSONDecoder::decode_json("data_extra_pool", data_extra_pool
, obj
);
583 JSONDecoder::decode_json("index_pool", index_pool
, obj
);
586 void rgw_bucket::dump(Formatter
*f
) const
588 encode_json("name", name
, f
);
589 encode_json("marker", marker
, f
);
590 encode_json("bucket_id", bucket_id
, f
);
591 encode_json("tenant", tenant
, f
);
592 encode_json("explicit_placement", explicit_placement
, f
);
595 void rgw_bucket::decode_json(JSONObj
*obj
) {
596 JSONDecoder::decode_json("name", name
, obj
);
597 JSONDecoder::decode_json("marker", marker
, obj
);
598 JSONDecoder::decode_json("bucket_id", bucket_id
, obj
);
599 JSONDecoder::decode_json("tenant", tenant
, obj
);
600 JSONDecoder::decode_json("explicit_placement", explicit_placement
, obj
);
601 if (explicit_placement
.data_pool
.empty()) {
602 /* decoding old format */
603 JSONDecoder::decode_json("pool", explicit_placement
.data_pool
, obj
);
604 JSONDecoder::decode_json("data_extra_pool", explicit_placement
.data_extra_pool
, obj
);
605 JSONDecoder::decode_json("index_pool", explicit_placement
.index_pool
, obj
);
609 void RGWBucketEntryPoint::dump(Formatter
*f
) const
611 encode_json("bucket", bucket
, f
);
612 encode_json("owner", owner
, f
);
613 utime_t
ut(creation_time
);
614 encode_json("creation_time", ut
, f
);
615 encode_json("linked", linked
, f
);
616 encode_json("has_bucket_info", has_bucket_info
, f
);
617 if (has_bucket_info
) {
618 encode_json("old_bucket_info", old_bucket_info
, f
);
622 void RGWBucketEntryPoint::decode_json(JSONObj
*obj
) {
623 JSONDecoder::decode_json("bucket", bucket
, obj
);
624 JSONDecoder::decode_json("owner", owner
, obj
);
626 JSONDecoder::decode_json("creation_time", ut
, obj
);
627 creation_time
= ut
.to_real_time();
628 JSONDecoder::decode_json("linked", linked
, obj
);
629 JSONDecoder::decode_json("has_bucket_info", has_bucket_info
, obj
);
630 if (has_bucket_info
) {
631 JSONDecoder::decode_json("old_bucket_info", old_bucket_info
, obj
);
635 void RGWStorageStats::dump(Formatter
*f
) const
637 encode_json("size", size
, f
);
638 encode_json("size_actual", size_rounded
, f
);
639 encode_json("size_utilized", size_utilized
, f
);
640 encode_json("size_kb", rgw_rounded_kb(size
), f
);
641 encode_json("size_kb_actual", rgw_rounded_kb(size_rounded
), f
);
642 encode_json("size_kb_utilized", rgw_rounded_kb(size_utilized
), f
);
643 encode_json("num_objects", num_objects
, f
);
646 void RGWRedirectInfo::dump(Formatter
*f
) const
648 encode_json("protocol", protocol
, f
);
649 encode_json("hostname", hostname
, f
);
650 encode_json("http_redirect_code", (int)http_redirect_code
, f
);
653 void RGWRedirectInfo::decode_json(JSONObj
*obj
) {
654 JSONDecoder::decode_json("protocol", protocol
, obj
);
655 JSONDecoder::decode_json("hostname", hostname
, obj
);
657 JSONDecoder::decode_json("http_redirect_code", code
, obj
);
658 http_redirect_code
= code
;
661 void RGWBWRedirectInfo::dump(Formatter
*f
) const
663 encode_json("redirect", redirect
, f
);
664 encode_json("replace_key_prefix_with", replace_key_prefix_with
, f
);
665 encode_json("replace_key_with", replace_key_with
, f
);
668 void RGWBWRedirectInfo::decode_json(JSONObj
*obj
) {
669 JSONDecoder::decode_json("redirect", redirect
, obj
);
670 JSONDecoder::decode_json("replace_key_prefix_with", replace_key_prefix_with
, obj
);
671 JSONDecoder::decode_json("replace_key_with", replace_key_with
, obj
);
674 void RGWBWRoutingRuleCondition::dump(Formatter
*f
) const
676 encode_json("key_prefix_equals", key_prefix_equals
, f
);
677 encode_json("http_error_code_returned_equals", (int)http_error_code_returned_equals
, f
);
680 void RGWBWRoutingRuleCondition::decode_json(JSONObj
*obj
) {
681 JSONDecoder::decode_json("key_prefix_equals", key_prefix_equals
, obj
);
683 JSONDecoder::decode_json("http_error_code_returned_equals", code
, obj
);
684 http_error_code_returned_equals
= code
;
687 void RGWBWRoutingRule::dump(Formatter
*f
) const
689 encode_json("condition", condition
, f
);
690 encode_json("redirect_info", redirect_info
, f
);
693 void RGWBWRoutingRule::decode_json(JSONObj
*obj
) {
694 JSONDecoder::decode_json("condition", condition
, obj
);
695 JSONDecoder::decode_json("redirect_info", redirect_info
, obj
);
698 void RGWBWRoutingRules::dump(Formatter
*f
) const
700 encode_json("rules", rules
, f
);
703 void RGWBWRoutingRules::decode_json(JSONObj
*obj
) {
704 JSONDecoder::decode_json("rules", rules
, obj
);
707 void RGWBucketWebsiteConf::dump(Formatter
*f
) const
709 if (!redirect_all
.hostname
.empty()) {
710 encode_json("redirect_all", redirect_all
, f
);
712 encode_json("index_doc_suffix", index_doc_suffix
, f
);
713 encode_json("error_doc", error_doc
, f
);
714 encode_json("routing_rules", routing_rules
, f
);
718 void RGWBucketWebsiteConf::decode_json(JSONObj
*obj
) {
719 JSONDecoder::decode_json("redirect_all", redirect_all
, obj
);
720 JSONDecoder::decode_json("index_doc_suffix", index_doc_suffix
, obj
);
721 JSONDecoder::decode_json("error_doc", error_doc
, obj
);
722 JSONDecoder::decode_json("routing_rules", routing_rules
, obj
);
725 void RGWBucketInfo::dump(Formatter
*f
) const
727 encode_json("bucket", bucket
, f
);
728 utime_t
ut(creation_time
);
729 encode_json("creation_time", ut
, f
);
730 encode_json("owner", owner
.to_str(), f
);
731 encode_json("flags", flags
, f
);
732 encode_json("zonegroup", zonegroup
, f
);
733 encode_json("placement_rule", placement_rule
, f
);
734 encode_json("has_instance_obj", has_instance_obj
, f
);
735 encode_json("quota", quota
, f
);
736 encode_json("num_shards", num_shards
, f
);
737 encode_json("bi_shard_hash_type", (uint32_t)bucket_index_shard_hash_type
, f
);
738 encode_json("requester_pays", requester_pays
, f
);
739 encode_json("has_website", has_website
, f
);
741 encode_json("website_conf", website_conf
, f
);
743 encode_json("swift_versioning", swift_versioning
, f
);
744 encode_json("swift_ver_location", swift_ver_location
, f
);
745 encode_json("index_type", (uint32_t)index_type
, f
);
746 encode_json("mdsearch_config", mdsearch_config
, f
);
747 encode_json("reshard_status", (int)reshard_status
, f
);
748 encode_json("new_bucket_instance_id", new_bucket_instance_id
, f
);
751 void RGWBucketInfo::decode_json(JSONObj
*obj
) {
752 JSONDecoder::decode_json("bucket", bucket
, obj
);
754 JSONDecoder::decode_json("creation_time", ut
, obj
);
755 creation_time
= ut
.to_real_time();
756 JSONDecoder::decode_json("owner", owner
, obj
);
757 JSONDecoder::decode_json("flags", flags
, obj
);
758 JSONDecoder::decode_json("zonegroup", zonegroup
, obj
);
759 /* backward compatability with region */
760 if (zonegroup
.empty()) {
761 JSONDecoder::decode_json("region", zonegroup
, obj
);
763 JSONDecoder::decode_json("placement_rule", placement_rule
, obj
);
764 JSONDecoder::decode_json("has_instance_obj", has_instance_obj
, obj
);
765 JSONDecoder::decode_json("quota", quota
, obj
);
766 JSONDecoder::decode_json("num_shards", num_shards
, obj
);
768 JSONDecoder::decode_json("bi_shard_hash_type", hash_type
, obj
);
769 bucket_index_shard_hash_type
= (uint8_t)hash_type
;
770 JSONDecoder::decode_json("requester_pays", requester_pays
, obj
);
771 JSONDecoder::decode_json("has_website", has_website
, obj
);
773 JSONDecoder::decode_json("website_conf", website_conf
, obj
);
775 JSONDecoder::decode_json("swift_versioning", swift_versioning
, obj
);
776 JSONDecoder::decode_json("swift_ver_location", swift_ver_location
, obj
);
778 JSONDecoder::decode_json("index_type", it
, obj
);
779 index_type
= (RGWBucketIndexType
)it
;
780 JSONDecoder::decode_json("mdsearch_config", mdsearch_config
, obj
);
782 JSONDecoder::decode_json("reshard_status", rs
, obj
);
783 reshard_status
= (cls_rgw_reshard_status
)rs
;
784 JSONDecoder::decode_json("new_bucket_instance_id",new_bucket_instance_id
, obj
);
787 void rgw_obj_key::dump(Formatter
*f
) const
789 encode_json("name", name
, f
);
790 encode_json("instance", instance
, f
);
791 encode_json("ns", ns
, f
);
794 void rgw_obj_key::decode_json(JSONObj
*obj
)
796 JSONDecoder::decode_json("name", name
, obj
);
797 JSONDecoder::decode_json("instance", instance
, obj
);
798 JSONDecoder::decode_json("ns", ns
, obj
);
801 void RGWBucketEnt::dump(Formatter
*f
) const
803 encode_json("bucket", bucket
, f
);
804 encode_json("size", size
, f
);
805 encode_json("size_rounded", size_rounded
, f
);
806 utime_t
ut(creation_time
);
807 encode_json("mtime", ut
, f
); /* mtime / creation time discrepency needed for backward compatibility */
808 encode_json("count", count
, f
);
809 encode_json("placement_rule", placement_rule
, f
);
812 void RGWUploadPartInfo::dump(Formatter
*f
) const
814 encode_json("num", num
, f
);
815 encode_json("size", size
, f
);
816 encode_json("etag", etag
, f
);
817 utime_t
ut(modified
);
818 encode_json("modified", ut
, f
);
821 void rgw_raw_obj::dump(Formatter
*f
) const
823 encode_json("pool", pool
, f
);
824 encode_json("oid", oid
, f
);
825 encode_json("loc", loc
, f
);
828 void rgw_raw_obj::decode_json(JSONObj
*obj
) {
829 JSONDecoder::decode_json("pool", pool
, obj
);
830 JSONDecoder::decode_json("oid", oid
, obj
);
831 JSONDecoder::decode_json("loc", loc
, obj
);
834 void rgw_obj::dump(Formatter
*f
) const
836 encode_json("bucket", bucket
, f
);
837 encode_json("key", key
, f
);
840 void RGWDefaultSystemMetaObjInfo::dump(Formatter
*f
) const {
841 encode_json("default_id", default_id
, f
);
844 void RGWDefaultSystemMetaObjInfo::decode_json(JSONObj
*obj
) {
845 JSONDecoder::decode_json("default_id", default_id
, obj
);
848 void RGWNameToId::dump(Formatter
*f
) const {
849 encode_json("obj_id", obj_id
, f
);
852 void RGWNameToId::decode_json(JSONObj
*obj
) {
853 JSONDecoder::decode_json("obj_id", obj_id
, obj
);
856 void RGWSystemMetaObj::dump(Formatter
*f
) const
858 encode_json("id", id
, f
);
859 encode_json("name", name
, f
);
862 void RGWSystemMetaObj::decode_json(JSONObj
*obj
)
864 JSONDecoder::decode_json("id", id
, obj
);
865 JSONDecoder::decode_json("name", name
, obj
);
868 void RGWPeriodLatestEpochInfo::dump(Formatter
*f
) const {
869 encode_json("latest_epoch", epoch
, f
);
872 void RGWPeriodLatestEpochInfo::decode_json(JSONObj
*obj
) {
873 JSONDecoder::decode_json("latest_epoch", epoch
, obj
);
876 void RGWPeriod::dump(Formatter
*f
) const
878 encode_json("id", id
, f
);
879 encode_json("epoch", epoch
, f
);
880 encode_json("predecessor_uuid", predecessor_uuid
, f
);
881 encode_json("sync_status", sync_status
, f
);
882 encode_json("period_map", period_map
, f
);
883 encode_json("master_zonegroup", master_zonegroup
, f
);
884 encode_json("master_zone", master_zone
, f
);
885 encode_json("period_config", period_config
, f
);
886 encode_json("realm_id", realm_id
, f
);
887 encode_json("realm_name", realm_name
, f
);
888 encode_json("realm_epoch", realm_epoch
, f
);
891 void RGWPeriod::decode_json(JSONObj
*obj
)
893 JSONDecoder::decode_json("id", id
, obj
);
894 JSONDecoder::decode_json("epoch", epoch
, obj
);
895 JSONDecoder::decode_json("predecessor_uuid", predecessor_uuid
, obj
);
896 JSONDecoder::decode_json("sync_status", sync_status
, obj
);
897 JSONDecoder::decode_json("period_map", period_map
, obj
);
898 JSONDecoder::decode_json("master_zonegroup", master_zonegroup
, obj
);
899 JSONDecoder::decode_json("master_zone", master_zone
, obj
);
900 JSONDecoder::decode_json("period_config", period_config
, obj
);
901 JSONDecoder::decode_json("realm_id", realm_id
, obj
);
902 JSONDecoder::decode_json("realm_name", realm_name
, obj
);
903 JSONDecoder::decode_json("realm_epoch", realm_epoch
, obj
);
906 void RGWZoneParams::dump(Formatter
*f
) const
908 RGWSystemMetaObj::dump(f
);
909 encode_json("domain_root", domain_root
, f
);
910 encode_json("control_pool", control_pool
, f
);
911 encode_json("gc_pool", gc_pool
, f
);
912 encode_json("lc_pool", lc_pool
, f
);
913 encode_json("log_pool", log_pool
, f
);
914 encode_json("intent_log_pool", intent_log_pool
, f
);
915 encode_json("usage_log_pool", usage_log_pool
, f
);
916 encode_json("reshard_pool", reshard_pool
, f
);
917 encode_json("user_keys_pool", user_keys_pool
, f
);
918 encode_json("user_email_pool", user_email_pool
, f
);
919 encode_json("user_swift_pool", user_swift_pool
, f
);
920 encode_json("user_uid_pool", user_uid_pool
, f
);
921 encode_json_plain("system_key", system_key
, f
);
922 encode_json("placement_pools", placement_pools
, f
);
923 encode_json("metadata_heap", metadata_heap
, f
);
924 encode_json("tier_config", tier_config
, f
);
925 encode_json("realm_id", realm_id
, f
);
928 void RGWZonePlacementInfo::dump(Formatter
*f
) const
930 encode_json("index_pool", index_pool
, f
);
931 encode_json("data_pool", data_pool
, f
);
932 encode_json("data_extra_pool", data_extra_pool
, f
);
933 encode_json("index_type", (uint32_t)index_type
, f
);
934 encode_json("compression", compression_type
, f
);
937 void RGWZonePlacementInfo::decode_json(JSONObj
*obj
)
939 JSONDecoder::decode_json("index_pool", index_pool
, obj
);
940 JSONDecoder::decode_json("data_pool", data_pool
, obj
);
941 JSONDecoder::decode_json("data_extra_pool", data_extra_pool
, obj
);
943 JSONDecoder::decode_json("index_type", it
, obj
);
944 index_type
= (RGWBucketIndexType
)it
;
945 JSONDecoder::decode_json("compression", compression_type
, obj
);
948 void RGWZoneParams::decode_json(JSONObj
*obj
)
950 RGWSystemMetaObj::decode_json(obj
);
951 JSONDecoder::decode_json("domain_root", domain_root
, obj
);
952 JSONDecoder::decode_json("control_pool", control_pool
, obj
);
953 JSONDecoder::decode_json("gc_pool", gc_pool
, obj
);
954 JSONDecoder::decode_json("lc_pool", lc_pool
, obj
);
955 JSONDecoder::decode_json("log_pool", log_pool
, obj
);
956 JSONDecoder::decode_json("intent_log_pool", intent_log_pool
, obj
);
957 JSONDecoder::decode_json("reshard_pool", reshard_pool
, obj
);
958 JSONDecoder::decode_json("usage_log_pool", usage_log_pool
, obj
);
959 JSONDecoder::decode_json("user_keys_pool", user_keys_pool
, obj
);
960 JSONDecoder::decode_json("user_email_pool", user_email_pool
, obj
);
961 JSONDecoder::decode_json("user_swift_pool", user_swift_pool
, obj
);
962 JSONDecoder::decode_json("user_uid_pool", user_uid_pool
, obj
);
963 JSONDecoder::decode_json("system_key", system_key
, obj
);
964 JSONDecoder::decode_json("placement_pools", placement_pools
, obj
);
965 JSONDecoder::decode_json("metadata_heap", metadata_heap
, obj
);
966 JSONDecoder::decode_json("tier_config", tier_config
, obj
);
967 JSONDecoder::decode_json("realm_id", realm_id
, obj
);
971 void RGWZone::dump(Formatter
*f
) const
973 encode_json("id", id
, f
);
974 encode_json("name", name
, f
);
975 encode_json("endpoints", endpoints
, f
);
976 encode_json("log_meta", log_meta
, f
);
977 encode_json("log_data", log_data
, f
);
978 encode_json("bucket_index_max_shards", bucket_index_max_shards
, f
);
979 encode_json("read_only", read_only
, f
);
980 encode_json("tier_type", tier_type
, f
);
981 encode_json("sync_from_all", sync_from_all
, f
);
982 encode_json("sync_from", sync_from
, f
);
985 void RGWZone::decode_json(JSONObj
*obj
)
987 JSONDecoder::decode_json("id", id
, obj
);
988 JSONDecoder::decode_json("name", name
, obj
);
992 JSONDecoder::decode_json("endpoints", endpoints
, obj
);
993 JSONDecoder::decode_json("log_meta", log_meta
, obj
);
994 JSONDecoder::decode_json("log_data", log_data
, obj
);
995 JSONDecoder::decode_json("bucket_index_max_shards", bucket_index_max_shards
, obj
);
996 JSONDecoder::decode_json("read_only", read_only
, obj
);
997 JSONDecoder::decode_json("tier_type", tier_type
, obj
);
998 JSONDecoder::decode_json("sync_from_all", sync_from_all
, true, obj
);
999 JSONDecoder::decode_json("sync_from", sync_from
, obj
);
1002 void RGWZoneGroupPlacementTarget::dump(Formatter
*f
) const
1004 encode_json("name", name
, f
);
1005 encode_json("tags", tags
, f
);
1008 void RGWZoneGroupPlacementTarget::decode_json(JSONObj
*obj
)
1010 JSONDecoder::decode_json("name", name
, obj
);
1011 JSONDecoder::decode_json("tags", tags
, obj
);
1014 void RGWZoneGroup::dump(Formatter
*f
) const
1016 RGWSystemMetaObj::dump(f
);
1017 encode_json("api_name", api_name
, f
);
1018 encode_json("is_master", is_master
, f
);
1019 encode_json("endpoints", endpoints
, f
);
1020 encode_json("hostnames", hostnames
, f
);
1021 encode_json("hostnames_s3website", hostnames_s3website
, f
);
1022 encode_json("master_zone", master_zone
, f
);
1023 encode_json_map("zones", zones
, f
); /* more friendly representation */
1024 encode_json_map("placement_targets", placement_targets
, f
); /* more friendly representation */
1025 encode_json("default_placement", default_placement
, f
);
1026 encode_json("realm_id", realm_id
, f
);
1029 static void decode_zones(map
<string
, RGWZone
>& zones
, JSONObj
*o
)
1036 static void decode_placement_targets(map
<string
, RGWZoneGroupPlacementTarget
>& targets
, JSONObj
*o
)
1038 RGWZoneGroupPlacementTarget t
;
1040 targets
[t
.name
] = t
;
1044 void RGWZoneGroup::decode_json(JSONObj
*obj
)
1046 RGWSystemMetaObj::decode_json(obj
);
1048 derr
<< "old format " << dendl
;
1049 JSONDecoder::decode_json("name", name
, obj
);
1052 JSONDecoder::decode_json("api_name", api_name
, obj
);
1053 JSONDecoder::decode_json("is_master", is_master
, obj
);
1054 JSONDecoder::decode_json("endpoints", endpoints
, obj
);
1055 JSONDecoder::decode_json("hostnames", hostnames
, obj
);
1056 JSONDecoder::decode_json("hostnames_s3website", hostnames_s3website
, obj
);
1057 JSONDecoder::decode_json("master_zone", master_zone
, obj
);
1058 JSONDecoder::decode_json("zones", zones
, decode_zones
, obj
);
1059 JSONDecoder::decode_json("placement_targets", placement_targets
, decode_placement_targets
, obj
);
1060 JSONDecoder::decode_json("default_placement", default_placement
, obj
);
1061 JSONDecoder::decode_json("realm_id", realm_id
, obj
);
1065 void RGWPeriodMap::dump(Formatter
*f
) const
1067 encode_json("id", id
, f
);
1068 encode_json_map("zonegroups", zonegroups
, f
);
1069 encode_json("short_zone_ids", short_zone_ids
, f
);
1072 static void decode_zonegroups(map
<string
, RGWZoneGroup
>& zonegroups
, JSONObj
*o
)
1076 zonegroups
[zg
.get_id()] = zg
;
1079 void RGWPeriodMap::decode_json(JSONObj
*obj
)
1081 JSONDecoder::decode_json("id", id
, obj
);
1082 JSONDecoder::decode_json("zonegroups", zonegroups
, decode_zonegroups
, obj
);
1083 /* backward compatability with region */
1084 if (zonegroups
.empty()) {
1085 JSONDecoder::decode_json("regions", zonegroups
, obj
);
1087 /* backward compatability with region */
1088 if (master_zonegroup
.empty()) {
1089 JSONDecoder::decode_json("master_region", master_zonegroup
, obj
);
1091 JSONDecoder::decode_json("short_zone_ids", short_zone_ids
, obj
);
1095 void RGWPeriodConfig::dump(Formatter
*f
) const
1097 encode_json("bucket_quota", bucket_quota
, f
);
1098 encode_json("user_quota", user_quota
, f
);
1101 void RGWPeriodConfig::decode_json(JSONObj
*obj
)
1103 JSONDecoder::decode_json("bucket_quota", bucket_quota
, obj
);
1104 JSONDecoder::decode_json("user_quota", user_quota
, obj
);
1107 void RGWRegionMap::dump(Formatter
*f
) const
1109 encode_json("regions", regions
, f
);
1110 encode_json("master_region", master_region
, f
);
1111 encode_json("bucket_quota", bucket_quota
, f
);
1112 encode_json("user_quota", user_quota
, f
);
1115 void RGWRegionMap::decode_json(JSONObj
*obj
)
1117 JSONDecoder::decode_json("regions", regions
, obj
);
1118 JSONDecoder::decode_json("master_region", master_region
, obj
);
1119 JSONDecoder::decode_json("bucket_quota", bucket_quota
, obj
);
1120 JSONDecoder::decode_json("user_quota", user_quota
, obj
);
1123 void RGWZoneGroupMap::dump(Formatter
*f
) const
1125 encode_json("zonegroups", zonegroups
, f
);
1126 encode_json("master_zonegroup", master_zonegroup
, f
);
1127 encode_json("bucket_quota", bucket_quota
, f
);
1128 encode_json("user_quota", user_quota
, f
);
1131 void RGWZoneGroupMap::decode_json(JSONObj
*obj
)
1133 JSONDecoder::decode_json("zonegroups", zonegroups
, obj
);
1134 /* backward compatability with region */
1135 if (zonegroups
.empty()) {
1136 JSONDecoder::decode_json("regions", zonegroups
, obj
);
1138 JSONDecoder::decode_json("master_zonegroup", master_zonegroup
, obj
);
1139 /* backward compatability with region */
1140 if (master_zonegroup
.empty()) {
1141 JSONDecoder::decode_json("master_region", master_zonegroup
, obj
);
1144 JSONDecoder::decode_json("bucket_quota", bucket_quota
, obj
);
1145 JSONDecoder::decode_json("user_quota", user_quota
, obj
);
1148 void RGWMetadataLogInfo::dump(Formatter
*f
) const
1150 encode_json("marker", marker
, f
);
1151 utime_t
ut(last_update
);
1152 encode_json("last_update", ut
, f
);
1155 void RGWMetadataLogInfo::decode_json(JSONObj
*obj
)
1157 JSONDecoder::decode_json("marker", marker
, obj
);
1159 JSONDecoder::decode_json("last_update", ut
, obj
);
1160 last_update
= ut
.to_real_time();
1163 void RGWDataChangesLogInfo::dump(Formatter
*f
) const
1165 encode_json("marker", marker
, f
);
1166 utime_t
ut(last_update
);
1167 encode_json("last_update", ut
, f
);
1170 void RGWDataChangesLogInfo::decode_json(JSONObj
*obj
)
1172 JSONDecoder::decode_json("marker", marker
, obj
);
1174 JSONDecoder::decode_json("last_update", ut
, obj
);
1175 last_update
= ut
.to_real_time();
1179 void RGWRealm::dump(Formatter
*f
) const
1181 RGWSystemMetaObj::dump(f
);
1182 encode_json("current_period", current_period
, f
);
1183 encode_json("epoch", epoch
, f
);
1187 void RGWRealm::decode_json(JSONObj
*obj
)
1189 RGWSystemMetaObj::decode_json(obj
);
1190 JSONDecoder::decode_json("current_period", current_period
, obj
);
1191 JSONDecoder::decode_json("epoch", epoch
, obj
);
1194 void rgw::keystone::TokenEnvelope::Token::decode_json(JSONObj
*obj
)
1196 string expires_iso8601
;
1199 JSONDecoder::decode_json("id", id
, obj
, true);
1200 JSONDecoder::decode_json("tenant", tenant_v2
, obj
, true);
1201 JSONDecoder::decode_json("expires", expires_iso8601
, obj
, true);
1203 if (parse_iso8601(expires_iso8601
.c_str(), &t
)) {
1204 expires
= internal_timegm(&t
);
1207 throw JSONDecoder::err("Failed to parse ISO8601 expiration date from Keystone response.");
1211 void rgw::keystone::TokenEnvelope::Role::decode_json(JSONObj
*obj
)
1213 JSONDecoder::decode_json("id", id
, obj
);
1214 JSONDecoder::decode_json("name", name
, obj
, true);
1217 void rgw::keystone::TokenEnvelope::Domain::decode_json(JSONObj
*obj
)
1219 JSONDecoder::decode_json("id", id
, obj
, true);
1220 JSONDecoder::decode_json("name", name
, obj
, true);
1223 void rgw::keystone::TokenEnvelope::Project::decode_json(JSONObj
*obj
)
1225 JSONDecoder::decode_json("id", id
, obj
, true);
1226 JSONDecoder::decode_json("name", name
, obj
, true);
1227 JSONDecoder::decode_json("domain", domain
, obj
);
1230 void rgw::keystone::TokenEnvelope::User::decode_json(JSONObj
*obj
)
1232 JSONDecoder::decode_json("id", id
, obj
, true);
1233 JSONDecoder::decode_json("name", name
, obj
, true);
1234 JSONDecoder::decode_json("domain", domain
, obj
);
1235 JSONDecoder::decode_json("roles", roles_v2
, obj
);
1238 void rgw::keystone::TokenEnvelope::decode_v3(JSONObj
* const root_obj
)
1240 std::string expires_iso8601
;
1242 JSONDecoder::decode_json("user", user
, root_obj
, true);
1243 JSONDecoder::decode_json("expires_at", expires_iso8601
, root_obj
, true);
1244 JSONDecoder::decode_json("roles", roles
, root_obj
, true);
1245 JSONDecoder::decode_json("project", project
, root_obj
, true);
1248 if (parse_iso8601(expires_iso8601
.c_str(), &t
)) {
1249 token
.expires
= internal_timegm(&t
);
1252 throw JSONDecoder::err("Failed to parse ISO8601 expiration date"
1253 "from Keystone response.");
1257 void rgw::keystone::TokenEnvelope::decode_v2(JSONObj
* const root_obj
)
1259 JSONDecoder::decode_json("user", user
, root_obj
, true);
1260 JSONDecoder::decode_json("token", token
, root_obj
, true);
1262 roles
= user
.roles_v2
;
1263 project
= token
.tenant_v2
;
1266 void rgw_slo_entry::decode_json(JSONObj
*obj
)
1268 JSONDecoder::decode_json("path", path
, obj
);
1269 JSONDecoder::decode_json("etag", etag
, obj
);
1270 JSONDecoder::decode_json("size_bytes", size_bytes
, obj
);
1273 void rgw_meta_sync_info::decode_json(JSONObj
*obj
)
1276 JSONDecoder::decode_json("status", s
, obj
);
1279 } else if (s
== "building-full-sync-maps") {
1280 state
= StateBuildingFullSyncMaps
;
1281 } else if (s
== "sync") {
1284 JSONDecoder::decode_json("num_shards", num_shards
, obj
);
1285 JSONDecoder::decode_json("period", period
, obj
);
1286 JSONDecoder::decode_json("realm_epoch", realm_epoch
, obj
);
1289 void rgw_meta_sync_info::dump(Formatter
*f
) const
1292 switch ((SyncState
)state
) {
1296 case StateBuildingFullSyncMaps
:
1297 s
= "building-full-sync-maps";
1306 encode_json("status", s
, f
);
1307 encode_json("num_shards", num_shards
, f
);
1308 encode_json("period", period
, f
);
1309 encode_json("realm_epoch", realm_epoch
, f
);
1312 void rgw_meta_sync_marker::decode_json(JSONObj
*obj
)
1315 JSONDecoder::decode_json("state", s
, obj
);
1317 JSONDecoder::decode_json("marker", marker
, obj
);
1318 JSONDecoder::decode_json("next_step_marker", next_step_marker
, obj
);
1319 JSONDecoder::decode_json("total_entries", total_entries
, obj
);
1320 JSONDecoder::decode_json("pos", pos
, obj
);
1322 JSONDecoder::decode_json("timestamp", ut
, obj
);
1323 timestamp
= ut
.to_real_time();
1324 JSONDecoder::decode_json("realm_epoch", realm_epoch
, obj
);
1327 void rgw_meta_sync_marker::dump(Formatter
*f
) const
1329 encode_json("state", (int)state
, f
);
1330 encode_json("marker", marker
, f
);
1331 encode_json("next_step_marker", next_step_marker
, f
);
1332 encode_json("total_entries", total_entries
, f
);
1333 encode_json("pos", pos
, f
);
1334 encode_json("timestamp", utime_t(timestamp
), f
);
1335 encode_json("realm_epoch", realm_epoch
, f
);
1338 void rgw_meta_sync_status::decode_json(JSONObj
*obj
)
1340 JSONDecoder::decode_json("info", sync_info
, obj
);
1341 JSONDecoder::decode_json("markers", sync_markers
, obj
);
1344 void rgw_meta_sync_status::dump(Formatter
*f
) const {
1345 encode_json("info", sync_info
, f
);
1346 encode_json("markers", sync_markers
, f
);
1349 void rgw_sync_error_info::dump(Formatter
*f
) const {
1350 encode_json("source_zone", source_zone
, f
);
1351 encode_json("error_code", error_code
, f
);
1352 encode_json("message", message
, f
);
1355 void rgw_bucket_shard_full_sync_marker::decode_json(JSONObj
*obj
)
1357 JSONDecoder::decode_json("position", position
, obj
);
1358 JSONDecoder::decode_json("count", count
, obj
);
1361 void rgw_bucket_shard_full_sync_marker::dump(Formatter
*f
) const
1363 encode_json("position", position
, f
);
1364 encode_json("count", count
, f
);
1367 void rgw_bucket_shard_inc_sync_marker::decode_json(JSONObj
*obj
)
1369 JSONDecoder::decode_json("position", position
, obj
);
1372 void rgw_bucket_shard_inc_sync_marker::dump(Formatter
*f
) const
1374 encode_json("position", position
, f
);
1377 void rgw_bucket_shard_sync_info::decode_json(JSONObj
*obj
)
1380 JSONDecoder::decode_json("status", s
, obj
);
1381 if (s
== "full-sync") {
1382 state
= StateFullSync
;
1383 } else if (s
== "incremental-sync") {
1384 state
= StateIncrementalSync
;
1388 JSONDecoder::decode_json("full_marker", full_marker
, obj
);
1389 JSONDecoder::decode_json("inc_marker", inc_marker
, obj
);
1392 void rgw_bucket_shard_sync_info::dump(Formatter
*f
) const
1394 const char *s
{nullptr};
1395 switch ((SyncState
)state
) {
1402 case StateIncrementalSync
:
1403 s
= "incremental-sync";
1409 encode_json("status", s
, f
);
1410 encode_json("full_marker", full_marker
, f
);
1411 encode_json("inc_marker", inc_marker
, f
);
1414 /* This utility function shouldn't conflict with the overload of std::to_string
1415 * provided by string_ref since Boost 1.54 as it's defined outside of the std
1416 * namespace. I hope we'll remove it soon - just after merging the Matt's PR
1417 * for bundled Boost. It would allow us to forget that CentOS 7 has Boost 1.53. */
1418 static inline std::string
to_string(const boost::string_ref
& s
)
1420 return std::string(s
.data(), s
.length());
1423 void rgw::keystone::AdminTokenRequestVer2::dump(Formatter
* const f
) const
1425 f
->open_object_section("token_request");
1426 f
->open_object_section("auth");
1427 f
->open_object_section("passwordCredentials");
1428 encode_json("username", to_string(conf
.get_admin_user()), f
);
1429 encode_json("password", to_string(conf
.get_admin_password()), f
);
1431 encode_json("tenantName", to_string(conf
.get_admin_tenant()), f
);
1436 void rgw::keystone::AdminTokenRequestVer3::dump(Formatter
* const f
) const
1438 f
->open_object_section("token_request");
1439 f
->open_object_section("auth");
1440 f
->open_object_section("identity");
1441 f
->open_array_section("methods");
1442 f
->dump_string("", "password");
1444 f
->open_object_section("password");
1445 f
->open_object_section("user");
1446 f
->open_object_section("domain");
1447 encode_json("name", to_string(conf
.get_admin_domain()), f
);
1449 encode_json("name", to_string(conf
.get_admin_user()), f
);
1450 encode_json("password", to_string(conf
.get_admin_password()), f
);
1454 f
->open_object_section("scope");
1455 f
->open_object_section("project");
1456 if (! conf
.get_admin_project().empty()) {
1457 encode_json("name", to_string(conf
.get_admin_project()), f
);
1459 encode_json("name", to_string(conf
.get_admin_tenant()), f
);
1461 f
->open_object_section("domain");
1462 encode_json("name", to_string(conf
.get_admin_domain()), f
);
1471 void rgw::keystone::BarbicanTokenRequestVer2::dump(Formatter
* const f
) const
1473 f
->open_object_section("token_request");
1474 f
->open_object_section("auth");
1475 f
->open_object_section("passwordCredentials");
1476 encode_json("username", cct
->_conf
->rgw_keystone_barbican_user
, f
);
1477 encode_json("password", cct
->_conf
->rgw_keystone_barbican_password
, f
);
1479 encode_json("tenantName", cct
->_conf
->rgw_keystone_barbican_tenant
, f
);
1484 void rgw::keystone::BarbicanTokenRequestVer3::dump(Formatter
* const f
) const
1486 f
->open_object_section("token_request");
1487 f
->open_object_section("auth");
1488 f
->open_object_section("identity");
1489 f
->open_array_section("methods");
1490 f
->dump_string("", "password");
1492 f
->open_object_section("password");
1493 f
->open_object_section("user");
1494 f
->open_object_section("domain");
1495 encode_json("name", cct
->_conf
->rgw_keystone_barbican_domain
, f
);
1497 encode_json("name", cct
->_conf
->rgw_keystone_barbican_user
, f
);
1498 encode_json("password", cct
->_conf
->rgw_keystone_barbican_password
, f
);
1502 f
->open_object_section("scope");
1503 f
->open_object_section("project");
1504 if (!cct
->_conf
->rgw_keystone_barbican_project
.empty()) {
1505 encode_json("name", cct
->_conf
->rgw_keystone_barbican_project
, f
);
1507 encode_json("name", cct
->_conf
->rgw_keystone_barbican_tenant
, f
);
1509 f
->open_object_section("domain");
1510 encode_json("name", cct
->_conf
->rgw_keystone_barbican_domain
, f
);
1518 void RGWOrphanSearchStage::dump(Formatter
*f
) const
1520 f
->open_object_section("orphan_search_stage");
1523 case ORPHAN_SEARCH_STAGE_INIT
:
1526 case ORPHAN_SEARCH_STAGE_LSPOOL
:
1529 case ORPHAN_SEARCH_STAGE_LSBUCKETS
:
1532 case ORPHAN_SEARCH_STAGE_ITERATE_BI
:
1533 s
= "iterate_bucket_index";
1535 case ORPHAN_SEARCH_STAGE_COMPARE
:
1541 f
->dump_string("search_stage", s
);
1542 f
->dump_int("shard",shard
);
1543 f
->dump_string("marker",marker
);
1547 void RGWOrphanSearchInfo::dump(Formatter
*f
) const
1549 f
->open_object_section("orphan_search_info");
1550 f
->dump_string("job_name", job_name
);
1551 encode_json("pool", pool
, f
);
1552 f
->dump_int("num_shards", num_shards
);
1553 encode_json("start_time", start_time
, f
);
1557 void RGWOrphanSearchState::dump(Formatter
*f
) const
1559 f
->open_object_section("orphan_search_state");
1560 encode_json("info", info
, f
);
1561 encode_json("stage", stage
, f
);