1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
6 #include "cls/rgw/cls_rgw_types.h"
8 struct rgw_cls_tag_timeout_op
12 rgw_cls_tag_timeout_op() : tag_timeout(0) {}
14 void encode(ceph::buffer::list
&bl
) const {
15 ENCODE_START(1, 1, bl
);
16 encode(tag_timeout
, bl
);
19 void decode(ceph::buffer::list::const_iterator
&bl
) {
21 decode(tag_timeout
, bl
);
24 void dump(ceph::Formatter
*f
) const;
25 static void generate_test_instances(std::list
<rgw_cls_tag_timeout_op
*>& ls
);
27 WRITE_CLASS_ENCODER(rgw_cls_tag_timeout_op
)
29 struct rgw_cls_obj_prepare_op
37 rgw_zone_set zones_trace
;
39 rgw_cls_obj_prepare_op() : op(CLS_RGW_OP_UNKNOWN
), log_op(false), bilog_flags(0) {}
41 void encode(ceph::buffer::list
&bl
) const {
42 ENCODE_START(7, 5, bl
);
43 uint8_t c
= (uint8_t)op
;
49 encode(bilog_flags
, bl
);
50 encode(zones_trace
, bl
);
53 void decode(ceph::buffer::list::const_iterator
&bl
) {
54 DECODE_START_LEGACY_COMPAT_LEN(7, 3, 3, bl
);
72 decode(bilog_flags
, bl
);
75 decode(zones_trace
, bl
);
79 void dump(ceph::Formatter
*f
) const;
80 static void generate_test_instances(std::list
<rgw_cls_obj_prepare_op
*>& o
);
82 WRITE_CLASS_ENCODER(rgw_cls_obj_prepare_op
)
84 struct rgw_cls_obj_complete_op
89 rgw_bucket_entry_ver ver
;
90 rgw_bucket_dir_entry_meta meta
;
95 std::list
<cls_rgw_obj_key
> remove_objs
;
96 rgw_zone_set zones_trace
;
98 rgw_cls_obj_complete_op() : op(CLS_RGW_OP_ADD
), log_op(false), bilog_flags(0) {}
100 void encode(ceph::buffer::list
&bl
) const {
101 ENCODE_START(9, 7, bl
);
102 uint8_t c
= (uint8_t)op
;
104 encode(ver
.epoch
, bl
);
108 encode(remove_objs
, bl
);
112 encode(bilog_flags
, bl
);
113 encode(zones_trace
, bl
);
116 void decode(ceph::buffer::list::const_iterator
&bl
) {
117 DECODE_START_LEGACY_COMPAT_LEN(9, 3, 3, bl
);
122 decode(key
.name
, bl
);
124 decode(ver
.epoch
, bl
);
130 if (struct_v
>= 4 && struct_v
< 7) {
131 std::list
<std::string
> old_remove_objs
;
132 decode(old_remove_objs
, bl
);
134 for (auto iter
= old_remove_objs
.begin();
135 iter
!= old_remove_objs
.end(); ++iter
) {
138 remove_objs
.push_back(k
);
141 decode(remove_objs
, bl
);
155 decode(bilog_flags
, bl
);
158 decode(zones_trace
, bl
);
162 void dump(ceph::Formatter
*f
) const;
163 static void generate_test_instances(std::list
<rgw_cls_obj_complete_op
*>& o
);
165 WRITE_CLASS_ENCODER(rgw_cls_obj_complete_op
)
167 struct rgw_cls_link_olh_op
{
172 rgw_bucket_dir_entry_meta meta
;
175 uint16_t bilog_flags
;
176 ceph::real_time unmod_since
; /* only create delete marker if newer then this */
177 bool high_precision_time
;
178 rgw_zone_set zones_trace
;
180 rgw_cls_link_olh_op() : delete_marker(false), olh_epoch(0), log_op(false), bilog_flags(0), high_precision_time(false) {}
182 void encode(ceph::buffer::list
& bl
) const {
183 ENCODE_START(5, 1, bl
);
186 encode(delete_marker
, bl
);
189 encode(olh_epoch
, bl
);
191 encode(bilog_flags
, bl
);
192 uint64_t t
= ceph::real_clock::to_time_t(unmod_since
);
194 encode(unmod_since
, bl
);
195 encode(high_precision_time
, bl
);
196 encode(zones_trace
, bl
);
200 void decode(ceph::buffer::list::const_iterator
& bl
) {
204 decode(delete_marker
, bl
);
207 decode(olh_epoch
, bl
);
209 decode(bilog_flags
, bl
);
213 unmod_since
= ceph::real_clock::from_time_t(static_cast<time_t>(t
));
218 decode(unmod_since
, bl
);
221 decode(high_precision_time
, bl
);
224 decode(zones_trace
, bl
);
229 static void generate_test_instances(std::list
<rgw_cls_link_olh_op
*>& o
);
230 void dump(ceph::Formatter
*f
) const;
232 WRITE_CLASS_ENCODER(rgw_cls_link_olh_op
)
234 struct rgw_cls_unlink_instance_op
{
239 uint16_t bilog_flags
;
241 rgw_zone_set zones_trace
;
243 rgw_cls_unlink_instance_op() : olh_epoch(0), log_op(false), bilog_flags(0) {}
245 void encode(ceph::buffer::list
& bl
) const {
246 ENCODE_START(3, 1, bl
);
249 encode(olh_epoch
, bl
);
251 encode(bilog_flags
, bl
);
253 encode(zones_trace
, bl
);
257 void decode(ceph::buffer::list::const_iterator
& bl
) {
261 decode(olh_epoch
, bl
);
263 decode(bilog_flags
, bl
);
268 decode(zones_trace
, bl
);
273 static void generate_test_instances(std::list
<rgw_cls_unlink_instance_op
*>& o
);
274 void dump(ceph::Formatter
*f
) const;
276 WRITE_CLASS_ENCODER(rgw_cls_unlink_instance_op
)
278 struct rgw_cls_read_olh_log_op
284 rgw_cls_read_olh_log_op() : ver_marker(0) {}
286 void encode(ceph::buffer::list
&bl
) const {
287 ENCODE_START(1, 1, bl
);
289 encode(ver_marker
, bl
);
293 void decode(ceph::buffer::list::const_iterator
&bl
) {
296 decode(ver_marker
, bl
);
300 static void generate_test_instances(std::list
<rgw_cls_read_olh_log_op
*>& o
);
301 void dump(ceph::Formatter
*f
) const;
303 WRITE_CLASS_ENCODER(rgw_cls_read_olh_log_op
)
306 struct rgw_cls_read_olh_log_ret
308 std::map
<uint64_t, std::vector
<rgw_bucket_olh_log_entry
> > log
;
311 rgw_cls_read_olh_log_ret() : is_truncated(false) {}
313 void encode(ceph::buffer::list
&bl
) const {
314 ENCODE_START(1, 1, bl
);
316 encode(is_truncated
, bl
);
319 void decode(ceph::buffer::list::const_iterator
&bl
) {
322 decode(is_truncated
, bl
);
325 static void generate_test_instances(std::list
<rgw_cls_read_olh_log_ret
*>& o
);
326 void dump(ceph::Formatter
*f
) const;
328 WRITE_CLASS_ENCODER(rgw_cls_read_olh_log_ret
)
330 struct rgw_cls_trim_olh_log_op
336 rgw_cls_trim_olh_log_op() : ver(0) {}
338 void encode(ceph::buffer::list
&bl
) const {
339 ENCODE_START(1, 1, bl
);
345 void decode(ceph::buffer::list::const_iterator
&bl
) {
352 static void generate_test_instances(std::list
<rgw_cls_trim_olh_log_op
*>& o
);
353 void dump(ceph::Formatter
*f
) const;
355 WRITE_CLASS_ENCODER(rgw_cls_trim_olh_log_op
)
357 struct rgw_cls_bucket_clear_olh_op
{
361 rgw_cls_bucket_clear_olh_op() {}
363 void encode(ceph::buffer::list
& bl
) const {
364 ENCODE_START(1, 1, bl
);
370 void decode(ceph::buffer::list::const_iterator
& bl
) {
377 static void generate_test_instances(std::list
<rgw_cls_bucket_clear_olh_op
*>& o
);
378 void dump(ceph::Formatter
*f
) const;
380 WRITE_CLASS_ENCODER(rgw_cls_bucket_clear_olh_op
)
382 struct rgw_cls_list_op
384 cls_rgw_obj_key start_obj
;
385 uint32_t num_entries
;
386 std::string filter_prefix
;
388 std::string delimiter
;
390 rgw_cls_list_op() : num_entries(0), list_versions(false) {}
392 void encode(ceph::buffer::list
&bl
) const {
393 ENCODE_START(6, 4, bl
);
394 encode(num_entries
, bl
);
395 encode(filter_prefix
, bl
);
396 encode(start_obj
, bl
);
397 encode(list_versions
, bl
);
398 encode(delimiter
, bl
);
401 void decode(ceph::buffer::list::const_iterator
&bl
) {
402 DECODE_START_LEGACY_COMPAT_LEN(6, 2, 2, bl
);
404 decode(start_obj
.name
, bl
);
406 decode(num_entries
, bl
);
408 decode(filter_prefix
, bl
);
411 decode(start_obj
, bl
);
414 decode(list_versions
, bl
);
417 decode(delimiter
, bl
);
421 void dump(ceph::Formatter
*f
) const;
422 static void generate_test_instances(std::list
<rgw_cls_list_op
*>& o
);
424 WRITE_CLASS_ENCODER(rgw_cls_list_op
)
426 struct rgw_cls_list_ret
{
430 // if is_truncated is true, starting marker for next iteration; this
431 // is necessary as it's possible after maximum number of tries we
432 // still might have zero entries to return, in which case we have to
433 // at least move the ball foward
434 cls_rgw_obj_key marker
;
436 // cls_filtered is not transmitted; it is assumed true for versions
437 // on/after 3 and false for prior versions; this allows the rgw
438 // layer to know when an older osd (cls) does not do the filtering
446 void encode(ceph::buffer::list
&bl
) const {
447 ENCODE_START(4, 2, bl
);
449 encode(is_truncated
, bl
);
453 void decode(ceph::buffer::list::const_iterator
&bl
) {
454 DECODE_START_LEGACY_COMPAT_LEN(4, 2, 2, bl
);
456 decode(is_truncated
, bl
);
457 cls_filtered
= struct_v
>= 3;
463 void dump(ceph::Formatter
*f
) const;
464 static void generate_test_instances(std::list
<rgw_cls_list_ret
*>& o
);
466 WRITE_CLASS_ENCODER(rgw_cls_list_ret
)
468 struct rgw_cls_check_index_ret
470 rgw_bucket_dir_header existing_header
;
471 rgw_bucket_dir_header calculated_header
;
473 rgw_cls_check_index_ret() {}
475 void encode(ceph::buffer::list
&bl
) const {
476 ENCODE_START(1, 1, bl
);
477 encode(existing_header
, bl
);
478 encode(calculated_header
, bl
);
481 void decode(ceph::buffer::list::const_iterator
&bl
) {
483 decode(existing_header
, bl
);
484 decode(calculated_header
, bl
);
487 void dump(ceph::Formatter
*f
) const;
488 static void generate_test_instances(std::list
<rgw_cls_check_index_ret
*>& o
);
490 WRITE_CLASS_ENCODER(rgw_cls_check_index_ret
)
492 struct rgw_cls_bucket_update_stats_op
494 bool absolute
{false};
495 std::map
<RGWObjCategory
, rgw_bucket_category_stats
> stats
;
497 rgw_cls_bucket_update_stats_op() {}
499 void encode(ceph::buffer::list
&bl
) const {
500 ENCODE_START(1, 1, bl
);
501 encode(absolute
, bl
);
505 void decode(ceph::buffer::list::const_iterator
&bl
) {
507 decode(absolute
, bl
);
511 void dump(ceph::Formatter
*f
) const;
512 static void generate_test_instances(std::list
<rgw_cls_bucket_update_stats_op
*>& o
);
514 WRITE_CLASS_ENCODER(rgw_cls_bucket_update_stats_op
)
516 struct rgw_cls_obj_remove_op
{
517 std::list
<std::string
> keep_attr_prefixes
;
519 void encode(ceph::buffer::list
& bl
) const {
520 ENCODE_START(1, 1, bl
);
521 encode(keep_attr_prefixes
, bl
);
525 void decode(ceph::buffer::list::const_iterator
& bl
) {
527 decode(keep_attr_prefixes
, bl
);
531 WRITE_CLASS_ENCODER(rgw_cls_obj_remove_op
)
533 struct rgw_cls_obj_store_pg_ver_op
{
536 void encode(ceph::buffer::list
& bl
) const {
537 ENCODE_START(1, 1, bl
);
542 void decode(ceph::buffer::list::const_iterator
& bl
) {
548 WRITE_CLASS_ENCODER(rgw_cls_obj_store_pg_ver_op
)
550 struct rgw_cls_obj_check_attrs_prefix
{
551 std::string check_prefix
;
554 rgw_cls_obj_check_attrs_prefix() : fail_if_exist(false) {}
556 void encode(ceph::buffer::list
& bl
) const {
557 ENCODE_START(1, 1, bl
);
558 encode(check_prefix
, bl
);
559 encode(fail_if_exist
, bl
);
563 void decode(ceph::buffer::list::const_iterator
& bl
) {
565 decode(check_prefix
, bl
);
566 decode(fail_if_exist
, bl
);
570 WRITE_CLASS_ENCODER(rgw_cls_obj_check_attrs_prefix
)
572 struct rgw_cls_obj_check_mtime
{
573 ceph::real_time mtime
;
574 RGWCheckMTimeType type
;
575 bool high_precision_time
;
577 rgw_cls_obj_check_mtime() : type(CLS_RGW_CHECK_TIME_MTIME_EQ
), high_precision_time(false) {}
579 void encode(ceph::buffer::list
& bl
) const {
580 ENCODE_START(2, 1, bl
);
582 encode((uint8_t)type
, bl
);
583 encode(high_precision_time
, bl
);
587 void decode(ceph::buffer::list::const_iterator
& bl
) {
592 type
= (RGWCheckMTimeType
)c
;
594 decode(high_precision_time
, bl
);
599 WRITE_CLASS_ENCODER(rgw_cls_obj_check_mtime
)
601 struct rgw_cls_usage_log_add_op
{
602 rgw_usage_log_info info
;
605 void encode(ceph::buffer::list
& bl
) const {
606 ENCODE_START(2, 1, bl
);
608 encode(user
.to_str(), bl
);
612 void decode(ceph::buffer::list::const_iterator
& bl
) {
623 WRITE_CLASS_ENCODER(rgw_cls_usage_log_add_op
)
625 struct rgw_cls_bi_get_op
{
627 BIIndexType type
; /* namespace: plain, instance, olh */
629 rgw_cls_bi_get_op() : type(BIIndexType::Plain
) {}
631 void encode(ceph::buffer::list
& bl
) const {
632 ENCODE_START(1, 1, bl
);
634 encode((uint8_t)type
, bl
);
638 void decode(ceph::buffer::list::const_iterator
& bl
) {
643 type
= (BIIndexType
)c
;
647 WRITE_CLASS_ENCODER(rgw_cls_bi_get_op
)
649 struct rgw_cls_bi_get_ret
{
650 rgw_cls_bi_entry entry
;
652 rgw_cls_bi_get_ret() {}
654 void encode(ceph::buffer::list
& bl
) const {
655 ENCODE_START(1, 1, bl
);
660 void decode(ceph::buffer::list::const_iterator
& bl
) {
666 WRITE_CLASS_ENCODER(rgw_cls_bi_get_ret
)
668 struct rgw_cls_bi_put_op
{
669 rgw_cls_bi_entry entry
;
671 rgw_cls_bi_put_op() {}
673 void encode(ceph::buffer::list
& bl
) const {
674 ENCODE_START(1, 1, bl
);
679 void decode(ceph::buffer::list::const_iterator
& bl
) {
685 WRITE_CLASS_ENCODER(rgw_cls_bi_put_op
)
687 struct rgw_cls_bi_list_op
{
689 std::string name_filter
; // limit resultto one object and its instances
692 rgw_cls_bi_list_op() : max(0) {}
694 void encode(ceph::buffer::list
& bl
) const {
695 ENCODE_START(1, 1, bl
);
697 encode(name_filter
, bl
);
702 void decode(ceph::buffer::list::const_iterator
& bl
) {
705 decode(name_filter
, bl
);
710 WRITE_CLASS_ENCODER(rgw_cls_bi_list_op
)
712 struct rgw_cls_bi_list_ret
{
713 std::list
<rgw_cls_bi_entry
> entries
;
716 rgw_cls_bi_list_ret() : is_truncated(false) {}
718 void encode(ceph::buffer::list
& bl
) const {
719 ENCODE_START(1, 1, bl
);
721 encode(is_truncated
, bl
);
725 void decode(ceph::buffer::list::const_iterator
& bl
) {
728 decode(is_truncated
, bl
);
732 WRITE_CLASS_ENCODER(rgw_cls_bi_list_ret
)
734 struct rgw_cls_usage_log_read_op
{
735 uint64_t start_epoch
;
740 std::string iter
; // should be empty for the first call, non empty for subsequent calls
741 uint32_t max_entries
;
743 void encode(ceph::buffer::list
& bl
) const {
744 ENCODE_START(2, 1, bl
);
745 encode(start_epoch
, bl
);
746 encode(end_epoch
, bl
);
749 encode(max_entries
, bl
);
754 void decode(ceph::buffer::list::const_iterator
& bl
) {
756 decode(start_epoch
, bl
);
757 decode(end_epoch
, bl
);
760 decode(max_entries
, bl
);
767 WRITE_CLASS_ENCODER(rgw_cls_usage_log_read_op
)
769 struct rgw_cls_usage_log_read_ret
{
770 std::map
<rgw_user_bucket
, rgw_usage_log_entry
> usage
;
772 std::string next_iter
;
774 void encode(ceph::buffer::list
& bl
) const {
775 ENCODE_START(1, 1, bl
);
777 encode(truncated
, bl
);
778 encode(next_iter
, bl
);
782 void decode(ceph::buffer::list::const_iterator
& bl
) {
785 decode(truncated
, bl
);
786 decode(next_iter
, bl
);
790 WRITE_CLASS_ENCODER(rgw_cls_usage_log_read_ret
)
792 struct rgw_cls_usage_log_trim_op
{
793 uint64_t start_epoch
;
798 void encode(ceph::buffer::list
& bl
) const {
799 ENCODE_START(3, 2, bl
);
800 encode(start_epoch
, bl
);
801 encode(end_epoch
, bl
);
807 void decode(ceph::buffer::list::const_iterator
& bl
) {
809 decode(start_epoch
, bl
);
810 decode(end_epoch
, bl
);
818 WRITE_CLASS_ENCODER(rgw_cls_usage_log_trim_op
)
820 struct cls_rgw_gc_set_entry_op
{
821 uint32_t expiration_secs
;
822 cls_rgw_gc_obj_info info
;
823 cls_rgw_gc_set_entry_op() : expiration_secs(0) {}
825 void encode(ceph::buffer::list
& bl
) const {
826 ENCODE_START(1, 1, bl
);
827 encode(expiration_secs
, bl
);
832 void decode(ceph::buffer::list::const_iterator
& bl
) {
834 decode(expiration_secs
, bl
);
839 void dump(ceph::Formatter
*f
) const;
840 static void generate_test_instances(std::list
<cls_rgw_gc_set_entry_op
*>& ls
);
842 size_t estimate_encoded_size() const {
843 constexpr size_t start_overhead
= sizeof(__u8
) + sizeof(__u8
) + sizeof(ceph_le32
); // version and length prefix
844 constexpr size_t expr_secs_overhead
= sizeof(__u32
); // expiration_seconds_overhead
845 return start_overhead
+ expr_secs_overhead
+ info
.estimate_encoded_size();
848 WRITE_CLASS_ENCODER(cls_rgw_gc_set_entry_op
)
850 struct cls_rgw_gc_defer_entry_op
{
851 uint32_t expiration_secs
;
853 cls_rgw_gc_defer_entry_op() : expiration_secs(0) {}
855 void encode(ceph::buffer::list
& bl
) const {
856 ENCODE_START(1, 1, bl
);
857 encode(expiration_secs
, bl
);
862 void decode(ceph::buffer::list::const_iterator
& bl
) {
864 decode(expiration_secs
, bl
);
869 void dump(ceph::Formatter
*f
) const;
870 static void generate_test_instances(std::list
<cls_rgw_gc_defer_entry_op
*>& ls
);
872 WRITE_CLASS_ENCODER(cls_rgw_gc_defer_entry_op
)
874 struct cls_rgw_gc_list_op
{
879 cls_rgw_gc_list_op() : max(0), expired_only(true) {}
881 void encode(ceph::buffer::list
& bl
) const {
882 ENCODE_START(2, 1, bl
);
885 encode(expired_only
, bl
);
889 void decode(ceph::buffer::list::const_iterator
& bl
) {
894 decode(expired_only
, bl
);
899 void dump(ceph::Formatter
*f
) const;
900 static void generate_test_instances(std::list
<cls_rgw_gc_list_op
*>& ls
);
902 WRITE_CLASS_ENCODER(cls_rgw_gc_list_op
)
904 struct cls_rgw_gc_list_ret
{
905 std::list
<cls_rgw_gc_obj_info
> entries
;
906 std::string next_marker
;
909 cls_rgw_gc_list_ret() : truncated(false) {}
911 void encode(ceph::buffer::list
& bl
) const {
912 ENCODE_START(2, 1, bl
);
914 encode(next_marker
, bl
);
915 encode(truncated
, bl
);
919 void decode(ceph::buffer::list::const_iterator
& bl
) {
923 decode(next_marker
, bl
);
924 decode(truncated
, bl
);
928 void dump(ceph::Formatter
*f
) const;
929 static void generate_test_instances(std::list
<cls_rgw_gc_list_ret
*>& ls
);
931 WRITE_CLASS_ENCODER(cls_rgw_gc_list_ret
)
933 struct cls_rgw_gc_remove_op
{
934 std::vector
<std::string
> tags
;
936 cls_rgw_gc_remove_op() {}
938 void encode(ceph::buffer::list
& bl
) const {
939 ENCODE_START(1, 1, bl
);
944 void decode(ceph::buffer::list::const_iterator
& bl
) {
950 void dump(ceph::Formatter
*f
) const;
951 static void generate_test_instances(std::list
<cls_rgw_gc_remove_op
*>& ls
);
953 WRITE_CLASS_ENCODER(cls_rgw_gc_remove_op
)
955 struct cls_rgw_bi_log_list_op
{
959 cls_rgw_bi_log_list_op() : max(0) {}
961 void encode(ceph::buffer::list
& bl
) const {
962 ENCODE_START(1, 1, bl
);
968 void decode(ceph::buffer::list::const_iterator
& bl
) {
975 void dump(ceph::Formatter
*f
) const;
976 static void generate_test_instances(std::list
<cls_rgw_bi_log_list_op
*>& ls
);
978 WRITE_CLASS_ENCODER(cls_rgw_bi_log_list_op
)
980 struct cls_rgw_bi_log_trim_op
{
981 std::string start_marker
;
982 std::string end_marker
;
984 cls_rgw_bi_log_trim_op() {}
986 void encode(ceph::buffer::list
& bl
) const {
987 ENCODE_START(1, 1, bl
);
988 encode(start_marker
, bl
);
989 encode(end_marker
, bl
);
993 void decode(ceph::buffer::list::const_iterator
& bl
) {
995 decode(start_marker
, bl
);
996 decode(end_marker
, bl
);
1000 void dump(ceph::Formatter
*f
) const;
1001 static void generate_test_instances(std::list
<cls_rgw_bi_log_trim_op
*>& ls
);
1003 WRITE_CLASS_ENCODER(cls_rgw_bi_log_trim_op
)
1005 struct cls_rgw_bi_log_list_ret
{
1006 std::list
<rgw_bi_log_entry
> entries
;
1009 cls_rgw_bi_log_list_ret() : truncated(false) {}
1011 void encode(ceph::buffer::list
& bl
) const {
1012 ENCODE_START(1, 1, bl
);
1013 encode(entries
, bl
);
1014 encode(truncated
, bl
);
1018 void decode(ceph::buffer::list::const_iterator
& bl
) {
1019 DECODE_START(1, bl
);
1020 decode(entries
, bl
);
1021 decode(truncated
, bl
);
1025 void dump(ceph::Formatter
*f
) const;
1026 static void generate_test_instances(std::list
<cls_rgw_bi_log_list_ret
*>& ls
);
1028 WRITE_CLASS_ENCODER(cls_rgw_bi_log_list_ret
)
1030 struct cls_rgw_lc_get_next_entry_op
{
1032 cls_rgw_lc_get_next_entry_op() {}
1034 void encode(ceph::buffer::list
& bl
) const {
1035 ENCODE_START(1, 1, bl
);
1040 void decode(ceph::buffer::list::const_iterator
& bl
) {
1041 DECODE_START(1, bl
);
1046 WRITE_CLASS_ENCODER(cls_rgw_lc_get_next_entry_op
)
1048 struct cls_rgw_lc_get_next_entry_ret
{
1049 cls_rgw_lc_entry entry
;
1051 cls_rgw_lc_get_next_entry_ret() {}
1053 void encode(ceph::buffer::list
& bl
) const {
1054 ENCODE_START(2, 2, bl
);
1059 void decode(ceph::buffer::list::const_iterator
& bl
) {
1060 DECODE_START(2, bl
);
1062 std::pair
<std::string
, int> oe
;
1064 entry
= {oe
.first
, 0 /* start */, uint32_t(oe
.second
)};
1072 WRITE_CLASS_ENCODER(cls_rgw_lc_get_next_entry_ret
)
1074 struct cls_rgw_lc_get_entry_op
{
1076 cls_rgw_lc_get_entry_op() {}
1077 cls_rgw_lc_get_entry_op(const std::string
& _marker
) : marker(_marker
) {}
1079 void encode(ceph::buffer::list
& bl
) const {
1080 ENCODE_START(1, 1, bl
);
1085 void decode(ceph::buffer::list::const_iterator
& bl
) {
1086 DECODE_START(1, bl
);
1091 WRITE_CLASS_ENCODER(cls_rgw_lc_get_entry_op
)
1093 struct cls_rgw_lc_get_entry_ret
{
1094 cls_rgw_lc_entry entry
;
1096 cls_rgw_lc_get_entry_ret() {}
1097 cls_rgw_lc_get_entry_ret(cls_rgw_lc_entry
&& _entry
)
1098 : entry(std::move(_entry
)) {}
1100 void encode(ceph::buffer::list
& bl
) const {
1101 ENCODE_START(2, 2, bl
);
1106 void decode(ceph::buffer::list::const_iterator
& bl
) {
1107 DECODE_START(2, bl
);
1109 /* there was an unmarked change in the encoding during v1, so
1110 * if the sender version is v1, try decoding both ways (sorry) */
1111 ceph::buffer::list::const_iterator save_bl
= bl
;
1114 } catch (ceph::buffer::error
& e
) {
1115 std::pair
<std::string
, int> oe
;
1118 entry
.bucket
= oe
.first
;
1119 entry
.start_time
= 0;
1120 entry
.status
= oe
.second
;
1127 void dump(ceph::Formatter
*f
) const;
1128 static void generate_test_instances(std::list
<cls_rgw_lc_get_entry_ret
*>& ls
);
1130 WRITE_CLASS_ENCODER(cls_rgw_lc_get_entry_ret
)
1132 struct cls_rgw_lc_rm_entry_op
{
1133 cls_rgw_lc_entry entry
;
1134 cls_rgw_lc_rm_entry_op() {}
1136 void encode(ceph::buffer::list
& bl
) const {
1137 ENCODE_START(2, 2, bl
);
1142 void decode(ceph::buffer::list::const_iterator
& bl
) {
1143 DECODE_START(2, bl
);
1145 std::pair
<std::string
, int> oe
;
1147 entry
= {oe
.first
, 0 /* start */, uint32_t(oe
.second
)};
1154 WRITE_CLASS_ENCODER(cls_rgw_lc_rm_entry_op
)
1156 struct cls_rgw_lc_set_entry_op
{
1157 cls_rgw_lc_entry entry
;
1158 cls_rgw_lc_set_entry_op() {}
1160 void encode(ceph::buffer::list
& bl
) const {
1161 ENCODE_START(2, 2, bl
);
1166 void decode(ceph::buffer::list::const_iterator
& bl
) {
1167 DECODE_START(2, bl
);
1169 std::pair
<std::string
, int> oe
;
1171 entry
= {oe
.first
, 0 /* start */, uint32_t(oe
.second
)};
1178 WRITE_CLASS_ENCODER(cls_rgw_lc_set_entry_op
)
1180 struct cls_rgw_lc_put_head_op
{
1181 cls_rgw_lc_obj_head head
;
1184 cls_rgw_lc_put_head_op() {}
1186 void encode(ceph::buffer::list
& bl
) const {
1187 ENCODE_START(1, 1, bl
);
1192 void decode(ceph::buffer::list::const_iterator
& bl
) {
1193 DECODE_START(1, bl
);
1199 WRITE_CLASS_ENCODER(cls_rgw_lc_put_head_op
)
1201 struct cls_rgw_lc_get_head_ret
{
1202 cls_rgw_lc_obj_head head
;
1204 cls_rgw_lc_get_head_ret() {}
1206 void encode(ceph::buffer::list
& bl
) const {
1207 ENCODE_START(1, 1, bl
);
1212 void decode(ceph::buffer::list::const_iterator
& bl
) {
1213 DECODE_START(1, bl
);
1219 WRITE_CLASS_ENCODER(cls_rgw_lc_get_head_ret
)
1221 struct cls_rgw_lc_list_entries_op
{
1223 uint32_t max_entries
= 0;
1224 uint8_t compat_v
{0};
1226 cls_rgw_lc_list_entries_op() {}
1228 void encode(ceph::buffer::list
& bl
) const {
1229 ENCODE_START(3, 1, bl
);
1231 encode(max_entries
, bl
);
1235 void decode(ceph::buffer::list::const_iterator
& bl
) {
1236 DECODE_START(3, bl
);
1237 compat_v
= struct_v
;
1239 decode(max_entries
, bl
);
1244 WRITE_CLASS_ENCODER(cls_rgw_lc_list_entries_op
)
1246 struct cls_rgw_lc_list_entries_ret
{
1247 std::vector
<cls_rgw_lc_entry
> entries
;
1248 bool is_truncated
{false};
1251 cls_rgw_lc_list_entries_ret(uint8_t compat_v
= 3)
1252 : compat_v(compat_v
) {}
1254 void encode(ceph::buffer::list
& bl
) const {
1255 ENCODE_START(compat_v
, 1, bl
);
1256 if (compat_v
<= 2) {
1257 std::map
<std::string
, int> oes
;
1258 std::for_each(entries
.begin(), entries
.end(),
1259 [&oes
](const cls_rgw_lc_entry
& elt
)
1260 {oes
.insert({elt
.bucket
, elt
.status
});});
1263 encode(entries
, bl
);
1265 encode(is_truncated
, bl
);
1269 void decode(ceph::buffer::list::const_iterator
& bl
) {
1270 DECODE_START(3, bl
);
1271 compat_v
= struct_v
;
1272 if (struct_v
<= 2) {
1273 std::map
<std::string
, int> oes
;
1275 std::for_each(oes
.begin(), oes
.end(),
1276 [this](const std::pair
<std::string
, int>& oe
)
1277 {entries
.push_back({oe
.first
, 0 /* start */,
1278 uint32_t(oe
.second
)});});
1280 decode(entries
, bl
);
1282 if (struct_v
>= 2) {
1283 decode(is_truncated
, bl
);
1288 WRITE_CLASS_ENCODER(cls_rgw_lc_list_entries_ret
)
1290 struct cls_rgw_mp_upload_part_info_update_op
{
1291 std::string part_key
;
1292 RGWUploadPartInfo info
;
1294 cls_rgw_mp_upload_part_info_update_op() {}
1296 void encode(buffer::list
& bl
) const {
1297 ENCODE_START(1, 1, bl
);
1298 encode(part_key
, bl
);
1303 void decode(buffer::list::const_iterator
& bl
) {
1304 DECODE_START(1, bl
);
1305 decode(part_key
, bl
);
1310 static void generate_test_instances(std::list
<cls_rgw_mp_upload_part_info_update_op
*>& ls
);
1311 void dump(Formatter
* f
) const;
1313 WRITE_CLASS_ENCODER(cls_rgw_mp_upload_part_info_update_op
)
1315 struct cls_rgw_reshard_add_op
{
1316 cls_rgw_reshard_entry entry
;
1318 cls_rgw_reshard_add_op() {}
1320 void encode(ceph::buffer::list
& bl
) const {
1321 ENCODE_START(1, 1, bl
);
1326 void decode(ceph::buffer::list::const_iterator
& bl
) {
1327 DECODE_START(1, bl
);
1331 static void generate_test_instances(std::list
<cls_rgw_reshard_add_op
*>& o
);
1332 void dump(ceph::Formatter
*f
) const;
1334 WRITE_CLASS_ENCODER(cls_rgw_reshard_add_op
)
1336 struct cls_rgw_reshard_list_op
{
1340 cls_rgw_reshard_list_op() {}
1342 void encode(ceph::buffer::list
& bl
) const {
1343 ENCODE_START(1, 1, bl
);
1349 void decode(ceph::buffer::list::const_iterator
& bl
) {
1350 DECODE_START(1, bl
);
1355 static void generate_test_instances(std::list
<cls_rgw_reshard_list_op
*>& o
);
1356 void dump(ceph::Formatter
*f
) const;
1358 WRITE_CLASS_ENCODER(cls_rgw_reshard_list_op
)
1361 struct cls_rgw_reshard_list_ret
{
1362 std::list
<cls_rgw_reshard_entry
> entries
;
1363 bool is_truncated
{false};
1365 cls_rgw_reshard_list_ret() {}
1367 void encode(ceph::buffer::list
& bl
) const {
1368 ENCODE_START(1, 1, bl
);
1369 encode(entries
, bl
);
1370 encode(is_truncated
, bl
);
1374 void decode(ceph::buffer::list::const_iterator
& bl
) {
1375 DECODE_START(1, bl
);
1376 decode(entries
, bl
);
1377 decode(is_truncated
, bl
);
1380 static void generate_test_instances(std::list
<cls_rgw_reshard_list_ret
*>& o
);
1381 void dump(ceph::Formatter
*f
) const;
1383 WRITE_CLASS_ENCODER(cls_rgw_reshard_list_ret
)
1385 struct cls_rgw_reshard_get_op
{
1386 cls_rgw_reshard_entry entry
;
1388 cls_rgw_reshard_get_op() {}
1390 void encode(ceph::buffer::list
& bl
) const {
1391 ENCODE_START(1, 1, bl
);
1396 void decode(ceph::buffer::list::const_iterator
& bl
) {
1397 DECODE_START(1, bl
);
1401 static void generate_test_instances(std::list
<cls_rgw_reshard_get_op
*>& o
);
1402 void dump(ceph::Formatter
*f
) const;
1404 WRITE_CLASS_ENCODER(cls_rgw_reshard_get_op
)
1406 struct cls_rgw_reshard_get_ret
{
1407 cls_rgw_reshard_entry entry
;
1409 cls_rgw_reshard_get_ret() {}
1411 void encode(ceph::buffer::list
& bl
) const {
1412 ENCODE_START(1, 1, bl
);
1417 void decode(ceph::buffer::list::const_iterator
& bl
) {
1418 DECODE_START(1, bl
);
1422 static void generate_test_instances(std::list
<cls_rgw_reshard_get_ret
*>& o
);
1423 void dump(ceph::Formatter
*f
) const;
1425 WRITE_CLASS_ENCODER(cls_rgw_reshard_get_ret
)
1427 struct cls_rgw_reshard_remove_op
{
1429 std::string bucket_name
;
1430 std::string bucket_id
;
1432 cls_rgw_reshard_remove_op() {}
1434 void encode(ceph::buffer::list
& bl
) const {
1435 ENCODE_START(1, 1, bl
);
1437 encode(bucket_name
, bl
);
1438 encode(bucket_id
, bl
);
1442 void decode(ceph::buffer::list::const_iterator
& bl
) {
1443 DECODE_START(1, bl
);
1445 decode(bucket_name
, bl
);
1446 decode(bucket_id
, bl
);
1449 static void generate_test_instances(std::list
<cls_rgw_reshard_remove_op
*>& o
);
1450 void dump(ceph::Formatter
*f
) const;
1452 WRITE_CLASS_ENCODER(cls_rgw_reshard_remove_op
)
1454 struct cls_rgw_set_bucket_resharding_op
{
1455 cls_rgw_bucket_instance_entry entry
;
1457 void encode(ceph::buffer::list
& bl
) const {
1458 ENCODE_START(1, 1, bl
);
1463 void decode(ceph::buffer::list::const_iterator
& bl
) {
1464 DECODE_START(1, bl
);
1468 static void generate_test_instances(std::list
<cls_rgw_set_bucket_resharding_op
*>& o
);
1469 void dump(ceph::Formatter
*f
) const;
1471 WRITE_CLASS_ENCODER(cls_rgw_set_bucket_resharding_op
)
1473 struct cls_rgw_clear_bucket_resharding_op
{
1474 void encode(ceph::buffer::list
& bl
) const {
1475 ENCODE_START(1, 1, bl
);
1479 void decode(ceph::buffer::list::const_iterator
& bl
) {
1480 DECODE_START(1, bl
);
1483 static void generate_test_instances(std::list
<cls_rgw_clear_bucket_resharding_op
*>& o
);
1484 void dump(ceph::Formatter
*f
) const;
1486 WRITE_CLASS_ENCODER(cls_rgw_clear_bucket_resharding_op
)
1488 struct cls_rgw_guard_bucket_resharding_op
{
1491 void encode(ceph::buffer::list
& bl
) const {
1492 ENCODE_START(1, 1, bl
);
1493 encode(ret_err
, bl
);
1497 void decode(ceph::buffer::list::const_iterator
& bl
) {
1498 DECODE_START(1, bl
);
1499 decode(ret_err
, bl
);
1503 static void generate_test_instances(std::list
<cls_rgw_guard_bucket_resharding_op
*>& o
);
1504 void dump(ceph::Formatter
*f
) const;
1506 WRITE_CLASS_ENCODER(cls_rgw_guard_bucket_resharding_op
)
1508 struct cls_rgw_get_bucket_resharding_op
{
1510 void encode(ceph::buffer::list
& bl
) const {
1511 ENCODE_START(1, 1, bl
);
1515 void decode(ceph::buffer::list::const_iterator
& bl
) {
1516 DECODE_START(1, bl
);
1520 static void generate_test_instances(std::list
<cls_rgw_get_bucket_resharding_op
*>& o
);
1521 void dump(ceph::Formatter
*f
) const;
1523 WRITE_CLASS_ENCODER(cls_rgw_get_bucket_resharding_op
)
1525 struct cls_rgw_get_bucket_resharding_ret
{
1526 cls_rgw_bucket_instance_entry new_instance
;
1528 void encode(ceph::buffer::list
& bl
) const {
1529 ENCODE_START(1, 1, bl
);
1530 encode(new_instance
, bl
);
1534 void decode(ceph::buffer::list::const_iterator
& bl
) {
1535 DECODE_START(1, bl
);
1536 decode(new_instance
, bl
);
1540 static void generate_test_instances(std::list
<cls_rgw_get_bucket_resharding_ret
*>& o
);
1541 void dump(ceph::Formatter
*f
) const;
1543 WRITE_CLASS_ENCODER(cls_rgw_get_bucket_resharding_ret
)