<div dir="ltr">yep, we don&#39;t wait for the process inside cpopen code - we expect the caller to take care of it. if you use execCmd with sync=False (as in virt-v2v) - you have to take care for killing the process and wait for its pid after its done - you can see that with the fix  we raise exception and this exception is caught in _import func and call _abort which calls kill and sign the pid to zombiereaper which waits for it to die.<div>If you use execCmd with sync=True (the default) you can see that we wait until process exists and return.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Mar 30, 2016 at 5:30 PM, Nir Soffer <span dir="ltr">&lt;<a href="mailto:nsoffer@redhat.com" target="_blank">nsoffer@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Wed, Mar 30, 2016 at 3:32 PM, Shahar Havivi &lt;<a href="mailto:shaharh@redhat.com">shaharh@redhat.com</a>&gt; wrote:<br>
&gt; On 30.03.16 14:28, Nir Soffer wrote:<br>
&gt;&gt; On Wed, Mar 30, 2016 at 1:36 PM, Michal Skrivanek<br>
&gt;&gt; &lt;<a href="mailto:michal.skrivanek@redhat.com">michal.skrivanek@redhat.com</a>&gt; wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; On 30 Mar 2016, at 11:49, Richard W.M. Jones &lt;<a href="mailto:rjones@redhat.com">rjones@redhat.com</a>&gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; On Wed, Mar 30, 2016 at 12:19:35PM +0300, Shahar Havivi wrote:<br>
&gt;&gt; &gt;&gt;&gt; Hi,<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; We encounter a problem in VDSM project that virt-v2v become zombie task while<br>
&gt;&gt; &gt;&gt;&gt; importing vm from vmware.<br>
&gt;&gt; &gt;&gt;&gt; When virt-v2v is in &#39;copy disk&#39; mode and we someone deletes the vm at vmware<br>
&gt;&gt; &gt;&gt;&gt; the process hang in read() method,<br>
&gt;&gt; &gt;&gt;&gt; I am pretty sure that its not virt-v2v problem because when I run it from the<br>
&gt;&gt; &gt;&gt;&gt; shell virt-v2v exit with an error, still maybe someone have an idea....<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; I wrote a small python script that encounter the problem:<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; ----------------------------------------------------------------------------<br>
&gt;&gt; &gt;&gt;&gt; from cpopen import CPopen<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; env = {&#39;LIBGUESTFS_BACKEND&#39;: &#39;direct&#39;}<br>
&gt;&gt; &gt;&gt;&gt; cmd = [&#39;/usr/bin/virt-v2v&#39;, &#39;-ic&#39;,<br>
&gt;&gt; &gt;&gt;&gt;       &#39;vpx://....&#39;, &#39;-o&#39;,<br>
&gt;&gt; &gt;&gt;&gt;       &#39;local&#39;, &#39;-os&#39;, &#39;/tmp&#39;, &#39;-of&#39;, &#39;raw&#39;, &#39;-oa&#39;, &#39;sparse&#39;,<br>
&gt;&gt; &gt;&gt;&gt;       &#39;--password-file&#39;, &#39;/tmp/passwd&#39;, &#39;--machine-readable&#39;, &#39;bbb&#39;]<br>
&gt;&gt; &gt;&gt;&gt; p = CPopen(cmd, env=env)<br>
&gt;&gt; &gt;&gt;&gt; while p.returncode is None:<br>
&gt;&gt;<br>
&gt;&gt; p.returncode just return the instance variable, there is no wait() involved.<br>
&gt;&gt;<br>
&gt;&gt; The right way:<br>
&gt;&gt;<br>
&gt;&gt;     while p.poll() is None:<br>
&gt; the problem is proc.stdout.read(1) didn&#39;t raise and error when the stream<br>
&gt; closed but return &#39;&#39;.<br>
&gt; its a CPopen behaviour and works differently in subprocess.<br>
<br>
</div></div>No, it works the same in both, this was just a bug in our code.<br>
Fixed in <a href="https://gerrit.ovirt.org/55477" rel="noreferrer" target="_blank">https://gerrit.ovirt.org/55477</a><br>
<div class="HOEnZb"><div class="h5"><br>
&gt;<br>
&gt;&gt;         ...<br>
&gt;&gt;<br>
&gt;&gt; p.returncode calling wait is non-standard feature in vdsm AsyncProc<br>
&gt;&gt; wrapper. This is<br>
&gt;&gt; the object used by v2v vdsm module, so there accessing p.returncode does call<br>
&gt;&gt; p.poll().<br>
&gt;&gt;<br>
&gt;&gt; These non-standard apis will be removed from vdsm, please do not use them.<br>
&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;    c = p.stdout.read(1)<br>
&gt;&gt; &gt;&gt;&gt;    print c<br>
&gt;&gt; &gt;&gt;&gt; ----------------------------------------------------------------------------<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; An actual zombie task?  That would indicate that the parent process<br>
&gt;&gt; &gt;&gt; (your Python program) wasn&#39;t doing a wait system call.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; I downloaded the cpopen-1.4 program, and it doesn&#39;t appear to call any<br>
&gt;&gt; &gt;&gt; of the wait*(2) system calls anywhere, so that could be the problem.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I suppose the cpopen parameters are not alright…I’m sure vdsm developers can help with that.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Rich.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; --<br>
&gt;&gt; &gt;&gt; Richard Jones, Virtualization Group, Red Hat <a href="http://people.redhat.com/~rjones" rel="noreferrer" target="_blank">http://people.redhat.com/~rjones</a><br>
&gt;&gt; &gt;&gt; Read my programming and virtualization blog: <a href="http://rwmj.wordpress.com" rel="noreferrer" target="_blank">http://rwmj.wordpress.com</a><br>
&gt;&gt; &gt;&gt; virt-p2v converts physical machines to virtual machines.  Boot with a<br>
&gt;&gt; &gt;&gt; live CD or over the network (PXE) and turn machines into KVM guests.<br>
&gt;&gt; &gt;&gt; <a href="http://libguestfs.org/virt-v2v" rel="noreferrer" target="_blank">http://libguestfs.org/virt-v2v</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; _______________________________________________<br>
&gt;&gt; &gt; Devel mailing list<br>
&gt;&gt; &gt; <a href="mailto:Devel@ovirt.org">Devel@ovirt.org</a><br>
&gt;&gt; &gt; <a href="http://lists.ovirt.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.ovirt.org/mailman/listinfo/devel</a><br>
_______________________________________________<br>
Devel mailing list<br>
<a href="mailto:Devel@ovirt.org">Devel@ovirt.org</a><br>
<a href="http://lists.ovirt.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.ovirt.org/mailman/listinfo/devel</a></div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><span style="font-size:12.8px"><b>Yaniv Bronhaim.</b></span><br></div></div></div></div></div>
</div>