mds,client: update the oldest_client_tid via the renew caps#54259
mds,client: update the oldest_client_tid via the renew caps#54259
Conversation
| mds->locker->resume_stale_caps(session); | ||
| mds->sessionmap.touch_session(session); | ||
| } | ||
| trim_completed_request_list(m->oldest_client_tid, session); |
There was a problem hiding this comment.
what about the FLUSH_ACK that is usually sent back for a FLUSH req ?
isn't that necessary in this situation ?
maybe we should send back the oldest_tid in the renew caps ack msg and act on the oldest tid on the client side as if a FLUSH_ACK was was received
There was a problem hiding this comment.
The flush ack sounds not reliable, we couldn't guarantee that this will always work. But for the session's renew caps msg we can be sure that this will be sent per tick. This will also be used to keep the client alive.
There was a problem hiding this comment.
Also please note the WRITE requests do not mean the real write contents to Rados, the WRITE means the request ops have the bit of #define CEPH_MDS_OP_WRITE 0x001000. Such as create/setattr,etc.
So if all the WRITE requests are sync create ops, it seems there has no cap flush or flush ack between MDS and clients.
Fixes: https://tracker.ceph.com/issues/63364 Signed-off-by: Xiubo Li <xiubli@redhat.com>
Update the oldest_client_tid via the session renew caps msg to make sure that the MDSs won't pile up the completed request list in a very large size. Fixes: https://tracker.ceph.com/issues/63364 Signed-off-by: Xiubo Li <xiubli@redhat.com>
|
Can this be worked out without the clients' intervention by maintaining the last tid the MDS acknowledged to a client (during safe reply) and then in trimming completed_requests in tick()? |
I am afraid this won't work. From my understanding the |
|
jenkins retest this please |
pardon my ignorance ... but what is the use of maintaining |
Such as from https://github.com/ceph/ceph/blob/main/src/mds/Server.cc#L2497-L2528, when the clients are replaying the completed requests, the MDS will just treat them as lookup requests, instead of handling the request twice. There also some other places doing similar check in mds. I am afraid handling the same request twice will fail, such when creating a new file, the second try will fail with file already existing ? So we couldn't trim the |
|
jenkins test api |
Update the oldest_client_tid via the session renew caps msg to
make sure that the MDSs won't pile up the completed request list
in a very large size.
Fixes: https://tracker.ceph.com/issues/63364
Contribution Guidelines
To sign and title your commits, please refer to Submitting Patches to Ceph.
If you are submitting a fix for a stable branch (e.g. "quincy"), please refer to Submitting Patches to Ceph - Backports for the proper workflow.
When filling out the below checklist, you may click boxes directly in the GitHub web UI. When entering or editing the entire PR message in the GitHub web UI editor, you may also select a checklist item by adding an
xbetween the brackets:[x]. Spaces and capitalization matter when checking off items this way.Checklist
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 windows