Change in osmo-gsm-tester[master]: Replace RemoteProcessFixIgnoreSIGHUP with RemoteProcessSafeExit

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.org
Mon May 25 13:58:52 UTC 2020


pespin 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>


More information about the gerrit-log mailing list