----- "Avi Kivity" <a...@redhat.com> wrote:

> Michael Goldish wrote:
> > ----- "Avi Kivity" <a...@redhat.com> wrote:
> >
> >   
> >> David Huff wrote:
> >>     
> >>> This patch will run pre and post scripts
> >>> defined in config file with the parameter pre_command
> >>> and post_command post_command.
> >>>
> >>> Also exports all the prameters in preprocess for passing
> >>> arguments to the script.
> >>>  
> >>> +   #execute any pre_commands
> >>> +    pre_command = params.get("pre_command")
> >>> +    if pre_command:
> >>> +        # export environment vars
> >>> +        for k in params.keys():
> >>> +            kvm_log.info("Adding KVM_TEST_%s to Environment" %
> >>>       
> >> (k))
> >>     
> >>> +            os.putenv("KVM_TEST_%s" % (k), str(params[k]))
> >>> +        # execute command
> >>> +        kvm_log.info("Executing command '%s'..." % pre_command)
> >>> +        timeout = int(params.get("pre_commmand_timeout", "600"))
> >>> +        (status, pid, output) = kvm_utils.run_bg("cd %s; %s" %
> >>>       
> >> (test.bindir, pre_command),
> >>     
> >>> +                                                 None,
> >>>       
> >> kvm_log.debug, "(pre_command) ", timeout=timeout)
> >>     
> >>> +        if status != 0:
> >>> +            kvm_utils.safe_kill(pid, signal.SIGTERM)
> >>> +            raise error.TestError, "Custom processing
> pre_command
> >>>       
> >> failed"
> >>     
> >>>   
> >>>       
> >> kvm_utils.run_bg should throw an exception instead of returning
> >> status.
> >>     
> >
> > - What if we're interested in the status for some reason? Its value
> > may indicate what went wrong with the child process.
> >   
> Put it in the exception string.

But I want its value to be examined programmatically in the code.
It's less comfortable to retrieve it from a string.

> > - If we throw an exception we should add a parameter that controls
> > whether an exception should be thrown (something like
> "ignore_status")
> > because in some cases we don't want to throw an exception.
> >   
> 
> I'll complain every time I see it.  If you don't care if the command 
> succeeds or not, why run it in the first place?

I care, but sometimes I don't want to fail the test when a command fails.
I can put every run_bg() call in a try-except statement, but that misses the
point of raising exceptions in the first place.

> > - A run_bg call has 3 possible outcomes: success (status == 0),
> failure
> > (status != 0) and timeout (process still running). If we throw an
> exception
> > upon failure, what do we do upon timeout? Sometimes it's good (qemu
> should
> > keep running unless something went wrong) and sometimes bad
> (pre_command
> > should probably not time out). So we end up needing an
> ignore_timeout
> > parameter as well.
> >   
> 
> A run_bg() call should return an object with a .join() method, or
> throw 
> an exception.  At some point you must call the join() method, which 
> throws an exception or returns None.

OK, I have queued patches to make run_bg() return such an object anyway,
except for the exceptions part.

> > - What if we want the test to fail with an informative
> test-specific
> > exception such as "something failed after migration"?
> >   
> 
> Chained exceptions can provide detailed information.

Wouldn't it complicate the test code?
How can I provide a detailed message such as "test command failed after 
migration" --
can you illustrate this in a small example?

> >> But if status != 0, will there actually be a pid to kill?
> >>     
> >
> > If the timeout expires and the process is still running, status is
> None.
> >   
> 
> functions which can return with three possible outcomes are difficult
> to use.

I tend to see it as two possible outcomes: completion or timeout. In the former
case, status is returned. In the latter, None is returned.

> -- 
> Do not meddle in the internals of kernels, for they are subtle and
> quick to panic.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to