Replace RemoteProcessFixIgnoreSIGHUP with RemoteProcessSafeExit
The API was doing far more stuff than its name indicated. Even more important stuff, like making sure the process is killed at the end with -9 after ssh connection is dropped. Change-Id: If043ecab509b34b0922824d73db916196274ec64
This commit is contained in:
parent
d84a8387be
commit
0d64f16544
|
@ -55,7 +55,7 @@ class RemoteHost(log.Origin):
|
|||
run_dir = self.run_dir.new_dir(name)
|
||||
return process.RemoteProcess(name, run_dir, self.user(), self.host(), self.cwd(), popen_args, remote_env=remote_env, **popen_kwargs)
|
||||
|
||||
def generate_wrapper_script(self):
|
||||
def generate_wrapper_script(self, wait_time_sec):
|
||||
wrapper_script = self.run_dir.new_file(RemoteHost.WRAPPER_SCRIPT)
|
||||
with open(wrapper_script, 'w') as f:
|
||||
r = """#!/bin/bash
|
||||
|
@ -66,8 +66,8 @@ class RemoteHost(log.Origin):
|
|||
if ! kill -0 $mypid; then
|
||||
return
|
||||
fi
|
||||
echo "sleeping some time waiting for child to die..." >>$LOGFILE
|
||||
sleep 5
|
||||
echo "sleeping %d seconds waiting for child to die..." >>$LOGFILE
|
||||
sleep %d
|
||||
if ! kill -0 $mypid; then
|
||||
return
|
||||
fi
|
||||
|
@ -102,20 +102,18 @@ class RemoteHost(log.Origin):
|
|||
prep_sighandler
|
||||
$@ &
|
||||
wait_sighandler
|
||||
"""
|
||||
""" % (wait_time_sec, wait_time_sec)
|
||||
f.write(r)
|
||||
st = os.stat(wrapper_script)
|
||||
os.chmod(wrapper_script, st.st_mode | stat.S_IEXEC)
|
||||
return wrapper_script
|
||||
|
||||
def RemoteProcessFixIgnoreSIGHUP(self, name, remote_dir, popen_args, remote_env={}, **popen_kwargs):
|
||||
# Run remotely through ssh. We need to run binary under a wrapper
|
||||
# script since osmo-trx ignores SIGHUP and will keep running after
|
||||
# we close local ssh session. The wrapper script catches SIGHUP and
|
||||
# sends SIGINT to it.
|
||||
def RemoteProcessSafeExit(self, name, remote_dir, popen_args, remote_env={}, wait_time_sec=5, **popen_kwargs):
|
||||
"""Run binary under a wrapper which will make sure process is killed -9
|
||||
a few seconds after SIGHUP from SSH is received."""
|
||||
self.create_remote_dir(remote_dir)
|
||||
|
||||
wrapper_script = self.generate_wrapper_script()
|
||||
wrapper_script = self.generate_wrapper_script(wait_time_sec)
|
||||
remote_wrapper_script = remote_dir.child(RemoteHost.WRAPPER_SCRIPT)
|
||||
self.scp('scp-wrapper-to-remote', wrapper_script, remote_wrapper_script)
|
||||
|
||||
|
|
|
@ -310,7 +310,11 @@ class OsmoTrx(Trx, metaclass=ABCMeta):
|
|||
remote_env = {}
|
||||
remote_binary = self.binary_name()
|
||||
args = (remote_binary, '-C', remote_config_file)
|
||||
self.proc_trx = rem_host.RemoteProcessFixIgnoreSIGHUP(self.binary_name(), remote_run_dir, args, remote_env=remote_env)
|
||||
# Run remotely through ssh. We need to run binary under a wrapper
|
||||
# script since osmo-trx ignores SIGHUP and will keep running after
|
||||
# we close local ssh session. The wrapper script catches SIGHUP and
|
||||
# sends SIGINT to it.
|
||||
self.proc_trx = rem_host.RemoteProcessSafeExit(self.binary_name(), remote_run_dir, args, remote_env=remote_env)
|
||||
self.testenv.remember_to_stop(self.proc_trx, keepalive)
|
||||
self.proc_trx.launch()
|
||||
|
||||
|
|
|
@ -46,6 +46,7 @@ class AmarisoftEPC(epc.EPC):
|
|||
self.ifup_file = None
|
||||
self.process = None
|
||||
self.rem_host = None
|
||||
self.remote_run_dir = None
|
||||
self.remote_inst = None
|
||||
self.remote_config_file = None
|
||||
self.remote_log_file = None
|
||||
|
@ -92,8 +93,7 @@ class AmarisoftEPC(epc.EPC):
|
|||
|
||||
args = (remote_binary, self.remote_config_file)
|
||||
|
||||
self.process = self.rem_host.RemoteProcess(AmarisoftEPC.BINFILE, args)
|
||||
#self.process = self.rem_host.RemoteProcessFixIgnoreSIGHUP(AmarisoftEPC.BINFILE, remote_run_dir, args)
|
||||
self.process = self.rem_host.RemoteProcessSafeExit(AmarisoftEPC.BINFILE, self.remote_run_dir, args)
|
||||
self.testenv.remember_to_stop(self.process)
|
||||
self.process.launch()
|
||||
|
||||
|
@ -137,11 +137,11 @@ class AmarisoftEPC(epc.EPC):
|
|||
self.rem_host = remote.RemoteHost(self.run_dir, self._run_node.ssh_user(), self._run_node.ssh_addr())
|
||||
remote_prefix_dir = util.Dir(AmarisoftEPC.REMOTE_DIR)
|
||||
self.remote_inst = util.Dir(remote_prefix_dir.child(os.path.basename(str(self.inst))))
|
||||
remote_run_dir = util.Dir(remote_prefix_dir.child(AmarisoftEPC.BINFILE))
|
||||
self.remote_run_dir = util.Dir(remote_prefix_dir.child(AmarisoftEPC.BINFILE))
|
||||
|
||||
self.remote_config_file = remote_run_dir.child(AmarisoftEPC.CFGFILE)
|
||||
self.remote_log_file = remote_run_dir.child(AmarisoftEPC.LOGFILE)
|
||||
self.remote_ifup_file = remote_run_dir.child(AmarisoftEPC.IFUPFILE)
|
||||
self.remote_config_file = self.remote_run_dir.child(AmarisoftEPC.CFGFILE)
|
||||
self.remote_log_file = self.remote_run_dir.child(AmarisoftEPC.LOGFILE)
|
||||
self.remote_ifup_file = self.remote_run_dir.child(AmarisoftEPC.IFUPFILE)
|
||||
|
||||
values = super().configure(['amarisoft', 'amarisoftepc'])
|
||||
|
||||
|
@ -162,7 +162,7 @@ class AmarisoftEPC(epc.EPC):
|
|||
if not self._run_node.is_local():
|
||||
self.rem_host.recreate_remote_dir(self.remote_inst)
|
||||
self.rem_host.scp('scp-inst-to-remote', str(self.inst), remote_prefix_dir)
|
||||
self.rem_host.recreate_remote_dir(remote_run_dir)
|
||||
self.rem_host.recreate_remote_dir(self.remote_run_dir)
|
||||
self.rem_host.scp('scp-cfg-to-remote', self.config_file, self.remote_config_file)
|
||||
self.rem_host.scp('scp-ifup-to-remote', self.ifup_file, self.remote_ifup_file)
|
||||
|
||||
|
|
|
@ -91,6 +91,7 @@ class srsUE(MS):
|
|||
self.process = None
|
||||
self.rem_host = None
|
||||
self.remote_inst = None
|
||||
self.remote_run_dir = None
|
||||
self.remote_config_file = None
|
||||
self.remote_log_file = None
|
||||
self.remote_pcap_file = None
|
||||
|
@ -168,8 +169,7 @@ class srsUE(MS):
|
|||
args = (remote_binary, self.remote_config_file, '--gw.netns=' + self.netns())
|
||||
args += tuple(self._additional_args)
|
||||
|
||||
self.process = self.rem_host.RemoteProcess(srsUE.BINFILE, args)
|
||||
#self.process = self.rem_host.RemoteProcessFixIgnoreSIGHUP(srsUE.BINFILE, remote_run_dir, args, remote_lib)
|
||||
self.process = self.rem_host.RemoteProcessSafeExit(srsUE.BINFILE, self.remote_run_dir, args)
|
||||
self.testenv.remember_to_stop(self.process)
|
||||
self.process.launch()
|
||||
|
||||
|
@ -213,11 +213,11 @@ class srsUE(MS):
|
|||
self.rem_host = remote.RemoteHost(self.run_dir, self.remote_user, self._addr)
|
||||
remote_prefix_dir = util.Dir(srsUE.REMOTE_DIR)
|
||||
self.remote_inst = util.Dir(remote_prefix_dir.child(os.path.basename(str(self.inst))))
|
||||
remote_run_dir = util.Dir(remote_prefix_dir.child(srsUE.BINFILE))
|
||||
self.remote_config_file = remote_run_dir.child(srsUE.CFGFILE)
|
||||
self.remote_log_file = remote_run_dir.child(srsUE.LOGFILE)
|
||||
self.remote_pcap_file = remote_run_dir.child(srsUE.PCAPFILE)
|
||||
self.remote_metrics_file = remote_run_dir.child(srsUE.METRICSFILE)
|
||||
self.remote_run_dir = util.Dir(remote_prefix_dir.child(srsUE.BINFILE))
|
||||
self.remote_config_file = self.remote_run_dir.child(srsUE.CFGFILE)
|
||||
self.remote_log_file = self.remote_run_dir.child(srsUE.LOGFILE)
|
||||
self.remote_pcap_file = self.remote_run_dir.child(srsUE.PCAPFILE)
|
||||
self.remote_metrics_file = self.remote_run_dir.child(srsUE.METRICSFILE)
|
||||
|
||||
values = dict(ue=config.get_defaults('srsue'))
|
||||
config.overlay(values, dict(ue=self.testenv.suite().config().get('modem', {})))
|
||||
|
@ -297,7 +297,7 @@ class srsUE(MS):
|
|||
if not self.setup_runs_locally():
|
||||
self.rem_host.recreate_remote_dir(self.remote_inst)
|
||||
self.rem_host.scp('scp-inst-to-remote', str(self.inst), remote_prefix_dir)
|
||||
self.rem_host.recreate_remote_dir(remote_run_dir)
|
||||
self.rem_host.recreate_remote_dir(self.remote_run_dir)
|
||||
self.rem_host.scp('scp-cfg-to-remote', self.config_file, self.remote_config_file)
|
||||
|
||||
def is_connected(self, mcc_mnc=None):
|
||||
|
|
Loading…
Reference in New Issue