public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Michael Goldish <mgoldish@redhat.com>
To: sudhir kumar <smalikphy@gmail.com>
Cc: kvm@vger.kernel.org
Subject: Re: [KVM-AUTOTEST PATCH] kvm_utils.py: remote_login(): improve regular expression matching
Date: Mon, 25 May 2009 04:45:18 -0400 (EDT)	[thread overview]
Message-ID: <1939142500.325661243241118437.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> (raw)
In-Reply-To: <1435179948.325591243240977150.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com>


----- "sudhir kumar" <smalikphy@gmail.com> wrote:

> The patch looks sane to me. A very good thing that can be done for
> remote_login() is to tune the tmeouts. I have seen especialy with
> windows guests or sometimes when the machine is heavily loaded the
> timeouts elapse and the test fails. When I increased the timeouts the
> test did not fail. internal_timeout=0.5 is too less in my views and
> even timeouts of 10 seconds prove insufficient sometimes. Do you too
> have any such experience?

Yes, and I have a patch to fix the problem, which depends on another
patch that isn't ready yet...

Comments:

1. internal_timeout has nothing to do with this -- it controls the time
duration read_nonblocking() waits until it decides there's no more output
to read and returns. 0.5 is high enough in my opinion. Increasing
internal_timeout leads to more robust prompt recognition. Decreasing it
makes all related functions return sooner and thus increases overall
performance (slightly). I think even 0.1 is a reasonable value.

2. My solution to the prompt timeout problem (which isn't a very common
problem AFAIK) is not to make the timeouts configurable -- instead I use
2 timeouts everywhere: an "initial output" timeout, and a "further output"
timeout. The first timeout (typically 10 sec) expires if the guest hasn't
responded to the SSH login request. Then the second timeout (typically 30
sec) expires if there's no additional output. I think this makes sense
because it usually doesn't take very long to get a password prompt or an
"Are you sure" prompt. It can take a while to get the things that follow
(a shell prompt). If we got some initial output it's likely that the guest
will provide more, so we can afford to wait 30 seconds. We can make the 2
timeouts configurable, but even fixing them at 10 and 30 will probably work
well enough.

> On Sun, May 24, 2009 at 9:16 PM, Michael Goldish <mgoldish@redhat.com>
> wrote:
> > 1. Make the 'login:' regular expression stricter so it doesn't
> match
> > 'Last login: ...' messages.
> > 2. Make the 'password:' regular expression stricter.
> > 3. Handle 'Connection refused' messages.
> >
> > Signed-off-by: Michael Goldish <mgoldish@redhat.com>
> > ---
> >  client/tests/kvm_runtest_2/kvm_utils.py |   13 +++++++++----
> >  1 files changed, 9 insertions(+), 4 deletions(-)
> >
> > diff --git a/client/tests/kvm_runtest_2/kvm_utils.py
> b/client/tests/kvm_runtest_2/kvm_utils.py
> > index be8ad95..5736cf6 100644
> > --- a/client/tests/kvm_runtest_2/kvm_utils.py
> > +++ b/client/tests/kvm_runtest_2/kvm_utils.py
> > @@ -413,7 +413,8 @@ def remote_login(command, password, prompt,
> linesep="\n", timeout=10):
> >
> >     while True:
> >         (match, text) = sub.read_until_last_line_matches(
> > -                ["[Aa]re you sure", "[Pp]assword:", "[Ll]ogin:",
> "[Cc]onnection.*closed", prompt],
> > +                [r"[Aa]re you sure", r"[Pp]assword:\s*$",
> r"^\s*[Ll]ogin:\s*$",
> > +                    r"[Cc]onnection.*closed",
> r"[Cc]onnection.*refused", prompt],
> >                 timeout=timeout, internal_timeout=0.5)
> >         if match == 0:  # "Are you sure you want to continue
> connecting"
> >             kvm_log.debug("Got 'Are you sure...'; sending 'yes'")
> > @@ -437,11 +438,15 @@ def remote_login(command, password, prompt,
> linesep="\n", timeout=10):
> >             kvm_log.debug("Got 'Connection closed'")
> >             sub.close()
> >             return None
> > -        elif match == 4:  # prompt
> > +        elif match == 4:  # "Connection refused"
> > +            kvm_log.debug("Got 'Connection refused'")
> > +            sub.close()
> > +            return None
> > +        elif match == 5:  # prompt
> >             kvm_log.debug("Got shell prompt -- logged in")
> >             return sub
> >         else:  # match == None
> > -            kvm_log.debug("Timeout or process terminated")
> > +            kvm_log.debug("Timeout elapsed or process terminated")
> >             sub.close()
> >             return None
> >
> > @@ -470,7 +475,7 @@ def remote_scp(command, password, timeout=300,
> login_timeout=10):
> >
> >     while True:
> >         (match, text) = sub.read_until_last_line_matches(
> > -                ["[Aa]re you sure", "[Pp]assword:", "lost
> connection"],
> > +                [r"[Aa]re you sure", r"[Pp]assword:\s*$", r"lost
> connection"],
> >                 timeout=_timeout, internal_timeout=0.5)
> >         if match == 0:  # "Are you sure you want to continue
> connecting"
> >             kvm_log.debug("Got 'Are you sure...'; sending 'yes'")
> > --
> > 1.5.4.1
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe kvm" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> >
> 
> 
> 
> -- 
> Sudhir Kumar
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

       reply	other threads:[~2009-05-25  8:45 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1435179948.325591243240977150.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com>
2009-05-25  8:45 ` Michael Goldish [this message]
2009-05-26  8:35   ` [KVM-AUTOTEST PATCH] kvm_utils.py: remote_login(): improve regular expression matching sudhir kumar
2009-05-24 15:46 [KVM-AUTOTEST PATCH] RHEL-5.3 step files: fix initial boot barriers and an inconsistent dialog Michael Goldish
2009-05-24 15:46 ` [KVM-AUTOTEST PATCH] WinXP step files: add an optional barrier to deal with a closed start menu Michael Goldish
2009-05-24 15:46   ` [KVM-AUTOTEST PATCH] stepeditor.py: get rid of some annoying keyboard shortcuts Michael Goldish
2009-05-24 15:46     ` [KVM-AUTOTEST PATCH] Use new function VM.get_name() to get the VM's name, instead of VM.name Michael Goldish
2009-05-24 15:46       ` [KVM-AUTOTEST PATCH] VM.create(): always destroy() the VM before attempting to start it Michael Goldish
2009-05-24 15:46         ` [KVM-AUTOTEST PATCH] kvm_vm.py: choose a monitor filename in the constructor instead of VM.create() Michael Goldish
2009-05-24 15:46           ` [KVM-AUTOTEST PATCH] kvm_vm.py: make sure the bulk of VM.create() is not executed in parallel Michael Goldish
2009-05-24 15:46             ` [KVM-AUTOTEST PATCH] kvm_vm.py: add new function VM.clone() which returns a clone of the VM Michael Goldish
2009-05-24 15:46               ` [KVM-AUTOTEST PATCH] RHEL-4.7 step files: fix the initial boot barriers Michael Goldish
2009-05-24 15:46                 ` [KVM-AUTOTEST PATCH] kvm_utils.py: remote_login(): improve regular expression matching Michael Goldish
2009-05-24 18:59                   ` sudhir kumar
2009-05-29  6:12                   ` Lucas Meneghel Rodrigues

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1939142500.325661243241118437.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com \
    --to=mgoldish@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=smalikphy@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox