mds/QuiesceDb: Manager, Agent, a-sock i-face, mgr/volumes CLI#54485
mds/QuiesceDb: Manager, Agent, a-sock i-face, mgr/volumes CLI#54485
Conversation
bd2ae3d to
f14f0d2
Compare
|
jenkins test make check |
1 similar comment
|
jenkins test make check |
feeeaa9 to
c59bdc7
Compare
f1a70e3 to
c6e5769
Compare
7c095a7 to
d972227
Compare
batrick
left a comment
There was a problem hiding this comment.
I have more code review to do but this is a nice checkpoint. I really appreciate your efforts to make this unit testable. Well done!
dcef60c to
ecd1b9b
Compare
* create an instance of the QuiesceDbManager in the rank * update membership with a new mdsmap * add an admin socket command for sending requests to the manager Signed-off-by: Leonid Usov <leonid.usov@ibm.com>
Fixes: https://tracker.ceph.com/issues/63708 Signed-off-by: Leonid Usov <leonid.usov@ibm.com>
Signed-off-by: Leonid Usov <leonid.usov@ibm.com>
Signed-off-by: Leonid Usov <leonid.usov@ibm.com>
Signed-off-by: Leonid Usov <leonid.usov@ibm.com>
Signed-off-by: Leonid Usov <leonid.usov@ibm.com>
Signed-off-by: Leonid Usov <leonid.usov@ibm.com>
Signed-off-by: Leonid Usov <leonid.usov@ibm.com>
Signed-off-by: Leonid Usov <leonid.usov@ibm.com>
With these dedicated structs we can fully defer to QuiesceDbEncoding when encoding/decoding quiesce db messages Signed-off-by: Leonid Usov <leonid.usov@ibm.com>
Signed-off-by: Leonid Usov <leonid.usov@ibm.com>
|
@vshankar here's the latest re-run of the fs suite on this PR post the latest changes to address the review comments. That included utilizing the Monitor map for calculating and broadcasting the common cluster state. https://pulpito.ceph.com/leonidus-2024-03-04_07:05:03-fs-wip-lusov-qdb-distro-default-smithi/ |
| auto const& leader = fs.mds_map.get_quiesce_db_cluster_leader(); | ||
| auto const& members = fs.mds_map.get_quiesce_db_cluster_members(); | ||
| ceph_assert(leader == MDS_GID_NONE || members.contains(leader)); | ||
| ceph_assert(std::ranges::all_of(members, [&infos = fs.mds_map.mds_info](auto m){return infos.contains(m);})); |
There was a problem hiding this comment.
This last assert may backfire on you. If you ever change it so members may exist outside the MDSMap, then any monitor that decodes (update_from_paxos) the change (without being upgraded) will fail this sanity check.
However, I think the likelihood of that is low and we have in the past indicated that a monitor upgrade should disable the fsmap sanity checks for this type of problem (which we don't like doing).
There was a problem hiding this comment.
Well, I'll make sure to only update the logic once all monitors are on the new version.
|
Thanks Patrick! 🎉 I was investigating this Resize test failure, and I couldn't figure out the reason for one of the MDSes to start lagging. It looks like the mdslock held locked, but I doubt it could be the result of the quiesce db, as it's empty in all these tests. it's in the |
|
jenkins test make check |
Have you checked
I don't see these failures in the main branch run - I ran the fs suite yesterday and those do not have there failures. How reproducible are these? |
With the change we can now avoid having to join it during the membership update, preventing potential deadlocks Signed-off-by: Leonid Usov <leonid.usov@ibm.com>
|
@vshankar I see that the issue was fixed with the latest version. Here are two dedicated filtered runs
And the latest full fs suite run is still going as of writing this. |
|
jenkins test dashboard |
|
jenkins test dashboard cephadm |
Looks good. Have you checked these two failures if those are related to this change? |
|
@vshankar I looked at the logs but the cause of the failure wasn't obvious to me. I'm still looking for the cause, and planning to inspect the MDS logs. In the meantime, I scheduled a 20-set of the same test twice:
Both sets have a 100% failure rate, making this PR an unlikely cause of the failure. |
The untar_snap_rm.sh failure is a kclient bug. See - https://tracker.ceph.com/issues/64679#note-4. |
And the kerne_build_untar failure too is related to the above. We would want to rerun the failed jobs once the issue is fixed. Otherwise LGTM 👍 |
|
jenkins test make check arm64 |
|
jenkins test dashboard |
|
jenkins test dashboard cephadm |
Quiesce DB is one of the components of the "Consistent Snapshots" epic.
The solution is overviewed in a slide deck available for viewing to @redhat users.
Related redmine tickets:
This PR focuses on the replicated quiesce database maintained by the MDS rank cluster. One of the major goals was to design the component in a way that can be easily tested outside of the MDS infrastructure, which is why the communication layer has been abstracted out by introducing just two communication callbacks that will need to be implemented by the infrastructure.
Most of the component code is delivered in a single coherent commit, along with the unit tests. Other commits will be dedicated to integration with the MDS infrastructure and other changes that can't be attributed to the core quiesce db code or its tests.
The quiesce db component is composed of the following major parts/actors:
QuiesceDbManageris the main actor, implementing both the leader and the replica roles. Normally, there will be an instance of the manager per MDS rank, although, given the decoupling of the infrastructure and the manager, one can run any number of instances on a single node, which is how tests are working.QuiesceClusterMembershipis how the manager is configured to be part of a (virtual) cluster. This structure will deliver information about other peers, and the leader, and provide two communication APIs:send_listing_tofor db replication from the leader to replicas andsend_ackfor reporting quiesce success from the agents.QuisceMapnotify callback and a dedicated manager method to submit asynchronous acks following the agent (rank) quiesce progress.QuiesceDbRequeststructure. This should help with the implementation of other components that will have to propagate the functionality to the administrator user of the volumes plugin.Show available Jenkins commands
jenkins retest this pleasejenkins test classic perfjenkins test crimson perfjenkins test signedjenkins test make checkjenkins test make check arm64jenkins test submodulesjenkins test dashboardjenkins test dashboard cephadmjenkins test apijenkins test docsjenkins render docsjenkins test ceph-volume alljenkins test ceph-volume toxjenkins test windowsjenkins test rook e2e