My `req_state*` is containing spans for a particular request to trace that
request, but as we know req_state is not available everywhere I tried to
insert a req_state variable in CephContext class because every portion of
RGW has access to it and so they will also have access to req_state, but
this wont work because it is on time initialized and when request run in
parallel race condition might occur and traces will be inaccurate.
The Second method I tried was to include req_state in RGWRadosStore and
RGWUserCtl because these are accessible to every function which I want to
trace, but again these also have race condition risk.
Can anyone give me any tip how to make req_state available in all
functions(if not all then majority) particularly this functions like
RGWRadosStore and RGWUserCtl
I am a research student from India working on QoS for distributed storage systems. I was studying the implementation of mClock in ceph for my research purposes. I am stuck with some doubts. It would be really helpful if someone can clarify some of them.
If possible please help me understand these. Also please correct me if anything is wrong here.
* I was checking https://www.slideshare.net/ssusercee823/implementing-distributed-mclock-in-…, there it was mentioned that dmClock is implemented in ceph. But when I checked the master branch of ceph, rho and delta are not sent from the client and add_request() function is called with null_req_params. Is dmClock implemented in some other branch of ceph?
* When an MOSDRepOp is received in an OSD node, PullPriorityQueue::add_request() is called with a client id that corresponds to the primary OSD which sent the MOSDRepOp. Why actual client which sent the MOSDOp is not taken as the client id? Is there any particular reason for this?
* When an MOSDRep has reached the primary osd node, it goes to the mclock queue. When it is dequeued and MOSDRepOps are sent to replica nodes, these requests will again have to wait in replica node's mclock queue(client id corresponds to primary osd). Will this cause an inefficiency since it waits two times in queues?