From: Lucas Meneghel Rodrigues <lmr@redhat.com>
To: Feng Yang <fyang@redhat.com>
Cc: autotest@test.kernel.org, kvm@vger.kernel.org
Subject: Re: [PATCH] KVM Test: Make remote_scp() more robust.
Date: Fri, 07 May 2010 11:18:45 -0300 [thread overview]
Message-ID: <1273241925.2613.25.camel@freedom> (raw)
In-Reply-To: <1273227973-11862-1-git-send-email-fyang@redhat.com>
On Fri, 2010-05-07 at 18:26 +0800, Feng Yang wrote:
> 1. In remote_scp(), if SCP connetion stalled for some reason, following
> code will be ran.
> else: # match == None
>
> logging.debug("Timeout elapsed or process terminated")
> status = sub.get_status()
> sub.close()
> return status == 0
> At this moment, kvm_subprocess server is still running which means
> lock_server_running_filename is still locked. But sub.get_status()
> tries to lock it again. If kvm_subprocess server keeps running,
> a deadlock will happen. This patch will fix this issue by enable
> timeout parameter. Update default value for timeout to 600, it should
> be enough.
>
> 2. Add "-v" in scp command to catch more infomation. Also add "Exit status"
> and "stalled" match prompt in remote_scp().
Excellent. I've made some slight changes to message wording, and
commited it:
http://autotest.kernel.org/changeset/4483
Thank you very much!
> Signed-off-by: Feng Yang <fyang@redhat.com>
> ---
> client/tests/kvm/kvm_utils.py | 36 ++++++++++++++++++++++++++++--------
> client/tests/kvm/kvm_vm.py | 4 ++--
> 2 files changed, 30 insertions(+), 10 deletions(-)
>
> diff --git a/client/tests/kvm/kvm_utils.py b/client/tests/kvm/kvm_utils.py
> index 25f3c8c..3db4dec 100644
> --- a/client/tests/kvm/kvm_utils.py
> +++ b/client/tests/kvm/kvm_utils.py
> @@ -524,7 +524,7 @@ def remote_login(command, password, prompt, linesep="\n", timeout=10):
> return None
>
>
> -def remote_scp(command, password, timeout=300, login_timeout=10):
> +def remote_scp(command, password, timeout=600, login_timeout=10):
> """
> Run the given command using kvm_spawn and provide answers to the questions
> asked. If timeout expires while waiting for the transfer to complete ,
> @@ -548,12 +548,18 @@ def remote_scp(command, password, timeout=300, login_timeout=10):
>
> password_prompt_count = 0
> _timeout = login_timeout
> + end_time = time.time() + timeout
> + logging.debug("Trying to SCP...")
>
> - logging.debug("Trying to login...")
>
> while True:
> + if end_time <= time.time():
> + logging.debug("transfer timeout!")
> + sub.close()
> + return False
> (match, text) = sub.read_until_last_line_matches(
> - [r"[Aa]re you sure", r"[Pp]assword:\s*$", r"lost connection"],
> + [r"[Aa]re you sure", r"[Pp]assword:\s*$", r"lost connection",
> + r"Exit status", r"stalled"],
> timeout=_timeout, internal_timeout=0.5)
> if match == 0: # "Are you sure you want to continue connecting"
> logging.debug("Got 'Are you sure...'; sending 'yes'")
> @@ -574,15 +580,29 @@ def remote_scp(command, password, timeout=300, login_timeout=10):
> logging.debug("Got 'lost connection'")
> sub.close()
> return False
> + elif match == 3: # "Exit status"
> + sub.close()
> + if "Exit status 0" in text:
> + logging.debug("SCP command completed successfully")
> + return True
> + else:
> + logging.debug("SCP command fail with exit status %s" % text)
> + return False
> + elif match == 4: # "stalled"
> + logging.debug("SCP connection stalled for some reason")
> + continue
> +
> else: # match == None
> - logging.debug("Timeout elapsed or process terminated")
> + if sub.is_alive():
> + continue
> + logging.debug("Process terminated for some reason")
> status = sub.get_status()
> sub.close()
> return status == 0
>
>
> def scp_to_remote(host, port, username, password, local_path, remote_path,
> - timeout=300):
> + timeout=600):
> """
> Copy files to a remote host (guest).
>
> @@ -596,14 +616,14 @@ def scp_to_remote(host, port, username, password, local_path, remote_path,
>
> @return: True on success and False on failure.
> """
> - command = ("scp -o UserKnownHostsFile=/dev/null "
> + command = ("scp -v -o UserKnownHostsFile=/dev/null "
> "-o PreferredAuthentications=password -r -P %s %s %s@%s:%s" %
> (port, local_path, username, host, remote_path))
> return remote_scp(command, password, timeout)
>
>
> def scp_from_remote(host, port, username, password, remote_path, local_path,
> - timeout=300):
> + timeout=600):
> """
> Copy files from a remote host (guest).
>
> @@ -617,7 +637,7 @@ def scp_from_remote(host, port, username, password, remote_path, local_path,
>
> @return: True on success and False on failure.
> """
> - command = ("scp -o UserKnownHostsFile=/dev/null "
> + command = ("scp -v -o UserKnownHostsFile=/dev/null "
> "-o PreferredAuthentications=password -r -P %s %s@%s:%s %s" %
> (port, username, host, remote_path, local_path))
> return remote_scp(command, password, timeout)
> diff --git a/client/tests/kvm/kvm_vm.py b/client/tests/kvm/kvm_vm.py
> index 6bc7987..d1e0246 100755
> --- a/client/tests/kvm/kvm_vm.py
> +++ b/client/tests/kvm/kvm_vm.py
> @@ -808,7 +808,7 @@ class VM:
> return session
>
>
> - def copy_files_to(self, local_path, remote_path, nic_index=0, timeout=300):
> + def copy_files_to(self, local_path, remote_path, nic_index=0, timeout=600):
> """
> Transfer files to the guest.
>
> @@ -833,7 +833,7 @@ class VM:
> local_path, remote_path, timeout)
>
>
> - def copy_files_from(self, remote_path, local_path, nic_index=0, timeout=300):
> + def copy_files_from(self, remote_path, local_path, nic_index=0, timeout=600):
> """
> Transfer files from the guest.
>
next prev parent reply other threads:[~2010-05-07 14:18 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-07 10:26 [Autotest][PATCH] KVM Test: Make remote_scp() more robust Feng Yang
2010-05-07 14:18 ` Lucas Meneghel Rodrigues [this message]
2010-05-17 15:05 ` [Autotest] [PATCH] " Michael Goldish
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=1273241925.2613.25.camel@freedom \
--to=lmr@redhat.com \
--cc=autotest@test.kernel.org \
--cc=fyang@redhat.com \
--cc=kvm@vger.kernel.org \
/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;
as well as URLs for NNTP newsgroup(s).