Sam Lang wrote:

On Jul 24, 2006, at 2:07 PM, Pete Wyckoff wrote:

[EMAIL PROTECTED] wrote on Mon, 24 Jul 2006 14:47 -0400:

3) the state machine language has a keyword that lets you state that the
next state is "terminate" which could be used to finish the state
machine, but right now the code has logic that detects this and prints a
warning that you should NOT use this.  I don't know why we created  this
method and then made it illegal.  Go figure!


I prefer #3 by a large margin over the other options.  It's
explicit, not racy, doesn't over-use the return value for a
conceptually different event, and doesn't rely on modifying
parent state.  Wonder why it was disabled.

I think terminate ended up being more of a placeholder...we still use it in quite a few of our state machines, but the last state action is expected to call server_state_machine_complete which prevents the SM from transitioning to the 'terminate' state. I've thought of it as an assert: if you get here you're forgetting something.

It sounds like option 3 is best. My only concern would be using the state machine definition to define completion makes me forget about cleaning up in the last action (or actions). I wouldn't mind seeing option 3 and option 4 being required: check the return code and make sure the next state is 'terminate'. If one of those fails there's a bug in the code. I think that might help (at least me) verify that state actions that are meant to complete need to do cleanup first.

I like that idea. I tend to agree that there is an issue making sure the state action matches up to the state machine, and that seems like a reasonable way to do it.

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.

Walt

-sam


Regarding names, STATE_COMPLETE and STATE_MACHINE_TERMINATED seem
like find candidates as you have sort of suggested.

My pocket change.

        -- Pete
_______________________________________________
Pvfs2-developers mailing list
[email protected]
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers


--
Dr. Walter B. Ligon III
Associate Professor
ECE Department
Clemson University
_______________________________________________
Pvfs2-developers mailing list
[email protected]
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers

Reply via email to