Print

Print


Ah, for Stop() not so! Reference counts are transitive. If A references B and B references C then C's reference count can't be decremented until the reference to B is reduced to zero. Simply replace A with request, B with session, and C with service. This is an n to m to 1 mapping. It  works that way in every reference counting system.

SSI really can't give you a representative snapshot of requests because whatever it would give you would be potentially incorrect. Why? There are non-SSI threads that may change the state of a request at any point. Only the application knows the actual state because it knows the meta-state. SSI only knows the current transitory state and by the time it reports it to you that state may have changed. That's why SSI can't do it. It's really the application that is in control here.

This issue arises because, unlike most RPC-type system (think NFS, AFS, or even hitting the X button on your browser), SSI allows you to asynchronously cancel a request at any point. This was an imperative from LSST to solve the control-C problem (I launch a request and then change my mind). A request had to be cancelled immediately no matter what. That necessarily shifted the burden of keeping track of requests to the application layer (easily done using std::set).

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/xrootd/xrootd/issues/775#issuecomment-414601482

########################################################################
Use REPLY-ALL to reply to list

To unsubscribe from the XROOTD-DEV list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=XROOTD-DEV&A=1