[CRIU] [PATCH 2/2] p.haul: use ssh tunneling and controll it with ssh* cmdline opts
Pavel Emelyanov
xemul at parallels.com
Mon Oct 27 12:51:43 PDT 2014
On 10/27/2014 11:53 PM, Ruslan Kuprieiev wrote:
> On 27.10.2014 20:39, Pavel Emelyanov wrote:
>> _rpc_proxy_caller(self._rpc_sk, RPC_CMD, "init_rpc")(args)
>>>>> @@ -51,7 +57,17 @@ class rpc_proxy:
>>>>>
>>>>> def _make_sk(self):
>>>>> sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>>>> - sk.connect((self._srv, rpc_port))
>>>>> + # ssh tunnel needs some time to start working, so lets
>>>>> + # make CONNECT_ATTEMPTS attempts to connect.
>>>> I don't like it. Can you shed more light on what's going on here?
>>> We have no way to check if ssh tunnel is created other than try to connect.
>> Yes, and AFAIU when you connect to local ssh, it "blocks" the
>> connection and goes to connect remotely. I don't see the need
>> in retries.
>
> There is a race condition happening, ssh can't bind to local port so fast.
Ah, I see. Anyway strange. There should be a race-free way of
asking ssh to report back smth when the socket is created and
ready to serve.
> So we need to try to connect a bunch of times(not using connection timeout)
> and only then fail.
>
>>> But I should have used connection timeout here =). Will fix.
>>>
>>>>> + for n in xrange(CONNECT_ATTEMPTS):
>>>>> + try:
>>>>> + sk.connect(self._srv)
>>>>> + except socket.error as e:
>>>>> + if e.errno != errno.ECONNREFUSED or n == CONNECT_ATTEMPTS - 1:
>>>>> + raise e
>>>>> + else:
>>>>> + continue
>>>>> + break
>>>>> host = _rpc_proxy_caller(sk, RPC_CMD, "get_name")()
>>>>> return (sk, host)
>>>>>
>
> .
>
More information about the CRIU
mailing list