Skip to content

rgw: replicate v2 topic/notification metadata#55657

Merged
cbodley merged 21 commits intomainfrom
wip-rgw-meta-topic
Mar 8, 2024
Merged

rgw: replicate v2 topic/notification metadata#55657
cbodley merged 21 commits intomainfrom
wip-rgw-meta-topic

Conversation

@cbodley
Copy link
Contributor

@cbodley cbodley commented Feb 19, 2024

feature branch containing changes from #54868 and #55152

Fixes: https://tracker.ceph.com/issues/50078

TODO:

Show available Jenkins commands
  • jenkins retest this please
  • jenkins test classic perf
  • jenkins test crimson perf
  • jenkins test signed
  • jenkins test make check
  • jenkins test make check arm64
  • jenkins test submodules
  • jenkins test dashboard
  • jenkins test dashboard cephadm
  • jenkins test api
  • jenkins test docs
  • jenkins render docs
  • jenkins test ceph-volume all
  • jenkins test ceph-volume tox
  • jenkins test windows
  • jenkins test rook e2e

@cbodley
Copy link
Contributor Author

cbodley commented Feb 22, 2024

i'll address the make check failures in test_rgw_iam_policy.cc:

/home/jenkins-build/build/workspace/ceph-pull-requests/src/test/rgw/test_rgw_iam_policy.cc:917:24: error: no matching constructor for initialization of 'rgw::sal::RadosStore'
  rgw::sal::RadosStore store(context_pool, *site);
                       ^     ~~~~~~~~~~~~~~~~~~~
/home/jenkins-build/build/workspace/ceph-pull-requests/src/rgw/driver/rados/rgw_sal_rados.h:127:5: note: candidate constructor not viable: requires single argument 'io_context', but 2 arguments were provided
    RadosStore(boost::asio::io_context& io_context)
    ^
/home/jenkins-build/build/workspace/ceph-pull-requests/src/rgw/driver/rados/rgw_sal_rados.h:117:7: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided
class RadosStore : public StoreDriver {
      ^

this did pass qa in https://pulpito.ceph.com/cbodley-2024-02-20_21:16:10-rgw-wip-rgw-meta-topic-distro-default-smithi/ with rerun https://pulpito.ceph.com/cbodley-2024-02-21_19:23:32-rgw-wip-rgw-meta-topic-distro-default-smithi/. the notification tests there failed with https://tracker.ceph.com/issues/64184

@cbodley
Copy link
Contributor Author

cbodley commented Feb 22, 2024

would like to see this tested against the changes in #55688

@rosinL
Copy link
Member

rosinL commented Feb 23, 2024

jenkins test make check arm64

@cbodley
Copy link
Contributor Author

cbodley commented Feb 24, 2024

kchheda3 and others added 16 commits March 5, 2024 12:55
…n multisite config

Signed-off-by: kchheda3 <kchheda3@bloomberg.net>
…ions in multisite config.

Signed-off-by: kchheda3 <kchheda3@bloomberg.net>
…een bucket and topics.

Signed-off-by: kchheda3 <kchheda3@bloomberg.net>
…ions in multisite config.

Signed-off-by: kchheda3 <kchheda3@bloomberg.net>
both locally and in teuthology

Signed-off-by: Yuval Lifshitz <ylifshit@redhat.com>
v1 could be enabled only in local tests. teuthology tests would run with v2

Signed-off-by: Yuval Lifshitz <ylifshit@redhat.com>
Signed-off-by: Casey Bodley <cbodley@redhat.com>
make the SiteConfig available to all of RGWRados via svc.site instead
of storing it in sal::RadosStore

Signed-off-by: Casey Bodley <cbodley@redhat.com>
Signed-off-by: Casey Bodley <cbodley@redhat.com>
RGWPubSub constructor takes SiteConfig instead of zonegroup map

replace do_all_zonegroups_support_notification_v2() with a generic
function rgw::all_zonegroups_support() that handles non-realm
configurations too

remove unused sal::ZoneGroup::supports_feature()

Signed-off-by: Casey Bodley <cbodley@redhat.com>
Signed-off-by: Casey Bodley <cbodley@redhat.com>
metadata sync ignores entries other than MDLOG_STATUS_COMPLETE, so we
don't need to write separate prepare/complete entries. metadata
mutations can just call complete_entry() on success

Signed-off-by: Casey Bodley <cbodley@redhat.com>
rename read_topics()/write_topics() to 'v1' and only call them from
internal v1 call paths

public get_topics() now calls read_topics_v1() for the v1 case, and does
the paginated listing with driver->meta_list_keys_next() for v2

RGWPSListTopicsOp now uses the NextToken request/response params with
the paginated get_topics(), limiting responses to 100 entries like AWS

'radosgw-admin topic list' also paginates the listing according to
--max-entries to avoid reading everything into memory at once

Signed-off-by: Casey Bodley <cbodley@redhat.com>
the format of topic metadata keys is agnostic to the backend, so the
parsing/formatting functions should be in rgw_pubsub.h

Signed-off-by: Casey Bodley <cbodley@redhat.com>
add a new interface for topic metadata that doesn't depend on metadata
backends. this low-level interface is used by both RadosStore and the
topic metadata handler

remove Driver::delete_bucket_topic_mapping() from sal because the omap
object is deleted internally by rgwrados::topic::remove()

remove the RGWRados::topics_pool_ctx member

Signed-off-by: Casey Bodley <cbodley@redhat.com>
Signed-off-by: Casey Bodley <cbodley@redhat.com>
cbodley and others added 5 commits March 5, 2024 12:55
Signed-off-by: Casey Bodley <cbodley@redhat.com>
Signed-off-by: Casey Bodley <cbodley@redhat.com>
Signed-off-by: Casey Bodley <cbodley@redhat.com>
test instructions:
https://gist.github.com/yuvalif/21449e301732b719cd1ed97c3eeeabb2

* during migration all topic and notification operations must fail with HTTP error code 503
* read operations should return the values of the v1 topics and notifications
* sending notifications should continue based on v1 values

Signed-off-by: Yuval Lifshitz <ylifshit@redhat.com>
Signed-off-by: Yuval Lifshitz <ylifshit@redhat.com>
@cbodley
Copy link
Contributor Author

cbodley commented Mar 6, 2024

mostly clean in https://pulpito.ceph.com/cbodley-2024-03-06_13:14:37-rgw-wip-rgw-meta-topic-distro-default-smithi/, but i haven't looked through the multisite results

@yuvalif
Copy link
Contributor

yuvalif commented Mar 7, 2024

mostly clean in https://pulpito.ceph.com/cbodley-2024-03-06_13:14:37-rgw-wip-rgw-meta-topic-distro-default-smithi/, but i haven't looked through the multisite results

there are quite a bit of s3tests failures in: http://qa-proxy.ceph.com/teuthology/cbodley-2024-03-06_13:14:37-rgw-wip-rgw-meta-topic-distro-default-smithi/7583397/teuthology.log

153 failed, 431 passed, 65 skipped, 103 deselected, 1 xfailed, 18 warnings, 187 errors

multisite also has many failures in: http://qa-proxy.ceph.com/teuthology/cbodley-2024-03-06_13:14:37-rgw-wip-rgw-meta-topic-distro-default-smithi/7583400/teuthology.log

Ran 64 tests in 10534.752s
...
2024-03-06T18:51:00.246 INFO:tasks.rgw_multisite_tests:FAILED (SKIP=15, failures=29)

@cbodley
Copy link
Contributor Author

cbodley commented Mar 7, 2024

there are quite a bit of s3tests failures

yeah, there was a lifecycle crash in that one. i couldn't tell whether it was the same issue as https://tracker.ceph.com/issues/64571

@cbodley
Copy link
Contributor Author

cbodley commented Mar 8, 2024

new run in https://pulpito.ceph.com/cbodley-2024-03-07_20:57:34-rgw-wip-rgw-meta-topic-distro-default-smithi/ looks good too. rerunning the bucket-check failure

Copy link
Contributor

@mattbenjamin mattbenjamin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mechanical approval

Comment on lines +994 to +998
if (!res.s) {
// for non S3-request caller (e.g., lifecycle, ObjectSync), bucket attrs
// are not loaded, so force to reload the bucket, that reloads the attr.
// for non S3-request caller, res.s is nullptr
ret = res.bucket->load_bucket(dpp, res.yield);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kchheda3 @yuvalif this call is showing up in lifecycle crashes (see https://tracker.ceph.com/issues/64571#note-10). is it possible that res.bucket is null here?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it is possible. this ctor: https://github.com/ceph/ceph/blob/main/src/rgw/driver/rados/rgw_sal_rados.h#L736
does not initialize the bucket

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it is possible. this ctor: https://github.com/ceph/ceph/blob/main/src/rgw/driver/rados/rgw_sal_rados.h#L736 does not initialize the bucket

but @yuvalif that ctor is for s3 requests, hence it has req_state and the code is checking if (!res.s), so that ctor will not be invoked.
@cbodley looking at all the calls for notification for LC which are inside this rgw_lc.cc, does not look like anywhere bucket is nullptr.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cbodley looking at this crash which is non-notification one, it has the same later call trace which points to issue while reading the bucket instance info read_bucket_instance_info

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wasn't the en2end tracing regression in LC because of the infinite recurssion?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok, we finally have a root cause for this in https://tracker.ceph.com/issues/64571#note-33:

The cause for this issue seems to be due to multiple LC worker threads updating the same bucket handle, which is not thread-safe. When another load_bucket() call was added in remove_expirted_obj as part of #55657, multiple threads could update and overwrite the same ceph::buffer::list stored in bucket->attrs resulting in corruption at times.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should probably keep the fix in PR #56712 regardless. if calling load_bucket() could be avoided in this case, we shoudl avoid it

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we've got a couple more crashes from notification and LC setup together and both have different call stack but both fail in attrs decoding
this one is why decoding the bucket notification attrs during LC processing.
0x00007f6233140a9f in raise () from /lib64/libc.so.6 #1 0x00007f6233113ece in abort () from /lib64/libc.so.6 #2 0x00007f62373d89b6 in ceph::__ceph_assert_fail(char const*, char const*, int, char const*) () from /usr/lib64/ceph/libceph-common.so.2 #3 0x00007f62373d8b22 in ceph::__ceph_assert_fail(ceph::assert_data const&) () from /usr/lib64/ceph/libceph-common.so.2 #4 0x00007f62384659ba in ceph::buffer::v15_2_0::ptr::copy_out(unsigned int, unsigned int, char*) const () from /lib64/librados.so.2 #5 0x00007f623846a420 in ceph::buffer::v15_2_0::list::iterator_impl<true>::copy(unsigned int, char*) () from /lib64/librados.so.2 #6 0x00005590bfe34293 in ceph::decode(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, ceph::buffer::v15_2_0::list::iterator_impl<true>&) () #7 0x00005590c01131e6 in rgw_pubsub_dest::decode(ceph::buffer::v15_2_0::list::iterator_impl<true>&) () #8 0x00005590c01135bf in rgw_pubsub_topic::decode(ceph::buffer::v15_2_0::list::iterator_impl<true>&) () #9 0x00005590c011666e in rgw_pubsub_topic_filter::decode(ceph::buffer::v15_2_0::list::iterator_impl<true>&) () #10 0x00005590c011871f in rgw_pubsub_bucket_topics::decode(ceph::buffer::v15_2_0::list::iterator_impl<true>&) () #11 0x00005590c02cead8 in get_bucket_notifications(DoutPrefixProvider const*, rgw::sal::Bucket*, rgw_pubsub_bucket_topics&) () #12 0x00005590c00baeda in rgw::notify::publish_reserve(DoutPrefixProvider const*, std::vector<rgw::notify::EventType, std::allocator<rgw::notify::EventType> > const&, rgw::notify::reservation_t&, RGWObjTags const*) () #13 0x00005590c0284f3e in remove_expired_obj(DoutPrefixProvider const*, lc_op_ctx&, bool, std::vector<rgw::notify::EventType, std::allocator<rgw::notify::EventType> > const&) () #14 0x00005590c029eea9 in LCOpAction_CurrentExpiration::process(lc_op_ctx&) () #15 0x00005590c0286acf in LCOpRule::process(rgw_bucket_dir_entry&, DoutPrefixProvider const*, WorkQ*) () #16 0x00005590c0290063 in RGWLC::bucket_lc_process(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, RGWLC::LCWorker*, long, bool)::{lambda(RGWLC::LCWorker*, WorkQ*, boost::variant<void*, std::tuple<LCOpRule, rgw_bucket_dir_entry>, std::tuple<lc_op, rgw_bucket_dir_entry>, rgw_bucket_dir_entry>&)#8}::operator()(RGWLC::LCWorker*, WorkQ*, boost::variant<void*, std::tuple<LCOpRule, rgw_bucket_dir_entry>, std::tuple<lc_op, rgw_bucket_dir_entry>, rgw_bucket_dir_entry>&) const () #17 0x00005590c029a0ad in WorkQ::entry() () #18 0x00007f62341031cf in start_thread () from /lib64/libpthread.so.0 #19 0x00007f623312bdd3 in clone () from /lib64/libc.so.6

and this one is during get_obj_state

#0 0x00007f09afaded6a in tc_newarray () from /lib64/libtcmalloc.so.4 #1 0x00007f09b306e755 in ceph::buffer::v15_2_0::ptr_node::cloner::operator()(ceph::buffer::v15_2_0::ptr_node const&) () from /lib64/librados.so.2 #2 0x0000561cb3d4a973 in rgw_filter_attrset(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ceph::buffer::v15_2_0::list, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> > >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ceph::buffer::v15_2_0::list, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> > >*) () #3 0x0000561cb3ef8fb2 in RGWRados::raw_obj_stat(DoutPrefixProvider const*, rgw_raw_obj&, unsigned long*, std::chrono::time_point<ceph::real_clock, std::chrono::duration<unsigned long, std::ratio<1l, 1000000000l> > >*, unsigned long*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ceph::buffer::v15_2_0::list, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> > >*, ceph::buffer::v15_2_0::list*, RGWObjVersionTracker*, optional_yield) () #4 0x0000561cb3f17e04 in RGWRados::get_obj_state_impl(DoutPrefixProvider const*, RGWObjectCtx*, RGWBucketInfo&, rgw_obj const&, RGWObjState**, RGWObjManifest**, bool, optional_yield, bool) () #5 0x0000561cb3f19907 in RGWRados::get_obj_state(DoutPrefixProvider const*, RGWObjectCtx*, RGWBucketInfo&, rgw_obj const&, RGWObjState**, RGWObjManifest**, bool, optional_yield, bool) () #6 0x0000561cb3f1a7f7 in RGWRados::Object::get_state(DoutPrefixProvider const*, RGWObjState**, RGWObjManifest**, bool, optional_yield, bool) () #7 0x0000561cb3f246fa in RGWRados::Object::Delete::delete_obj(optional_yield, DoutPrefixProvider const*) () #8 0x0000561cb3ce23d2 in rgw::sal::RadosObject::RadosDeleteOp::delete_obj(DoutPrefixProvider const*, optional_yield) () #9 0x0000561cb3e7df5d in remove_expired_obj(DoutPrefixProvider const*, lc_op_ctx&, bool, std::vector<rgw::notify::EventType, std::allocator<rgw::notify::EventType> > const&) () #10 0x0000561cb3e97ea9 in LCOpAction_CurrentExpiration::process(lc_op_ctx&) () #11 0x0000561cb3e7facf in LCOpRule::process(rgw_bucket_dir_entry&, DoutPrefixProvider const*, WorkQ*) () #12 0x0000561cb3e89063 in RGWLC::bucket_lc_process(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, RGWLC::LCWorker*, long, bool)::{lambda(RGWLC::LCWorker*, WorkQ*, boost::variant<void*, std::tuple<LCOpRule, rgw_bucket_dir_entry>, std::tuple<lc_op, rgw_bucket_dir_entry>, rgw_bucket_dir_entry>&)#8}::operator()(RGWLC::LCWorker*, WorkQ*, boost::variant<void*, std::tuple<LCOpRule, rgw_bucket_dir_entry>, std::tuple<lc_op, rgw_bucket_dir_entry>, rgw_bucket_dir_entry>&) const () #13 0x0000561cb3e930ad in WorkQ::entry() ()

@cbodley you think this also could be due to multiple LC worker threads updating the bucket->handle(attrs) ??

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cbodley you think this also could be due to multiple LC worker threads updating the bucket->handle(attrs) ??

@kchheda3 assuming you haven't applied the fix from #56712, that sounds like a plausible explanation for both

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cbodley you think this also could be due to multiple LC worker threads updating the bucket->handle(attrs) ??

@kchheda3 assuming you haven't applied the fix from #56712, that sounds like a plausible explanation for both

yes i haven't applied that band-aid, but my understanding was with that band-aid the crash that it was fixing was different one load_bucket()->read_bucket_instance_info().. i guess this one
#4 0x000055dc73b9c3b0 in std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> >* std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> > >::_Reuse_or_alloc_node::operator()<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> const&>(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> const&) () #5 0x000055dc73b9c628 in std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> >* std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> > >::_M_copy<false, std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> > >::_Reuse_or_alloc_node>(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> >*, std::_Rb_tree_node_base*, std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> > >::_Reuse_or_alloc_node&) [clone .isra.0] () #6 0x000055dc73b9c65d in std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> >* std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> > >::_M_copy<false, std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> > >::_Reuse_or_alloc_node>(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> >*, std::_Rb_tree_node_base*, std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> > >::_Reuse_or_alloc_node&) [clone .isra.0] () #7 0x000055dc73b9ca65 in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> > >::operator=(std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> > > const&) () #8 0x000055dc74082ff2 in RGWSI_Bucket_SObj::read_bucket_instance_info(ptr_wrapper<RGWSI_MetaBackend::Context, 4>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, RGWBucketInfo*, std::chrono::time_point<ceph::real_clock, std::chrono::duration<unsigned long, std::ratio<1l, 1000000000l> > >*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ceph::buffer::v15_2_0::list, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, ceph::buffer::v15_2_0::list> > >*, optional_yield, DoutPrefixProvider const*, rgw_cache_entry_info*, boost::optional<obj_version>) () #9 0x000055dc7422c3cc in std::_Function_handler<int (ptr_wrapper<RGWSI_MetaBackend::Context, 4>&), RGWBucketCtl::read_bucket_instance_info(rgw_bucket const&, RGWBucketInfo*, optional_yield, DoutPrefixProvider const*, RGWBucketCtl::BucketInstance::GetParams const&)::{lambda(ptr_wrapper<RGWSI_MetaBackend::Context, 4>&)#1}>::_M_invoke(std::_Any_data const&, ptr_wrapper<RGWSI_MetaBackend::Context, 4>&) () #10 0x000055dc74244cb4 in std::_Function_handler<int (RGWSI_MetaBackend_Handler::Op*), RGWBucketInstanceMetadataHandler::call(std::optional<std::variant<RGWSI_MetaBackend_CtxParams_SObj> >, std::function<int (ptr_wrapper<RGWSI_MetaBackend::Context, 4>&)>)::{lambda(RGWSI_MetaBackend_Handler::Op*)#1}>::_M_invoke(std::_Any_data const&, RGWSI_MetaBackend_Handler::Op*&&) () #11 0x000055dc740a71de in std::_Function_handler<int (RGWSI_MetaBackend::Context*), RGWSI_MetaBackend_Handler::call(std::optional<std::variant<RGWSI_MetaBackend_CtxParams_SObj> >, std::function<int (RGWSI_MetaBackend_Handler::Op*)>)::{lambda(RGWSI_MetaBackend::Context*)#1}>::_M_invoke(std::_Any_data const&, RGWSI_MetaBackend::Context*&&) () #12 0x000055dc740a897f in RGWSI_MetaBackend_SObj::call(std::optional<std::variant<RGWSI_MetaBackend_CtxParams_SObj> >, std::function<int (RGWSI_MetaBackend::Context*)>) () #13 0x000055dc740a7517 in RGWSI_MetaBackend_Handler::call(std::optional<std::variant<RGWSI_MetaBackend_CtxParams_SObj> >, std::function<int (RGWSI_MetaBackend_Handler::Op*)>) () #14 0x000055dc742317ab in RGWBucketCtl::read_bucket_instance_info(rgw_bucket const&, RGWBucketInfo*, optional_yield, DoutPrefixProvider const*, RGWBucketCtl::BucketInstance::GetParams const&) () #15 0x000055dc73f6ead5 in rgw::sal::RadosBucket::load_bucket(DoutPrefixProvider const*, optional_yield, bool) () #16 0x000055dc73f43bdd in rgw::notify::publish_reserve(DoutPrefixProvider const*, std::vector<rgw::notify::EventType, std::allocator<rgw::notify::EventType> > const&, rgw::notify::reservation_t&, RGWObjTags const*) () #17 0x000055dc7410cf3e in remove_expired_obj(DoutPrefixProvider const*, lc_op_ctx&, bool, std::vector<rgw::notify::EventType, std::allocator<rgw::notify::EventType> > const&) () #18 0x000055dc74126ea9 in LCOpAction_CurrentExpiration::process(lc_op_ctx&) () #19 0x000055dc7410eacf in LCOpRule::process(rgw_bucket_dir_entry&, DoutPrefixProvider const*, WorkQ*) () #20 0x000055dc74118063 in RGWLC::bucket_lc_process(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, RGWLC::LCWorker*, long, bool)::{lambda(RGWLC::LCWorker*, WorkQ*, boost::variant<void*, std::tuple<LCOpRule, rgw_bucket_dir_entry>, std::tuple<lc_op, rgw_bucket_dir_entry>, rgw_bucket_dir_entry>&)#8}::operator()(RGWLC::LCWorker*, WorkQ*, boost::variant<void*, std::tuple<LCOpRule, rgw_bucket_dir_entry>, std::tuple<lc_op, rgw_bucket_dir_entry>, rgw_bucket_dir_entry>&) const ()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants