So let's assume for the moment we'll take that approach, there is a related issue with the "cleaning up." In the server, the last state action is expected to call server_state_machine_complete as you pointed out and return the return code it provides (which could easily be changed to be SM_ACTION_TERMINATE). The client has no such call, but instead uses code in the "test" and "testsome" loops. I'd like to see the two of them working the same - I could change the client so there is a similar cleanup function each SM is expected to call, or alternatively both the client and server could be required to provide a cleanup callback function that would be called automatically on terminate.

Of course, if cleanup were called automatically on terminate it might obviate the need for the SM_ACTION_TERMINATE return code. :-)

Of course this is all pretty much style issues, but it isn't often someone is up to the elbows in this to go ahead and make such changes.

If you are looking to make the client and server sms more symmetric regarding how they terminate, it seems like the client sms could just as easily use a termination function too (whether it is triggered automatically by the terminate transition, or something run explicitly). It would just record the status and stick something (either the sm struct, or some other struct containing just status info) in a client side completion queue. The client side test functions would still exist- they would just be simplified into:

- is my op in the completion queue?
  - if so return
  - if not, then "do work"
- is my op in the completion queue?
- return (either report status or indicate nothing finished)

The "do work" bit would be a subroutine that runs the chunk of code that is currently duplicated (eek) in PINT_client_state_machine_test and PINT_client_state_machine_testsome() to push jobs and run the sm engine.

I don't think we can get rid of the test() and testsome() calls on the client side since we need those to make progress as long as the library doesn't have a progress thread- but you could definitely pull some of their work into an sm termination function.

As a side note, a termination function on the client side would also be a handy place to trigger callback functions if we ever found a need to go to using threads and a callback based API there.

-Phil
_______________________________________________
Pvfs2-developers mailing list
Pvfs2-developers@beowulf-underground.org
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers

Reply via email to