This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
pespin gerrit-no-reply at lists.osmocom.orgpespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-gsm-tester/+/18452 ) Change subject: Replace RemoteProcessFixIgnoreSIGHUP with RemoteProcessSafeExit ...................................................................... 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 --- M src/osmo_gsm_tester/core/remote.py M src/osmo_gsm_tester/obj/bts_osmotrx.py M src/osmo_gsm_tester/obj/epc_amarisoft.py M src/osmo_gsm_tester/obj/ms_srs.py 4 files changed, 28 insertions(+), 26 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-tester refs/changes/52/18452/1 diff --git a/src/osmo_gsm_tester/core/remote.py b/src/osmo_gsm_tester/core/remote.py index 95b8967..29eea30 100644 --- a/src/osmo_gsm_tester/core/remote.py +++ b/src/osmo_gsm_tester/core/remote.py @@ -55,7 +55,7 @@ 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 @@ 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 @@ 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) diff --git a/src/osmo_gsm_tester/obj/bts_osmotrx.py b/src/osmo_gsm_tester/obj/bts_osmotrx.py index 1456802..0eeef49 100644 --- a/src/osmo_gsm_tester/obj/bts_osmotrx.py +++ b/src/osmo_gsm_tester/obj/bts_osmotrx.py @@ -310,7 +310,11 @@ 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() diff --git a/src/osmo_gsm_tester/obj/epc_amarisoft.py b/src/osmo_gsm_tester/obj/epc_amarisoft.py index e9f1e82..d6cad81 100644 --- a/src/osmo_gsm_tester/obj/epc_amarisoft.py +++ b/src/osmo_gsm_tester/obj/epc_amarisoft.py @@ -46,6 +46,7 @@ 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 @@ 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 @@ 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 @@ 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) diff --git a/src/osmo_gsm_tester/obj/ms_srs.py b/src/osmo_gsm_tester/obj/ms_srs.py index b494c54..3fa282e 100644 --- a/src/osmo_gsm_tester/obj/ms_srs.py +++ b/src/osmo_gsm_tester/obj/ms_srs.py @@ -91,6 +91,7 @@ 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 @@ 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 @@ 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 @@ 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): -- To view, visit https://gerrit.osmocom.org/c/osmo-gsm-tester/+/18452 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-gsm-tester Gerrit-Branch: master Gerrit-Change-Id: If043ecab509b34b0922824d73db916196274ec64 Gerrit-Change-Number: 18452 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pespin at sysmocom.de> Gerrit-MessageType: newchange -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200525/f23f0733/attachment.htm>