Re: [PATCH 2/4] transport-helper: check if remote helper is alive
- From
Felipe Contreras <felipe.contreras@gmail.com>
- Date
- Apr 2, 2013, 00:12 UTC
- Message-ID
- <CAMP44s0uJ4ivNLw984CXWYk5HcKevuUJmpYOiyqbT1QJDaYd0Q@mail.gmail.com>
- In-Reply-To
- <20130401233313.GB30935@sigill.intra.peff.net>
On Mon, Apr 1, 2013 at 5:33 PM, Jeff King <peff@peff.net> wrote:
Show 21 quoted lines
> On Mon, Apr 01, 2013 at 03:46:42PM -0600, Felipe Contreras wrote:
>
>> Otherwise transport-helper will continue checking for refs and other
>> things what will confuse the user more.
>> [...]
>> diff --git a/transport-helper.c b/transport-helper.c
>> index cb3ef7d..dfdfa7a 100644
>> --- a/transport-helper.c
>> +++ b/transport-helper.c
>> @@ -460,6 +460,10 @@ static int fetch_with_import(struct transport *transport,
>>
>> if (finish_command(&fastimport))
>> die("Error while running fast-import");
>> +
>> + if (!check_command(data->helper))
>> + die("Error while running helper");
>> +
>> argv_array_free_detached(fastimport.argv);
>
> Can you be more specific about what happens when we miss the death here,
> what happens next, etc?I have seen problems sporadically, like git trying to update refs to object that don't exist. I also remember seeing mismatches between the marks and the remote branches refs.
Show 16 quoted lines
> Checking asynchronously for death like this is subject to a rac > condition; the helper may be about to die but not have died yet. In > practice we may catch some cases, but this seems like an indication that > the protocol is not well thought-out. Usually we would wait for a > confirmation over the read pipe from a child, and know that the child > failed when either: > > 1. It tells us so on the pipe. > > 2. The pipe closes (at which point we know it is time to reap the > child). > > Why doesn't that scheme work here? I am not doubting you that it does > not; the import helper protocol is a bit of a mess, and I can easily > believe it has such a problem. But I'm wondering if it's possible to > improve it in a more robust way.
The pipe is between fast-export and the remote-helper, "we" (transport-helper) are not part of the pipe any more. That's the problem.
Cheers.
-- Felipe Contreras