Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

crimson/osd: put snapmapper's key-value pairs into dedicated objs #52267

Merged
merged 3 commits into from Mar 6, 2024

Conversation

xxhdx1985126
Copy link
Contributor

@xxhdx1985126 xxhdx1985126 commented Jun 30, 2023

Otherwise, PG::read_log_and_missing() will meet those key-values and won't know what to do with them. This is modeling what the classic osd is doing

Fixes: https://tracker.ceph.com/issues/61875
Signed-off-by: Xuehan Xu xuxuehan@qianxin.com

Contribution Guidelines

Checklist

  • Tracker (select at least one)
    • References tracker ticket
    • Very recent bug; references commit where it was introduced
    • New feature (ticket optional)
    • Doc update (no ticket needed)
    • Code cleanup (no ticket needed)
  • Component impact
    • Affects Dashboard, opened tracker ticket
    • Affects Orchestrator, opened tracker ticket
    • No impact that needs to be tracked
  • Documentation (select at least one)
    • Updates relevant documentation
    • No doc update is appropriate
  • Tests (select at least one)
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

@xxhdx1985126 xxhdx1985126 requested a review from a team as a code owner June 30, 2023 04:35
Comment on lines 613 to 614
assert(coll_ref);
t.touch(coll_ref->get_cid(), make_snapmapper_oid());
Copy link
Contributor

Choose a reason for hiding this comment

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

Why is this section not part of OSD::start() instead?

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 also check for existence and add logs if possible.

// make sure snap mapper object exists
if (!store->exists(coll_ref, make_snapmapper_oid())) {
  logger().debug("init creating/touching snapmapper object");
  ..
  t.touch(coll_ref->get_cid(), make_snapmapper_oid());
}

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Since, in crimson, we previously store snap mapper in pgmeta objects which are pg specific, I made the snap mapper objects pg specific, too. I think you are suggesting that we make the snapmapper object shared across the whole OSD like what classic OSD is doing. Am I right?

Copy link
Contributor

Choose a reason for hiding this comment

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

Hmm. The reason classic places all the snap trimmer information in a single object is that otherwise we'd need to read and split/merge the objects during pg split/merge. This would require IO linear in the number of snapshots, and split/merge aren't otherwise dependent on the size of the PGs (for good reason -- they must occur during the map transition and block IO/peering on those PGs). Crimson will have different problems for split/merge -- specifically that seastore will want to maintain per-shard metadata trees, so we won't be able to merge PGs easily on different shards or split into a different shard. For now, I'd actually suggest a single OSD-wide object maintained by shard 0 (pgs on other shards will have to proxy IO to that shard). If this becomes a bottleneck, we can try something else later.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Done.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Hmm. The reason classic places all the snap trimmer information in a single object is that otherwise we'd need to read and split/merge the objects during pg split/merge. This would require IO linear in the number of snapshots, and split/merge aren't otherwise dependent on the size of the PGs (for good reason -- they must occur during the map transition and block IO/peering on those PGs). Crimson will have different problems for split/merge -- specifically that seastore will want to maintain per-shard metadata trees, so we won't be able to merge PGs easily on different shards or split into a different shard. For now, I'd actually suggest a single OSD-wide object maintained by shard 0 (pgs on other shards will have to proxy IO to that shard). If this becomes a bottleneck, we can try something else later.

@athanatos Hi, sam. I think the modification to the OSD-wide object and other modifications have to be in the same transaction, am I right? If so, it looks to me that we need to synchronize seastore transactions across multiple shards if they all modify the OSD-wide object, am I right?

Copy link
Contributor

Choose a reason for hiding this comment

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

Yeah, I forgot that the sharded objectstore abstraction doesn't allow transactions that span shards. A per-pg object seems fine, we'll figure out pg split/merge later.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah, I forgot that the sharded objectstore abstraction doesn't allow transactions that span shards. A per-pg object seems fine, we'll figure out pg split/merge later.

Done:-)

Comment on lines 620 to 661
ghobject_t make_snapmapper_oid() {
return ghobject_t(hobject_t(
sobject_t(
object_t("snapmapper"),
0)));
}
Copy link
Contributor

Choose a reason for hiding this comment

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

Let's move this to crimson/osd/osd_meta.cc where we already create the osdmap/superblock/final_pool_info oids.
This will require introducing void OSDMeta::create_snapmapper.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Since we are no longer using OSD-wide snapmapper object, this may not be necessary, am I right?

@Matan-B
Copy link
Contributor

Matan-B commented Jul 2, 2023

Can you please open a tracker so we could easily backport this?

@xxhdx1985126
Copy link
Contributor Author

Can you please open a tracker so we could easily backport this?

Yeah, will do.

@xxhdx1985126 xxhdx1985126 force-pushed the wip-crimson-pg-snapmapper-obj branch from 666ec48 to 3deab19 Compare July 18, 2023 02:17
@xxhdx1985126
Copy link
Contributor Author

jenkins test make check

1 similar comment
@xxhdx1985126
Copy link
Contributor Author

jenkins test make check

@Matan-B
Copy link
Contributor

Matan-B commented Aug 24, 2023

crimson/admin/admin_socket: remove path file if it exists #53082
osd/PGLog: return a ready future when found missing objects #53032
crimson/osd/pg: check if backfill_state exists when judging objects' #53031
crimson/osd: put snapmapper's key-value pairs into dedicated objs #52267
qa/suites/crimson-rados: bring backfill testing #48052
crimson/osd/object_context: consider clones found as long as they're in SnapSet::clones #52204

https://pulpito.ceph.com/matan-2023-08-24_09:25:19-crimson-rados-wip-matanb-crimson-testing-24.8-v2-distro-crimson-smithi/

Copy link
Contributor

@Matan-B Matan-B left a comment

Choose a reason for hiding this comment

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

@xxhdx1985126
Copy link
Contributor Author

@Matan-B It seems that qa-proxy.ceph.com doesn't work anymore, is there any other way to get the log? Thanks:-)

@Matan-B
Copy link
Contributor

Matan-B commented Aug 28, 2023

@Matan-B It seems that qa-proxy.ceph.com doesn't work anymore, is there any other way to get the log? Thanks:-)

It's back :)

The traceback from osds:

 0# gsignal in /lib64/libc.so.6
 1# abort in /lib64/libc.so.6
 2# 0x00007F7FD9B54D79 in /lib64/libc.so.6
 3# 0x00007F7FD9B7A426 in /lib64/libc.so.6
 4# seastar::sharded<crimson::osd::OSDSingletonState>::local() in ceph-osd
 5# 0x0000555740BCC5AF in ceph-osd
 6# 0x0000555740BD0886 in ceph-osd
 7# 0x0000555740BD0AFE in ceph-osd
 8# auto seastar::internal::future_invoke<seastar::noncopyable_function<seastar::future<boost::intrusive_ptr<crimson::osd::PG> > (std::tuple<seastar::future<std::tuple<pg_pool_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, seastar::future<boost::intrusive_ptr<crimson::os::FuturizedCollection> > >&&)>&, std::tuple<seastar::future<std::tuple<pg_pool_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, seastar::future<boost::intrusive_ptr<crimson::os::FuturizedCollection> > > >(seastar::noncopyable_function<seastar::future<boost::intrusive_ptr<crimson::osd::PG> > (std::tuple<seastar::future<std::tuple<pg_pool_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, seastar::future<boost::intrusive_ptr<crimson::os::FuturizedCollection> > >&&)>&, std::tuple<seastar::future<std::tuple<pg_pool_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, seastar::future<boost::intrusive_ptr<crimson::os::FuturizedCollection> > >&&) in ceph-osd
 9# void seastar::futurize<seastar::future<boost::intrusive_ptr<crimson::osd::PG> > >::satisfy_with_result_of<seastar::future<std::tuple<seastar::future<std::tuple<pg_pool_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, seastar::future<boost::intrusive_ptr<crimson::os::FuturizedCollection> > > >::then_impl_nrvo<seastar::noncopyable_function<seastar::future<boost::intrusive_ptr<crimson::osd::PG> > (std::tuple<seastar::future<std::tuple<pg_pool_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, seastar::future<boost::intrusive_ptr<crimson::os::FuturizedCollection> > >&&)>, seastar::future<boost::intrusive_ptr<crimson::osd::PG> > >(seastar::noncopyable_function<seastar::future<boost::intrusive_ptr<crimson::osd::PG> > (std::tuple<seastar::future<std::tuple<pg_pool_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, seastar::future<boost::intrusive_ptr<crimson::os::FuturizedCollection> > >&&)>&&)::{lambda(seastar::internal::promise_base_with_type<boost::intrusive_ptr<crimson::osd::PG> >&&, seastar::noncopyable_function<seastar::future<boost::intrusive_ptr<crimson::osd::PG> > (std::tuple<seastar::future<std::tuple<pg_pool_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, seastar::future<boost::intrusive_ptr<crimson::os::FuturizedCollection> > >&&)>&, seastar::future_state<std::tuple<seastar::future<std::tuple<pg_pool_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, seastar::future<boost::intrusive_ptr<crimson::os::FuturizedCollection> > > >&&)#1}::operator()(seastar::internal::promise_base_with_type<boost::intrusive_ptr<crimson::osd::PG> >&&, seastar::noncopyable_function<seastar::future<boost::intrusive_ptr<crimson::osd::PG> > (std::tuple<seastar::future<std::tuple<pg_pool_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, seastar::future<boost::intrusive_ptr<crimson::os::FuturizedCollection> > >&&)>&, seastar::future_state<std::tuple<seastar::future<std::tuple<pg_pool_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, seastar::future<boost::intrusive_ptr<crimson::os::FuturizedCollection> > > >&&) const::{lambda()#1}>(seastar::internal::promise_base_with_type<boost::intrusive_ptr<crimson::osd::PG> >&&, seastar::noncopyable_function<seastar::future<boost::intrusive_ptr<crimson::osd::PG> > (std::tuple<seastar::future<std::tuple<pg_pool_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, seastar::future<boost::intrusive_ptr<crimson::os::FuturizedCollection> > >&&)>&&) in ceph-osd
10# seastar::continuation<seastar::internal::promise_base_with_type<boost::intrusive_ptr<crimson::osd::PG> >, seastar::noncopyable_function<seastar::future<boost::intrusive_ptr<crimson::osd::PG> > (std::tuple<seastar::future<std::tuple<pg_pool_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, seastar::future<boost::intrusive_ptr<crimson::os::FuturizedCollection> > >&&)>, seastar::future<std::tuple<seastar::future<std::tuple<pg_pool_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, seastar::future<boost::intrusive_ptr<crimson::os::FuturizedCollection> > > >::then_impl_nrvo<seastar::noncopyable_function<seastar::future<boost::intrusive_ptr<crimson::osd::PG> > (std::tuple<seastar::future<std::tuple<pg_pool_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, seastar::future<boost::intrusive_ptr<crimson::os::FuturizedCollection> > >&&)>, seastar::future<boost::intrusive_ptr<crimson::osd::PG> > >(seastar::noncopyable_function<seastar::future<boost::intrusive_ptr<crimson::osd::PG> > (std::tuple<seastar::future<std::tuple<pg_pool_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, seastar::future<boost::intrusive_ptr<crimson::os::FuturizedCollection> > >&&)>&&)::{lambda(seastar::internal::promise_base_with_type<boost::intrusive_ptr<crimson::osd::PG> >&&, seastar::noncopyable_function<seastar::future<boost::intrusive_ptr<crimson::osd::PG> > (std::tuple<seastar::future<std::tuple<pg_pool_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, seastar::future<boost::intrusive_ptr<crimson::os::FuturizedCollection> > >&&)>&, seastar::future_state<std::tuple<seastar::future<std::tuple<pg_pool_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, seastar::future<boost::intrusive_ptr<crimson::os::FuturizedCollection> > > >&&)#1}, std::tuple<seastar::future<std::tuple<pg_pool_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, seastar::future<boost::intrusive_ptr<crimson::os::FuturizedCollection> > > >::run_and_dispose() in ceph-osd
11# 0x000055574E58B2A1 in ceph-osd

@xxhdx1985126
Copy link
Contributor Author

@Matan-B It seems that qa-proxy.ceph.com doesn't work anymore, is there any other way to get the log? Thanks:-)

It's back :)

I got "403 Forbidden" when accessing qa-proxy.ceph.com; what should I do? Thanks:-)

@Matan-B
Copy link
Contributor

Matan-B commented Aug 29, 2023

I got "403 Forbidden" when accessing qa-proxy.ceph.com; what should I do? Thanks:-)

Same for me, you can join the slack sepia channel for updates.

Copy link

github-actions bot commented Dec 6, 2023

This pull request has been automatically marked as stale because it has not had any activity for 60 days. It will be closed if no further activity occurs for another 30 days.
If you are a maintainer or core committer, please follow-up on this pull request to identify what steps should be taken by the author to move this proposed change forward.
If you are the author of this pull request, thank you for your proposed contribution. If you believe this change is still appropriate, please ensure that any feedback has been addressed and ask for a code review.

@xxhdx1985126
Copy link
Contributor Author

@Matan-B @athanatos Could you take a final look at this PR, please? Thansk:-)

Copy link
Contributor

@Matan-B Matan-B left a comment

Choose a reason for hiding this comment

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

@Matan-B
Copy link
Contributor

Matan-B commented Jan 30, 2024

@xxhdx1985126
Copy link
Contributor Author

xxhdx1985126 commented Jan 31, 2024

@Matan-B Hi, I've just fixed our testbed, and it seems that there's still problem with this PR, I'm looking into it. Sorry for this inconvenience.

@xxhdx1985126
Copy link
Contributor Author

@Matan-B @athanatos this PR has passed our teuthology test, here's the results:
results.log

@athanatos
Copy link
Contributor

Pushed with wip-sjust-crimson-testing-2024-02-19

@xxhdx1985126
Copy link
Contributor Author

@Matan-B @athanatos this PR has passed our teuthology test, here's the results: results.log

Please ignore this, I was testing the wrong build.

@athanatos
Copy link
Contributor

@xxhdx1985126 Gotcha, the test run above may nonetheless be sufficient to merge once it completes.

@Matan-B
Copy link
Contributor

Matan-B commented Feb 20, 2024

Tests generally look ok although this looks odd:

2024-02-20T02:14:52.052 INFO:tasks.workunit.client.0.smithi125.stdout:[  FAILED  ] LibRadosList.ListObjects
2024-02-20T02:14:52.052 INFO:tasks.workunit.client.0.smithi125.stdout:[  FAILED  ] LibRadosList.ListObjectsZeroInName
2024-02-20T02:14:52.052 INFO:tasks.workunit.client.0.smithi125.stdout:[  FAILED  ] LibRadosList.ListObjectsNS
2024-02-20T02:14:52.052 INFO:tasks.workunit.client.0.smithi125.stdout:[  FAILED  ] LibRadosList.ListObjectsStart
2024-02-20T02:14:52.052 INFO:tasks.workunit.client.0.smithi125.stdout:[  FAILED  ] LibRadosList.ListObjectsCursor
2024-02-20T02:14:52.053 INFO:tasks.workunit.client.0.smithi125.stdout:[  FAILED  ] LibRadosList.EnumerateObjects
2024-02-20T02:14:52.053 INFO:tasks.workunit.client.0.smithi125.stdout:[  FAILED  ] LibRadosList.EnumerateObjectsSplit
...

2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_list_objects_empty
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_list_objects
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_list_ns_objects
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_locator
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_aio_write
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_aio_write_no_comp_ref
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_aio_append
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_aio_write_full
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_aio_writesame
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_aio_stat
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_aio_remove
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_aio_execute

Haven't seen that before, I'll test main for comparison. @xxhdx1985126 Can you run these unit tests locally if you have this build? Thanks!

https://pulpito.ceph.com/matan-2024-02-20_08:26:01-crimson-rados-main-distro-crimson-smithi/

@xxhdx1985126
Copy link
Contributor Author

Tests generally look ok although this looks odd:

2024-02-20T02:14:52.052 INFO:tasks.workunit.client.0.smithi125.stdout:[  FAILED  ] LibRadosList.ListObjects
2024-02-20T02:14:52.052 INFO:tasks.workunit.client.0.smithi125.stdout:[  FAILED  ] LibRadosList.ListObjectsZeroInName
2024-02-20T02:14:52.052 INFO:tasks.workunit.client.0.smithi125.stdout:[  FAILED  ] LibRadosList.ListObjectsNS
2024-02-20T02:14:52.052 INFO:tasks.workunit.client.0.smithi125.stdout:[  FAILED  ] LibRadosList.ListObjectsStart
2024-02-20T02:14:52.052 INFO:tasks.workunit.client.0.smithi125.stdout:[  FAILED  ] LibRadosList.ListObjectsCursor
2024-02-20T02:14:52.053 INFO:tasks.workunit.client.0.smithi125.stdout:[  FAILED  ] LibRadosList.EnumerateObjects
2024-02-20T02:14:52.053 INFO:tasks.workunit.client.0.smithi125.stdout:[  FAILED  ] LibRadosList.EnumerateObjectsSplit
...

2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_list_objects_empty
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_list_objects
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_list_ns_objects
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_locator
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_aio_write
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_aio_write_no_comp_ref
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_aio_append
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_aio_write_full
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_aio_writesame
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_aio_stat
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_aio_remove
2024-02-20T02:17:48.956 INFO:tasks.workunit.client.0.smithi027.stdout:FAILED ../../../clone.client.0/src/test/pybind/test_rados.py::TestIoctx::test_aio_execute

Haven't seen that before, I'll test main for comparison. @xxhdx1985126 Can you run these unit tests locally if you have this build? Thanks!

https://pulpito.ceph.com/matan-2024-02-20_08:26:01-crimson-rados-main-distro-crimson-smithi/

Yeah, will try.

@Matan-B
Copy link
Contributor

Matan-B commented Feb 20, 2024

main looks clean, what were the local results?

@xxhdx1985126
Copy link
Contributor Author

I have the same error, will look into it.

@xxhdx1985126
Copy link
Contributor Author

xxhdx1985126 commented Feb 20, 2024

2024-02-20T12:15:30.594 INFO:tasks.workunit.client.0.scephqa03.stdout:/da1/xxh/rpmbuild/BUILD/ceph-19.0.0-1585-g1dd88d8ee6b/src/test/librados/list.cc:38: Failure
2024-02-20T12:15:30.595 INFO:tasks.workunit.client.0.scephqa03.stdout:Expected equality of these values:
2024-02-20T12:15:30.595 INFO:tasks.workunit.client.0.scephqa03.stdout: std::string(entry)
2024-02-20T12:15:30.595 INFO:tasks.workunit.client.0.scephqa03.stdout: Which is: "snapmapper"
2024-02-20T12:15:30.596 INFO:tasks.workunit.client.0.scephqa03.stdout: "foo"

It seems that the errors are by design. Since we are creating per-pg snapmapper objects, they are supposed to be listed, which is not what the librados unittests expect.

So it seems that it's the unittests that should be adjusted. Will try it:-)

It seems that the snapmapper object is exposed, will try to hide it.

@athanatos
Copy link
Contributor

@xxhdx1985126 Right, librados users should only ever see librados objects, OSD internal objects shouldn't be exposed.

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
@xxhdx1985126
Copy link
Contributor Author

xxhdx1985126 commented Feb 21, 2024

2024-02-21T06:31:10.547 INFO:teuthology.run:Summary data:
description: crimson-rados/basic/{clusters/fixed-2 crimson-supported-all-distro/centos_latest
crimson_qa_overrides deploy/ceph tasks/rados_api_tests}
duration: 3245.61913895607
flavor: crimson
owner: scheduled_teuthology@cephqa09
success: true

2024-02-21T06:31:10.548 DEBUG:teuthology.report:Pushing job info to http://10.57.38.110:8080/
2024-02-21T06:31:10.651 INFO:teuthology.run:pass

@Matan-B @athanatos snapmapper objects have been hidden, and the test succeeded, please take a look again

-> PG::interruptible_future<std::tuple<std::vector<hobject_t>, hobject_t>> {
auto& [objects, next] = ret;
auto is_snapmapper = [&pg](const hobject_t &obj) {
if (obj == pg.make_snapmapper_oid().hobj) {
Copy link
Contributor

Choose a reason for hiding this comment

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

Instead of adding pg ref parameter we can introduce static bool PG::is_snapmapper_oid().

static inline bool is_snapmapper_oid(const hobject_t &obj) {
  return (obj.hobj.oid.name == "snapmapper");
}

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Done.

Copy link
Contributor

Choose a reason for hiding this comment

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

Thanks, will schedule test after make check passes

Otherwise, PG::read_log_and_missing() will meet those key-values and
won't know what to do with them. This is modeling what the classic
osd is doing

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
@xxhdx1985126 xxhdx1985126 force-pushed the wip-crimson-pg-snapmapper-obj branch 2 times, most recently from 81c45ac to d0cfc58 Compare February 21, 2024 09:51
@@ -1443,7 +1459,8 @@ static PG::interruptible_future<> do_pgls_filtered(
lower_bound,
nspace,
osd_op.op.pgls.count,
filter.get())
filter.get(),
pg)
Copy link
Contributor

Choose a reason for hiding this comment

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

no longer needed

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Ah, yes, sorry, I thought it wouldn't need a recompilation...

@@ -1399,7 +1414,8 @@ static PG::interruptible_future<> do_pgls(
lower_bound,
nspace,
osd_op.op.pgls.count,
nullptr /* no filter */)
nullptr /* no filter */,
pg)
Copy link
Contributor

Choose a reason for hiding this comment

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

ditto

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
@Matan-B Matan-B merged commit b420380 into ceph:main Mar 6, 2024
11 checks passed
@xxhdx1985126 xxhdx1985126 deleted the wip-crimson-pg-snapmapper-obj branch April 23, 2024 02:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
3 participants