1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #ifndef CEPH_CLS_RGW_OPS_H
5 #define CEPH_CLS_RGW_OPS_H
7 #include "cls/rgw/cls_rgw_types.h"
9 struct rgw_cls_tag_timeout_op
13 rgw_cls_tag_timeout_op() : tag_timeout(0) {}
15 void encode(ceph::buffer::list
&bl
) const {
16 ENCODE_START(1, 1, bl
);
17 encode(tag_timeout
, bl
);
20 void decode(ceph::buffer::list::const_iterator
&bl
) {
22 decode(tag_timeout
, bl
);
25 void dump(ceph::Formatter
*f
) const;
26 static void generate_test_instances(std::list
<rgw_cls_tag_timeout_op
*>& ls
);
28 WRITE_CLASS_ENCODER(rgw_cls_tag_timeout_op
)
30 struct rgw_cls_obj_prepare_op
38 rgw_zone_set zones_trace
;
40 rgw_cls_obj_prepare_op() : op(CLS_RGW_OP_UNKNOWN
), log_op(false), bilog_flags(0) {}
42 void encode(ceph::buffer::list
&bl
) const {
43 ENCODE_START(7, 5, bl
);
44 uint8_t c
= (uint8_t)op
;
50 encode(bilog_flags
, bl
);
51 encode(zones_trace
, bl
);
54 void decode(ceph::buffer::list::const_iterator
&bl
) {
55 DECODE_START_LEGACY_COMPAT_LEN(7, 3, 3, bl
);
73 decode(bilog_flags
, bl
);
76 decode(zones_trace
, bl
);
80 void dump(ceph::Formatter
*f
) const;
81 static void generate_test_instances(std::list
<rgw_cls_obj_prepare_op
*>& o
);
83 WRITE_CLASS_ENCODER(rgw_cls_obj_prepare_op
)
85 struct rgw_cls_obj_complete_op
90 rgw_bucket_entry_ver ver
;
91 rgw_bucket_dir_entry_meta meta
;
96 std::list
<cls_rgw_obj_key
> remove_objs
;
97 rgw_zone_set zones_trace
;
99 rgw_cls_obj_complete_op() : op(CLS_RGW_OP_ADD
), log_op(false), bilog_flags(0) {}
101 void encode(ceph::buffer::list
&bl
) const {
102 ENCODE_START(9, 7, bl
);
103 uint8_t c
= (uint8_t)op
;
105 encode(ver
.epoch
, bl
);
109 encode(remove_objs
, bl
);
113 encode(bilog_flags
, bl
);
114 encode(zones_trace
, bl
);
117 void decode(ceph::buffer::list::const_iterator
&bl
) {
118 DECODE_START_LEGACY_COMPAT_LEN(9, 3, 3, bl
);
123 decode(key
.name
, bl
);
125 decode(ver
.epoch
, bl
);
131 if (struct_v
>= 4 && struct_v
< 7) {
132 std::list
<std::string
> old_remove_objs
;
133 decode(old_remove_objs
, bl
);
135 for (auto iter
= old_remove_objs
.begin();
136 iter
!= old_remove_objs
.end(); ++iter
) {
139 remove_objs
.push_back(k
);
142 decode(remove_objs
, bl
);
156 decode(bilog_flags
, bl
);
159 decode(zones_trace
, bl
);
163 void dump(ceph::Formatter
*f
) const;
164 static void generate_test_instances(std::list
<rgw_cls_obj_complete_op
*>& o
);
166 WRITE_CLASS_ENCODER(rgw_cls_obj_complete_op
)
168 struct rgw_cls_link_olh_op
{
173 rgw_bucket_dir_entry_meta meta
;
176 uint16_t bilog_flags
;
177 ceph::real_time unmod_since
; /* only create delete marker if newer then this */
178 bool high_precision_time
;
179 rgw_zone_set zones_trace
;
181 rgw_cls_link_olh_op() : delete_marker(false), olh_epoch(0), log_op(false), bilog_flags(0), high_precision_time(false) {}
183 void encode(ceph::buffer::list
& bl
) const {
184 ENCODE_START(5, 1, bl
);
187 encode(delete_marker
, bl
);
190 encode(olh_epoch
, bl
);
192 encode(bilog_flags
, bl
);
193 uint64_t t
= ceph::real_clock::to_time_t(unmod_since
);
195 encode(unmod_since
, bl
);
196 encode(high_precision_time
, bl
);
197 encode(zones_trace
, bl
);
201 void decode(ceph::buffer::list::const_iterator
& bl
) {
205 decode(delete_marker
, bl
);
208 decode(olh_epoch
, bl
);
210 decode(bilog_flags
, bl
);
214 unmod_since
= ceph::real_clock::from_time_t(static_cast<time_t>(t
));
219 decode(unmod_since
, bl
);
222 decode(high_precision_time
, bl
);
225 decode(zones_trace
, bl
);
230 static void generate_test_instances(std::list
<rgw_cls_link_olh_op
*>& o
);
231 void dump(ceph::Formatter
*f
) const;
233 WRITE_CLASS_ENCODER(rgw_cls_link_olh_op
)
235 struct rgw_cls_unlink_instance_op
{
240 uint16_t bilog_flags
;
242 rgw_zone_set zones_trace
;
244 rgw_cls_unlink_instance_op() : olh_epoch(0), log_op(false), bilog_flags(0) {}
246 void encode(ceph::buffer::list
& bl
) const {
247 ENCODE_START(3, 1, bl
);
250 encode(olh_epoch
, bl
);
252 encode(bilog_flags
, bl
);
254 encode(zones_trace
, bl
);
258 void decode(ceph::buffer::list::const_iterator
& bl
) {
262 decode(olh_epoch
, bl
);
264 decode(bilog_flags
, bl
);
269 decode(zones_trace
, bl
);
274 static void generate_test_instances(std::list
<rgw_cls_unlink_instance_op
*>& o
);
275 void dump(ceph::Formatter
*f
) const;
277 WRITE_CLASS_ENCODER(rgw_cls_unlink_instance_op
)
279 struct rgw_cls_read_olh_log_op
285 rgw_cls_read_olh_log_op() : ver_marker(0) {}
287 void encode(ceph::buffer::list
&bl
) const {
288 ENCODE_START(1, 1, bl
);
290 encode(ver_marker
, bl
);
294 void decode(ceph::buffer::list::const_iterator
&bl
) {
297 decode(ver_marker
, bl
);
301 static void generate_test_instances(std::list
<rgw_cls_read_olh_log_op
*>& o
);
302 void dump(ceph::Formatter
*f
) const;
304 WRITE_CLASS_ENCODER(rgw_cls_read_olh_log_op
)
307 struct rgw_cls_read_olh_log_ret
309 std::map
<uint64_t, std::vector
<rgw_bucket_olh_log_entry
> > log
;
312 rgw_cls_read_olh_log_ret() : is_truncated(false) {}
314 void encode(ceph::buffer::list
&bl
) const {
315 ENCODE_START(1, 1, bl
);
317 encode(is_truncated
, bl
);
320 void decode(ceph::buffer::list::const_iterator
&bl
) {
323 decode(is_truncated
, bl
);
326 static void generate_test_instances(std::list
<rgw_cls_read_olh_log_ret
*>& o
);
327 void dump(ceph::Formatter
*f
) const;
329 WRITE_CLASS_ENCODER(rgw_cls_read_olh_log_ret
)
331 struct rgw_cls_trim_olh_log_op
337 rgw_cls_trim_olh_log_op() : ver(0) {}
339 void encode(ceph::buffer::list
&bl
) const {
340 ENCODE_START(1, 1, bl
);
346 void decode(ceph::buffer::list::const_iterator
&bl
) {
353 static void generate_test_instances(std::list
<rgw_cls_trim_olh_log_op
*>& o
);
354 void dump(ceph::Formatter
*f
) const;
356 WRITE_CLASS_ENCODER(rgw_cls_trim_olh_log_op
)
358 struct rgw_cls_bucket_clear_olh_op
{
362 rgw_cls_bucket_clear_olh_op() {}
364 void encode(ceph::buffer::list
& bl
) const {
365 ENCODE_START(1, 1, bl
);
371 void decode(ceph::buffer::list::const_iterator
& bl
) {
378 static void generate_test_instances(std::list
<rgw_cls_bucket_clear_olh_op
*>& o
);
379 void dump(ceph::Formatter
*f
) const;
381 WRITE_CLASS_ENCODER(rgw_cls_bucket_clear_olh_op
)
383 struct rgw_cls_list_op
385 cls_rgw_obj_key start_obj
;
386 uint32_t num_entries
;
387 std::string filter_prefix
;
389 std::string delimiter
;
391 rgw_cls_list_op() : num_entries(0), list_versions(false) {}
393 void encode(ceph::buffer::list
&bl
) const {
394 ENCODE_START(6, 4, bl
);
395 encode(num_entries
, bl
);
396 encode(filter_prefix
, bl
);
397 encode(start_obj
, bl
);
398 encode(list_versions
, bl
);
399 encode(delimiter
, bl
);
402 void decode(ceph::buffer::list::const_iterator
&bl
) {
403 DECODE_START_LEGACY_COMPAT_LEN(6, 2, 2, bl
);
405 decode(start_obj
.name
, bl
);
407 decode(num_entries
, bl
);
409 decode(filter_prefix
, bl
);
412 decode(start_obj
, bl
);
415 decode(list_versions
, bl
);
418 decode(delimiter
, bl
);
422 void dump(ceph::Formatter
*f
) const;
423 static void generate_test_instances(std::list
<rgw_cls_list_op
*>& o
);
425 WRITE_CLASS_ENCODER(rgw_cls_list_op
)
427 struct rgw_cls_list_ret
{
431 // cls_filtered is not transmitted; it is assumed true for versions
432 // on/after 3 and false for prior versions; this allows the rgw
433 // layer to know when an older osd (cls) does not do the filtering
441 void encode(ceph::buffer::list
&bl
) const {
442 ENCODE_START(3, 2, bl
);
444 encode(is_truncated
, bl
);
447 void decode(ceph::buffer::list::const_iterator
&bl
) {
448 DECODE_START_LEGACY_COMPAT_LEN(3, 2, 2, bl
);
450 decode(is_truncated
, bl
);
451 cls_filtered
= struct_v
>= 3;
454 void dump(ceph::Formatter
*f
) const;
455 static void generate_test_instances(std::list
<rgw_cls_list_ret
*>& o
);
457 WRITE_CLASS_ENCODER(rgw_cls_list_ret
)
459 struct rgw_cls_check_index_ret
461 rgw_bucket_dir_header existing_header
;
462 rgw_bucket_dir_header calculated_header
;
464 rgw_cls_check_index_ret() {}
466 void encode(ceph::buffer::list
&bl
) const {
467 ENCODE_START(1, 1, bl
);
468 encode(existing_header
, bl
);
469 encode(calculated_header
, bl
);
472 void decode(ceph::buffer::list::const_iterator
&bl
) {
474 decode(existing_header
, bl
);
475 decode(calculated_header
, bl
);
478 void dump(ceph::Formatter
*f
) const;
479 static void generate_test_instances(std::list
<rgw_cls_check_index_ret
*>& o
);
481 WRITE_CLASS_ENCODER(rgw_cls_check_index_ret
)
483 struct rgw_cls_bucket_update_stats_op
485 bool absolute
{false};
486 std::map
<RGWObjCategory
, rgw_bucket_category_stats
> stats
;
488 rgw_cls_bucket_update_stats_op() {}
490 void encode(ceph::buffer::list
&bl
) const {
491 ENCODE_START(1, 1, bl
);
492 encode(absolute
, bl
);
496 void decode(ceph::buffer::list::const_iterator
&bl
) {
498 decode(absolute
, bl
);
502 void dump(ceph::Formatter
*f
) const;
503 static void generate_test_instances(std::list
<rgw_cls_bucket_update_stats_op
*>& o
);
505 WRITE_CLASS_ENCODER(rgw_cls_bucket_update_stats_op
)
507 struct rgw_cls_obj_remove_op
{
508 std::list
<std::string
> keep_attr_prefixes
;
510 void encode(ceph::buffer::list
& bl
) const {
511 ENCODE_START(1, 1, bl
);
512 encode(keep_attr_prefixes
, bl
);
516 void decode(ceph::buffer::list::const_iterator
& bl
) {
518 decode(keep_attr_prefixes
, bl
);
522 WRITE_CLASS_ENCODER(rgw_cls_obj_remove_op
)
524 struct rgw_cls_obj_store_pg_ver_op
{
527 void encode(ceph::buffer::list
& bl
) const {
528 ENCODE_START(1, 1, bl
);
533 void decode(ceph::buffer::list::const_iterator
& bl
) {
539 WRITE_CLASS_ENCODER(rgw_cls_obj_store_pg_ver_op
)
541 struct rgw_cls_obj_check_attrs_prefix
{
542 std::string check_prefix
;
545 rgw_cls_obj_check_attrs_prefix() : fail_if_exist(false) {}
547 void encode(ceph::buffer::list
& bl
) const {
548 ENCODE_START(1, 1, bl
);
549 encode(check_prefix
, bl
);
550 encode(fail_if_exist
, bl
);
554 void decode(ceph::buffer::list::const_iterator
& bl
) {
556 decode(check_prefix
, bl
);
557 decode(fail_if_exist
, bl
);
561 WRITE_CLASS_ENCODER(rgw_cls_obj_check_attrs_prefix
)
563 struct rgw_cls_obj_check_mtime
{
564 ceph::real_time mtime
;
565 RGWCheckMTimeType type
;
566 bool high_precision_time
;
568 rgw_cls_obj_check_mtime() : type(CLS_RGW_CHECK_TIME_MTIME_EQ
), high_precision_time(false) {}
570 void encode(ceph::buffer::list
& bl
) const {
571 ENCODE_START(2, 1, bl
);
573 encode((uint8_t)type
, bl
);
574 encode(high_precision_time
, bl
);
578 void decode(ceph::buffer::list::const_iterator
& bl
) {
583 type
= (RGWCheckMTimeType
)c
;
585 decode(high_precision_time
, bl
);
590 WRITE_CLASS_ENCODER(rgw_cls_obj_check_mtime
)
592 struct rgw_cls_usage_log_add_op
{
593 rgw_usage_log_info info
;
596 void encode(ceph::buffer::list
& bl
) const {
597 ENCODE_START(2, 1, bl
);
599 encode(user
.to_str(), bl
);
603 void decode(ceph::buffer::list::const_iterator
& bl
) {
614 WRITE_CLASS_ENCODER(rgw_cls_usage_log_add_op
)
616 struct rgw_cls_bi_get_op
{
618 BIIndexType type
; /* namespace: plain, instance, olh */
620 rgw_cls_bi_get_op() : type(BIIndexType::Plain
) {}
622 void encode(ceph::buffer::list
& bl
) const {
623 ENCODE_START(1, 1, bl
);
625 encode((uint8_t)type
, bl
);
629 void decode(ceph::buffer::list::const_iterator
& bl
) {
634 type
= (BIIndexType
)c
;
638 WRITE_CLASS_ENCODER(rgw_cls_bi_get_op
)
640 struct rgw_cls_bi_get_ret
{
641 rgw_cls_bi_entry entry
;
643 rgw_cls_bi_get_ret() {}
645 void encode(ceph::buffer::list
& bl
) const {
646 ENCODE_START(1, 1, bl
);
651 void decode(ceph::buffer::list::const_iterator
& bl
) {
657 WRITE_CLASS_ENCODER(rgw_cls_bi_get_ret
)
659 struct rgw_cls_bi_put_op
{
660 rgw_cls_bi_entry entry
;
662 rgw_cls_bi_put_op() {}
664 void encode(ceph::buffer::list
& bl
) const {
665 ENCODE_START(1, 1, bl
);
670 void decode(ceph::buffer::list::const_iterator
& bl
) {
676 WRITE_CLASS_ENCODER(rgw_cls_bi_put_op
)
678 struct rgw_cls_bi_list_op
{
683 rgw_cls_bi_list_op() : max(0) {}
685 void encode(ceph::buffer::list
& bl
) const {
686 ENCODE_START(1, 1, bl
);
693 void decode(ceph::buffer::list::const_iterator
& bl
) {
701 WRITE_CLASS_ENCODER(rgw_cls_bi_list_op
)
703 struct rgw_cls_bi_list_ret
{
704 std::list
<rgw_cls_bi_entry
> entries
;
707 rgw_cls_bi_list_ret() : is_truncated(false) {}
709 void encode(ceph::buffer::list
& bl
) const {
710 ENCODE_START(1, 1, bl
);
712 encode(is_truncated
, bl
);
716 void decode(ceph::buffer::list::const_iterator
& bl
) {
719 decode(is_truncated
, bl
);
723 WRITE_CLASS_ENCODER(rgw_cls_bi_list_ret
)
725 struct rgw_cls_usage_log_read_op
{
726 uint64_t start_epoch
;
731 std::string iter
; // should be empty for the first call, non empty for subsequent calls
732 uint32_t max_entries
;
734 void encode(ceph::buffer::list
& bl
) const {
735 ENCODE_START(2, 1, bl
);
736 encode(start_epoch
, bl
);
737 encode(end_epoch
, bl
);
740 encode(max_entries
, bl
);
745 void decode(ceph::buffer::list::const_iterator
& bl
) {
747 decode(start_epoch
, bl
);
748 decode(end_epoch
, bl
);
751 decode(max_entries
, bl
);
758 WRITE_CLASS_ENCODER(rgw_cls_usage_log_read_op
)
760 struct rgw_cls_usage_log_read_ret
{
761 std::map
<rgw_user_bucket
, rgw_usage_log_entry
> usage
;
763 std::string next_iter
;
765 void encode(ceph::buffer::list
& bl
) const {
766 ENCODE_START(1, 1, bl
);
768 encode(truncated
, bl
);
769 encode(next_iter
, bl
);
773 void decode(ceph::buffer::list::const_iterator
& bl
) {
776 decode(truncated
, bl
);
777 decode(next_iter
, bl
);
781 WRITE_CLASS_ENCODER(rgw_cls_usage_log_read_ret
)
783 struct rgw_cls_usage_log_trim_op
{
784 uint64_t start_epoch
;
789 void encode(ceph::buffer::list
& bl
) const {
790 ENCODE_START(3, 2, bl
);
791 encode(start_epoch
, bl
);
792 encode(end_epoch
, bl
);
798 void decode(ceph::buffer::list::const_iterator
& bl
) {
800 decode(start_epoch
, bl
);
801 decode(end_epoch
, bl
);
809 WRITE_CLASS_ENCODER(rgw_cls_usage_log_trim_op
)
811 struct cls_rgw_gc_set_entry_op
{
812 uint32_t expiration_secs
;
813 cls_rgw_gc_obj_info info
;
814 cls_rgw_gc_set_entry_op() : expiration_secs(0) {}
816 void encode(ceph::buffer::list
& bl
) const {
817 ENCODE_START(1, 1, bl
);
818 encode(expiration_secs
, bl
);
823 void decode(ceph::buffer::list::const_iterator
& bl
) {
825 decode(expiration_secs
, bl
);
830 void dump(ceph::Formatter
*f
) const;
831 static void generate_test_instances(std::list
<cls_rgw_gc_set_entry_op
*>& ls
);
833 WRITE_CLASS_ENCODER(cls_rgw_gc_set_entry_op
)
835 struct cls_rgw_gc_defer_entry_op
{
836 uint32_t expiration_secs
;
838 cls_rgw_gc_defer_entry_op() : expiration_secs(0) {}
840 void encode(ceph::buffer::list
& bl
) const {
841 ENCODE_START(1, 1, bl
);
842 encode(expiration_secs
, bl
);
847 void decode(ceph::buffer::list::const_iterator
& bl
) {
849 decode(expiration_secs
, bl
);
854 void dump(ceph::Formatter
*f
) const;
855 static void generate_test_instances(std::list
<cls_rgw_gc_defer_entry_op
*>& ls
);
857 WRITE_CLASS_ENCODER(cls_rgw_gc_defer_entry_op
)
859 struct cls_rgw_gc_list_op
{
864 cls_rgw_gc_list_op() : max(0), expired_only(true) {}
866 void encode(ceph::buffer::list
& bl
) const {
867 ENCODE_START(2, 1, bl
);
870 encode(expired_only
, bl
);
874 void decode(ceph::buffer::list::const_iterator
& bl
) {
879 decode(expired_only
, bl
);
884 void dump(ceph::Formatter
*f
) const;
885 static void generate_test_instances(std::list
<cls_rgw_gc_list_op
*>& ls
);
887 WRITE_CLASS_ENCODER(cls_rgw_gc_list_op
)
889 struct cls_rgw_gc_list_ret
{
890 std::list
<cls_rgw_gc_obj_info
> entries
;
891 std::string next_marker
;
894 cls_rgw_gc_list_ret() : truncated(false) {}
896 void encode(ceph::buffer::list
& bl
) const {
897 ENCODE_START(2, 1, bl
);
899 encode(next_marker
, bl
);
900 encode(truncated
, bl
);
904 void decode(ceph::buffer::list::const_iterator
& bl
) {
908 decode(next_marker
, bl
);
909 decode(truncated
, bl
);
913 void dump(ceph::Formatter
*f
) const;
914 static void generate_test_instances(std::list
<cls_rgw_gc_list_ret
*>& ls
);
916 WRITE_CLASS_ENCODER(cls_rgw_gc_list_ret
)
918 struct cls_rgw_gc_remove_op
{
919 std::vector
<std::string
> tags
;
921 cls_rgw_gc_remove_op() {}
923 void encode(ceph::buffer::list
& bl
) const {
924 ENCODE_START(1, 1, bl
);
929 void decode(ceph::buffer::list::const_iterator
& bl
) {
935 void dump(ceph::Formatter
*f
) const;
936 static void generate_test_instances(std::list
<cls_rgw_gc_remove_op
*>& ls
);
938 WRITE_CLASS_ENCODER(cls_rgw_gc_remove_op
)
940 struct cls_rgw_bi_log_list_op
{
944 cls_rgw_bi_log_list_op() : max(0) {}
946 void encode(ceph::buffer::list
& bl
) const {
947 ENCODE_START(1, 1, bl
);
953 void decode(ceph::buffer::list::const_iterator
& bl
) {
960 void dump(ceph::Formatter
*f
) const;
961 static void generate_test_instances(std::list
<cls_rgw_bi_log_list_op
*>& ls
);
963 WRITE_CLASS_ENCODER(cls_rgw_bi_log_list_op
)
965 struct cls_rgw_bi_log_trim_op
{
966 std::string start_marker
;
967 std::string end_marker
;
969 cls_rgw_bi_log_trim_op() {}
971 void encode(ceph::buffer::list
& bl
) const {
972 ENCODE_START(1, 1, bl
);
973 encode(start_marker
, bl
);
974 encode(end_marker
, bl
);
978 void decode(ceph::buffer::list::const_iterator
& bl
) {
980 decode(start_marker
, bl
);
981 decode(end_marker
, bl
);
985 void dump(ceph::Formatter
*f
) const;
986 static void generate_test_instances(std::list
<cls_rgw_bi_log_trim_op
*>& ls
);
988 WRITE_CLASS_ENCODER(cls_rgw_bi_log_trim_op
)
990 struct cls_rgw_bi_log_list_ret
{
991 std::list
<rgw_bi_log_entry
> entries
;
994 cls_rgw_bi_log_list_ret() : truncated(false) {}
996 void encode(ceph::buffer::list
& bl
) const {
997 ENCODE_START(1, 1, bl
);
999 encode(truncated
, bl
);
1003 void decode(ceph::buffer::list::const_iterator
& bl
) {
1004 DECODE_START(1, bl
);
1005 decode(entries
, bl
);
1006 decode(truncated
, bl
);
1010 void dump(ceph::Formatter
*f
) const;
1011 static void generate_test_instances(std::list
<cls_rgw_bi_log_list_ret
*>& ls
);
1013 WRITE_CLASS_ENCODER(cls_rgw_bi_log_list_ret
)
1015 struct cls_rgw_lc_get_next_entry_op
{
1017 cls_rgw_lc_get_next_entry_op() {}
1019 void encode(ceph::buffer::list
& bl
) const {
1020 ENCODE_START(1, 1, bl
);
1025 void decode(ceph::buffer::list::const_iterator
& bl
) {
1026 DECODE_START(1, bl
);
1031 WRITE_CLASS_ENCODER(cls_rgw_lc_get_next_entry_op
)
1033 struct cls_rgw_lc_get_next_entry_ret
{
1034 cls_rgw_lc_entry entry
;
1036 cls_rgw_lc_get_next_entry_ret() {}
1038 void encode(ceph::buffer::list
& bl
) const {
1039 ENCODE_START(2, 2, bl
);
1044 void decode(ceph::buffer::list::const_iterator
& bl
) {
1045 DECODE_START(2, bl
);
1047 std::pair
<std::string
, int> oe
;
1049 entry
= {oe
.first
, 0 /* start */, uint32_t(oe
.second
)};
1057 WRITE_CLASS_ENCODER(cls_rgw_lc_get_next_entry_ret
)
1059 struct cls_rgw_lc_get_entry_op
{
1061 cls_rgw_lc_get_entry_op() {}
1062 cls_rgw_lc_get_entry_op(const std::string
& _marker
) : marker(_marker
) {}
1064 void encode(ceph::buffer::list
& bl
) const {
1065 ENCODE_START(1, 1, bl
);
1070 void decode(ceph::buffer::list::const_iterator
& bl
) {
1071 DECODE_START(1, bl
);
1076 WRITE_CLASS_ENCODER(cls_rgw_lc_get_entry_op
)
1078 struct cls_rgw_lc_get_entry_ret
{
1079 cls_rgw_lc_entry entry
;
1081 cls_rgw_lc_get_entry_ret() {}
1082 cls_rgw_lc_get_entry_ret(cls_rgw_lc_entry
&& _entry
)
1083 : entry(std::move(_entry
)) {}
1085 void encode(ceph::buffer::list
& bl
) const {
1086 ENCODE_START(1, 1, bl
);
1091 void decode(ceph::buffer::list::const_iterator
& bl
) {
1092 DECODE_START(1, bl
);
1098 WRITE_CLASS_ENCODER(cls_rgw_lc_get_entry_ret
)
1100 struct cls_rgw_lc_rm_entry_op
{
1101 cls_rgw_lc_entry entry
;
1102 cls_rgw_lc_rm_entry_op() {}
1104 void encode(ceph::buffer::list
& bl
) const {
1105 ENCODE_START(2, 2, bl
);
1110 void decode(ceph::buffer::list::const_iterator
& bl
) {
1111 DECODE_START(2, bl
);
1113 std::pair
<std::string
, int> oe
;
1115 entry
= {oe
.first
, 0 /* start */, uint32_t(oe
.second
)};
1122 WRITE_CLASS_ENCODER(cls_rgw_lc_rm_entry_op
)
1124 struct cls_rgw_lc_set_entry_op
{
1125 cls_rgw_lc_entry entry
;
1126 cls_rgw_lc_set_entry_op() {}
1128 void encode(ceph::buffer::list
& bl
) const {
1129 ENCODE_START(2, 2, bl
);
1134 void decode(ceph::buffer::list::const_iterator
& bl
) {
1135 DECODE_START(2, bl
);
1137 std::pair
<std::string
, int> oe
;
1139 entry
= {oe
.first
, 0 /* start */, uint32_t(oe
.second
)};
1146 WRITE_CLASS_ENCODER(cls_rgw_lc_set_entry_op
)
1148 struct cls_rgw_lc_put_head_op
{
1149 cls_rgw_lc_obj_head head
;
1152 cls_rgw_lc_put_head_op() {}
1154 void encode(ceph::buffer::list
& bl
) const {
1155 ENCODE_START(1, 1, bl
);
1160 void decode(ceph::buffer::list::const_iterator
& bl
) {
1161 DECODE_START(1, bl
);
1167 WRITE_CLASS_ENCODER(cls_rgw_lc_put_head_op
)
1169 struct cls_rgw_lc_get_head_ret
{
1170 cls_rgw_lc_obj_head head
;
1172 cls_rgw_lc_get_head_ret() {}
1174 void encode(ceph::buffer::list
& bl
) const {
1175 ENCODE_START(1, 1, bl
);
1180 void decode(ceph::buffer::list::const_iterator
& bl
) {
1181 DECODE_START(1, bl
);
1187 WRITE_CLASS_ENCODER(cls_rgw_lc_get_head_ret
)
1189 struct cls_rgw_lc_list_entries_op
{
1191 uint32_t max_entries
= 0;
1192 uint8_t compat_v
{0};
1194 cls_rgw_lc_list_entries_op() {}
1196 void encode(ceph::buffer::list
& bl
) const {
1197 ENCODE_START(3, 1, bl
);
1199 encode(max_entries
, bl
);
1203 void decode(ceph::buffer::list::const_iterator
& bl
) {
1204 DECODE_START(3, bl
);
1205 compat_v
= struct_v
;
1207 decode(max_entries
, bl
);
1212 WRITE_CLASS_ENCODER(cls_rgw_lc_list_entries_op
)
1214 struct cls_rgw_lc_list_entries_ret
{
1215 vector
<cls_rgw_lc_entry
> entries
;
1216 bool is_truncated
{false};
1219 cls_rgw_lc_list_entries_ret(uint8_t compat_v
= 3)
1220 : compat_v(compat_v
) {}
1222 void encode(ceph::buffer::list
& bl
) const {
1223 ENCODE_START(compat_v
, 1, bl
);
1224 if (compat_v
<= 2) {
1225 map
<string
, int> oes
;
1226 std::for_each(entries
.begin(), entries
.end(),
1227 [&oes
](const cls_rgw_lc_entry
& elt
)
1228 {oes
.insert({elt
.bucket
, elt
.status
});});
1231 encode(entries
, bl
);
1233 encode(is_truncated
, bl
);
1237 void decode(ceph::buffer::list::const_iterator
& bl
) {
1238 DECODE_START(3, bl
);
1239 compat_v
= struct_v
;
1240 if (struct_v
<= 2) {
1241 map
<string
, int> oes
;
1243 std::for_each(oes
.begin(), oes
.end(),
1244 [this](const std::pair
<string
, int>& oe
)
1245 {entries
.push_back({oe
.first
, 0 /* start */,
1246 uint32_t(oe
.second
)});});
1248 decode(entries
, bl
);
1250 if (struct_v
>= 2) {
1251 decode(is_truncated
, bl
);
1256 WRITE_CLASS_ENCODER(cls_rgw_lc_list_entries_ret
)
1258 struct cls_rgw_reshard_add_op
{
1259 cls_rgw_reshard_entry entry
;
1261 cls_rgw_reshard_add_op() {}
1263 void encode(ceph::buffer::list
& bl
) const {
1264 ENCODE_START(1, 1, bl
);
1269 void decode(ceph::buffer::list::const_iterator
& bl
) {
1270 DECODE_START(1, bl
);
1274 static void generate_test_instances(std::list
<cls_rgw_reshard_add_op
*>& o
);
1275 void dump(ceph::Formatter
*f
) const;
1277 WRITE_CLASS_ENCODER(cls_rgw_reshard_add_op
)
1279 struct cls_rgw_reshard_list_op
{
1283 cls_rgw_reshard_list_op() {}
1285 void encode(ceph::buffer::list
& bl
) const {
1286 ENCODE_START(1, 1, bl
);
1292 void decode(ceph::buffer::list::const_iterator
& bl
) {
1293 DECODE_START(1, bl
);
1298 static void generate_test_instances(std::list
<cls_rgw_reshard_list_op
*>& o
);
1299 void dump(ceph::Formatter
*f
) const;
1301 WRITE_CLASS_ENCODER(cls_rgw_reshard_list_op
)
1304 struct cls_rgw_reshard_list_ret
{
1305 std::list
<cls_rgw_reshard_entry
> entries
;
1306 bool is_truncated
{false};
1308 cls_rgw_reshard_list_ret() {}
1310 void encode(ceph::buffer::list
& bl
) const {
1311 ENCODE_START(1, 1, bl
);
1312 encode(entries
, bl
);
1313 encode(is_truncated
, bl
);
1317 void decode(ceph::buffer::list::const_iterator
& bl
) {
1318 DECODE_START(1, bl
);
1319 decode(entries
, bl
);
1320 decode(is_truncated
, bl
);
1323 static void generate_test_instances(std::list
<cls_rgw_reshard_list_ret
*>& o
);
1324 void dump(ceph::Formatter
*f
) const;
1326 WRITE_CLASS_ENCODER(cls_rgw_reshard_list_ret
)
1328 struct cls_rgw_reshard_get_op
{
1329 cls_rgw_reshard_entry entry
;
1331 cls_rgw_reshard_get_op() {}
1333 void encode(ceph::buffer::list
& bl
) const {
1334 ENCODE_START(1, 1, bl
);
1339 void decode(ceph::buffer::list::const_iterator
& bl
) {
1340 DECODE_START(1, bl
);
1344 static void generate_test_instances(std::list
<cls_rgw_reshard_get_op
*>& o
);
1345 void dump(ceph::Formatter
*f
) const;
1347 WRITE_CLASS_ENCODER(cls_rgw_reshard_get_op
)
1349 struct cls_rgw_reshard_get_ret
{
1350 cls_rgw_reshard_entry entry
;
1352 cls_rgw_reshard_get_ret() {}
1354 void encode(ceph::buffer::list
& bl
) const {
1355 ENCODE_START(1, 1, bl
);
1360 void decode(ceph::buffer::list::const_iterator
& bl
) {
1361 DECODE_START(1, bl
);
1365 static void generate_test_instances(std::list
<cls_rgw_reshard_get_ret
*>& o
);
1366 void dump(ceph::Formatter
*f
) const;
1368 WRITE_CLASS_ENCODER(cls_rgw_reshard_get_ret
)
1370 struct cls_rgw_reshard_remove_op
{
1372 std::string bucket_name
;
1373 std::string bucket_id
;
1375 cls_rgw_reshard_remove_op() {}
1377 void encode(ceph::buffer::list
& bl
) const {
1378 ENCODE_START(1, 1, bl
);
1380 encode(bucket_name
, bl
);
1381 encode(bucket_id
, bl
);
1385 void decode(ceph::buffer::list::const_iterator
& bl
) {
1386 DECODE_START(1, bl
);
1388 decode(bucket_name
, bl
);
1389 decode(bucket_id
, bl
);
1392 static void generate_test_instances(std::list
<cls_rgw_reshard_remove_op
*>& o
);
1393 void dump(ceph::Formatter
*f
) const;
1395 WRITE_CLASS_ENCODER(cls_rgw_reshard_remove_op
)
1397 struct cls_rgw_set_bucket_resharding_op
{
1398 cls_rgw_bucket_instance_entry entry
;
1400 void encode(ceph::buffer::list
& bl
) const {
1401 ENCODE_START(1, 1, bl
);
1406 void decode(ceph::buffer::list::const_iterator
& bl
) {
1407 DECODE_START(1, bl
);
1411 static void generate_test_instances(std::list
<cls_rgw_set_bucket_resharding_op
*>& o
);
1412 void dump(ceph::Formatter
*f
) const;
1414 WRITE_CLASS_ENCODER(cls_rgw_set_bucket_resharding_op
)
1416 struct cls_rgw_clear_bucket_resharding_op
{
1417 void encode(ceph::buffer::list
& bl
) const {
1418 ENCODE_START(1, 1, bl
);
1422 void decode(ceph::buffer::list::const_iterator
& bl
) {
1423 DECODE_START(1, bl
);
1426 static void generate_test_instances(std::list
<cls_rgw_clear_bucket_resharding_op
*>& o
);
1427 void dump(ceph::Formatter
*f
) const;
1429 WRITE_CLASS_ENCODER(cls_rgw_clear_bucket_resharding_op
)
1431 struct cls_rgw_guard_bucket_resharding_op
{
1434 void encode(ceph::buffer::list
& bl
) const {
1435 ENCODE_START(1, 1, bl
);
1436 encode(ret_err
, bl
);
1440 void decode(ceph::buffer::list::const_iterator
& bl
) {
1441 DECODE_START(1, bl
);
1442 decode(ret_err
, bl
);
1446 static void generate_test_instances(std::list
<cls_rgw_guard_bucket_resharding_op
*>& o
);
1447 void dump(ceph::Formatter
*f
) const;
1449 WRITE_CLASS_ENCODER(cls_rgw_guard_bucket_resharding_op
)
1451 struct cls_rgw_get_bucket_resharding_op
{
1453 void encode(ceph::buffer::list
& bl
) const {
1454 ENCODE_START(1, 1, bl
);
1458 void decode(ceph::buffer::list::const_iterator
& bl
) {
1459 DECODE_START(1, bl
);
1463 static void generate_test_instances(std::list
<cls_rgw_get_bucket_resharding_op
*>& o
);
1464 void dump(ceph::Formatter
*f
) const;
1466 WRITE_CLASS_ENCODER(cls_rgw_get_bucket_resharding_op
)
1468 struct cls_rgw_get_bucket_resharding_ret
{
1469 cls_rgw_bucket_instance_entry new_instance
;
1471 void encode(ceph::buffer::list
& bl
) const {
1472 ENCODE_START(1, 1, bl
);
1473 encode(new_instance
, bl
);
1477 void decode(ceph::buffer::list::const_iterator
& bl
) {
1478 DECODE_START(1, bl
);
1479 decode(new_instance
, bl
);
1483 static void generate_test_instances(std::list
<cls_rgw_get_bucket_resharding_ret
*>& o
);
1484 void dump(ceph::Formatter
*f
) const;
1486 WRITE_CLASS_ENCODER(cls_rgw_get_bucket_resharding_ret
)
1488 #endif /* CEPH_CLS_RGW_OPS_H */