[ovirt-devel] execCmd() and storing stdout and stderr in log file

Tomáš Golembiovský tgolembi at redhat.com
Thu Jul 21 10:51:15 UTC 2016


On Thu, 21 Jul 2016 03:26:44 -0400 (EDT)
Francesco Romani <fromani at redhat.com> wrote:

> ----- Original Message -----
> > From: "Nir Soffer" <nsoffer at redhat.com>
> > To: "Yaniv Bronheim" <ybronhei at redhat.com>
> > Cc: "Shahar Havivi" <shaharh at redhat.com>, "Richard Jones" <rjones at redhat.com>, "devel" <devel at ovirt.org>
> > Sent: Tuesday, July 19, 2016 4:18:31 PM
> > Subject: Re: [ovirt-devel] execCmd() and storing stdout and stderr in log	file
> > 
> > On Tue, Jul 19, 2016 at 5:07 PM, Yaniv Bronheim <ybronhei at redhat.com> wrote:  
> > >
> > > On Tue, Jul 19, 2016 at 4:56 PM, Tomáš Golembiovský <tgolembi at redhat.com>
> > > wrote:  
> > >>
> > >> On Thu, 14 Jul 2016 17:25:28 +0300
> > >> Nir Soffer <nsoffer at redhat.com> wrote:
> > >>  
> > >> > After https://gerrit.ovirt.org/#/c/46733/ you should be able to create
> > >> > the pipeline in python like this:
> > >> >
> > >> >     v2v = Popen(["virt-v2v", ...], stdout=PIPE, stderr=STDOUT)
> > >> >     tee = Popen(["tee", "-a", logfile], stdin=v2v.stdout, stdout=PIPE,
> > >> > stderr=PIPE)
> > >> >
> > >> > Now we can read output from tee.stdout, and when tee is finished, we can
> > >> > wait
> > >> > for v2v to get the exit code.
> > >> >
> > >> > Since all output would go to tee stdout and stderr may only contain tee
> > >> > usage
> > >> > errors, we don't need to use AsyncProc, making this code python 3
> > >> > compatible.  
> > >>
> > >>
> > >> Yes, this may actualy work. And do we plan to adopt the cpopen 1.4.1,
> > >> where
> > >> this is fixed, in VDSM?  
> > >
> > >
> > > cpopen 1.5.1 - and yes but not in ovirt-4.0  
> > 
> > It is included in 1.4.1, released ages ago.
> > 
> > $ git log --oneline --decorate
> > 826b5ef (HEAD -> master, origin/master, origin/HEAD) Raise version for 1.5
> > build
> > a9d2a72 (inherit-fds) Add tests for disabling the close-on-exec flag
> > 7163e79 Do not close inherited fds from parent
> > 1b170fb (gerrit/master) Raising release number and tagging cpopen 1.4.1
> > 69ae841 Sort imports to make it easier to add new imports
> > 1116830 Simplify tests using CPopen.communicate()
> > 58e1b43 Remove unneeded and wrong retry after fork
> > fbf9ff3 Remove wrong and unneeded retry for execv
> > 74ee4a0 Do not retry close() after interrupt
> > 1abde2b Use _exit to terminate child after failure
> > 8709c42 Fix incorrect fd closing
> > 
> > $ git show 1b170fb --format=fuller
> > commit 1b170fb8f2d204457ca66e53936fd3a059f4ed4b
> > Author:     Yaniv Bronhaim <ybronhei at redhat.com>
> > AuthorDate: Wed Oct 14 15:40:07 2015 +0300
> > Commit:     Yaniv Bronhaim <ybronhei at redhat.com>
> > CommitDate: Wed Oct 14 09:36:31 2015 -0400
> > 
> >     Raising release number and tagging cpopen 1.4.1
> > 
> >     Recent patches include only bug fixes. see commit messages
> > 
> >     Change-Id: Ia1d32dd5bd7f60681b64251cef217c8d1e41b14b
> >     Signed-off-by: Yaniv Bronhaim <ybronhei at redhat.com>  
> 
> Thanks to everyone for comments and insights.
> 
> I think is time to wrap up so Tomas can finish his work.
> 
> So, the options on the table are:
> 1. Build pipelines in python (Nir's approach above)
>   - looks like the the fix is in cpopen 1.4.1, available

X. One more option that occured to me is: use Nir's approach but use
   subprocess.Popen directly.
     - since Yaniv said updated cpopen won't be available for 4.0
     - and since we're aiming for subprocess.Popen in a log run anyway (if my
       understanding is correct)
     - and since the package for python-subprocess32 is available in our 4.0
       dependencies repo already

> 2. add options to execCmd to redirect stderr
>    - make execCmd even bigger, makes everyone grumpy
>    - could require a couple of simple fixes (talked with
>      Tomas privately, nothing groundbreaking - like one between stdout
>      and stderr could be None and we must cope with that)
> 3. DUP execCmd just for v2v and just to avoid making it more complex
>    - see https://gerrit.ovirt.org/#/c/60660/
>    - even worse than extending execCmd?
>    - still needs the fixes above
> 4. use shell tricks and reuse existing execCmd
>    - reviewers/future selves needs to wrap their head on that shell magic
>    - PERHAPS fragile? I don't really know
> 5. something else I forgot?
> 
> 
> I think the approaches here are ordered by likeness and feasibility,
> so I'd actually try in this order (1->2->3->4)
> 
> Please ACK/NACK the above, so Tomas can conclude this patch
> for next monday (20160725)
> 
> -- 
> Francesco Romani
> RedHat Engineering Virtualization R & D
> Phone: 8261328
> IRC: fromani


-- 
Tomáš Golembiovský <tgolembi at redhat.com>



More information about the Devel mailing list