|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [OSSTEST PATCH 06/26] power handling: Introduce power_reboot_attempts
This is going to be the new preferred interface for rebooting a host.
Introduce the first two call sites in ts-host-install and
ts-freebsd-host-install. power_cycle_sleep is an internal function
now.
No overall functional change, since currently power_reboot_attempts
only ever tries one method.
Do not adjust ts-freebsd-host-install yet as we have a problem there,
which will be discussed in a moment.
CC: Roger Pau Monné <roger.pau@xxxxxxxxxx>
Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
---
Osstest/TestSupport.pm | 23 ++++++++++++++++++++++-
ts-host-install | 19 +++++++------------
2 files changed, 29 insertions(+), 13 deletions(-)
diff --git a/Osstest/TestSupport.pm b/Osstest/TestSupport.pm
index 68b51728..fb6a407c 100644
--- a/Osstest/TestSupport.pm
+++ b/Osstest/TestSupport.pm
@@ -81,7 +81,7 @@ BEGIN {
selecthost get_hostflags get_host_property
get_target_property get_host_native_linux_console
hostnamepath hostnamepath_list set_runtime_hostflag
- power_state power_cycle power_cycle_sleep
+ power_state power_cycle power_reboot_attempts
serial_fetch_logs set_host_property
propname_massage propname_check
hostprop_putative_record
@@ -939,6 +939,27 @@ sub power_cycle_host_setup ($) {
$ho->{PowerMethobjs} = power_cycle_parse_method($ho,$spec);
}
+sub power_reboot_attempts ($$$) {
+ my ($ho, $setup, $await) = @_;
+ # Power cycles $ho, calling $setup->() while it is (supposedly) off.
+ # Then, just after turning $ho on, calls $await->().
+ # If $await->() succeeds, great: returns.
+ #
+ # If it fails (dies), power_reboot_attempts will attempt to power
+ # cycle $ho using a more certain method and call $fn again. This
+ # may occur multiple times.
+ #
+ # All but the last method used for power cycling are not certain
+ # to work. $setup and $await should tolerate this situation; in
+ # particular $await must only succeed if the host really did reboot
+ # into the boot environment that $await expects.
+ power_state($ho, 0);
+ $setup->();
+ power_cycle_sleep($ho);
+ power_state($ho, 1);
+ $await->();
+}
+
sub power_cycle_sleep ($) {
my ($ho) = @_;
my $to = get_host_property($ho, 'power-cycle-time', 5);
diff --git a/ts-host-install b/ts-host-install
index c5b92b8d..068242eb 100755
--- a/ts-host-install
+++ b/ts-host-install
@@ -56,8 +56,6 @@ our %timeout= qw(ReadPreseed 350
Sshd 2400);
sub install () {
- power_state($ho, 0);
-
my ($ps_url,$ps_file)= preseed_create
($ho, '',
DiskDevice => $ho->{DiskDevice},
@@ -67,19 +65,16 @@ d-i netcfg/get_hostname string $ho->{Name}
d-i netcfg/get_ipaddress string $ho->{Ip}
END
- setup_netboot_firstboot($ps_url);
- power_cycle_sleep($ho);
-
- my $logtailer= Osstest::Logtailer->new($c{WebspaceLog});
- power_state($ho, 1);
-
- await_webspace_fetch_byleaf(get_timeout($ho,'reboot',$timeout{ReadPreseed})
- , 1,
- $logtailer, $ho, $ps_url);
+ power_reboot_attempts($ho, sub {
+ setup_netboot_firstboot($ps_url);
+ }, sub {
+ my $logtailer= Osstest::Logtailer->new($c{WebspaceLog});
+ my $timeout = get_timeout($ho,'reboot',$timeout{ReadPreseed});
+ await_webspace_fetch_byleaf($timeout, 1, $logtailer, $ho, $ps_url);
+ });
if ($poweron_test_only) {
logm("Hooray, power on worked.");
- power_state($ho, 0);
exit 0;
}
--
2.11.0
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |