On Aug 4, 2008, at 9:40 AM, Jeff Squyres wrote:

On Aug 2, 2008, at 2:34 PM, Brian Barrett wrote:

I am curious how all of the above affects client/server or spawned jobs. If you finalize a BTL then do a connect to a process that would use that BTL would it reinitialize itself?

To deal with all the dynamics issues, I wouldn't finalized the BTL. The BML should handle the progress stuff, just as if the add_procs succeeded but returned no active peers. But I'd guess that's part of the bit that doesn't work today. I would further suspect that a BTL will need to have a working progress function in the face of add_procs failures to cope with all the dynamics options. I'm travelling this weekend, so I can't verify any of this at the moment.


This seems a little different than the rest of the code base -- we're talking about having the BTL return an error but have the upper level not treat it as a fatal error.

I think we actually have a few different situations ("fail" means "not returning OMPI_SUCCESS"):

1. btl component init fails (only during MPI_INIT): the API supports no notion of failure -- it either returns modules or not (i.e., valid pointers or NULL). If NULL is returned, the component is ignored and unloaded.
2. btl add_procs during MPI_INIT fails: this is under debate
3. btl add_procs during MPI-2 dynamics fails: this is under debate

For #2 and #3, I suspect that only the BTL knows if it can continue or not. For example, a failure in #3 may cause the entire BTL to be hosed such that it can no longer communicate with procs that it previously successfully added (e.g., in MPI_INIT). So we really need add_procs to be able to return multiple things:

A. OMPI_SUCCESS / all was good
B. a non-fatal error occurred such that this BTL cannot communicate with the desired peers, but the upper level PML can continue C. a fatal error has occurred such that the upper level should abort (or, more specifically, do whatever the error manager says)

I think that for B in both #2 and #3, we can just have the BTL set all the reachability bits to 0 and return OMPI_SUCCESS. But for C, the BTL should return != OMPI_SUCCESS. The PML should treat it as a fatal error and therefore call the error manager.

I think that this is in-line with Brian's original comments, right?

I suppose, but that's a pain when you just want to say "I don't support calling add_procs a second time" :). But I'm not going to fix all the BTLs to make that work right, so I suppose in the end I really don't have a strong opinion.

Brian

Reply via email to