Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH] oe_syslog.py: Handle syslogd/klogd restart race
@ 2019-06-21 15:42 Jon Mason
  2019-06-21 16:14 ` Richard Purdie
  0 siblings, 1 reply; 7+ messages in thread
From: Jon Mason @ 2019-06-21 15:42 UTC (permalink / raw)
  To: openembedded-core

syslogd and klogd can occasionally take too long to restart, which
causes tests to fail by starting before the log daemons are ready.  To
work around this problem, poll for up to 30 seconds on the processes to
verify the old ones are killed and the new ones are up and running.

[YOCTO #13379]

Signed-off-by: Jon Mason <jdmason@kudzu.us>
---
 meta/lib/oeqa/runtime/cases/oe_syslog.py | 37 ++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/meta/lib/oeqa/runtime/cases/oe_syslog.py b/meta/lib/oeqa/runtime/cases/oe_syslog.py
index 0f5f9f43ca..3270a0fc88 100644
--- a/meta/lib/oeqa/runtime/cases/oe_syslog.py
+++ b/meta/lib/oeqa/runtime/cases/oe_syslog.py
@@ -50,9 +50,46 @@ class SyslogTestConfig(OERuntimeTestCase):
     @skipIfDataVar('VIRTUAL-RUNTIME_init_manager', 'systemd',
                    'Not appropiate for systemd image')
     def test_syslog_startup_config(self):
+        status, syslogd_pid = self.target.run('pidof syslogd')
+        status, klogd_pid = self.target.run('pidof klogd')
+
         cmd = 'echo "LOGFILE=/var/log/test" >> /etc/syslog-startup.conf'
         self.target.run(cmd)
         status, output = self.target.run('/etc/init.d/syslog restart')
+
+        # Error, most likely a race between shutting down and starting up
+        if status:
+            import time
+            timeout = time.time() + 30
+
+            while time.time() < timeout:
+                time.sleep(1)
+                # Verify the old ones are no longer running
+                status, output = self.target.run('kill -0 %s' %syslogd_pid)
+                if not status:
+                    self.logger.debug("old syslogd is running")
+                    continue
+
+                status, output = self.target.run('kill -0 %s' %klogd_pid)
+                if not status:
+                    self.logger.debug("old klogd is running")
+                    continue
+
+                # Verify the new ones are running
+                status, new_syslogd_pid = self.target.run('pidof syslogd')
+                if status:
+                    self.logger.debug("new syslogd is not running")
+                    continue
+
+                status, new_klogd_pid = self.target.run('pidof klogd')
+                if status:
+                    self.logger.debug("new syslogd is not running")
+                    continue
+
+                # Everything is fine now, so keep running
+                status = 0
+                break
+
         msg = ('Could not restart syslog service. Status and output:'
                ' %s and %s' % (status,output))
         self.assertEqual(status, 0, msg)
-- 
2.21.0



^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2019-06-21 21:37 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-06-21 15:42 [PATCH] oe_syslog.py: Handle syslogd/klogd restart race Jon Mason
2019-06-21 16:14 ` Richard Purdie
2019-06-21 16:39   ` Jon Mason
2019-06-21 16:58     ` richard.purdie
2019-06-21 17:44       ` Jon Mason
2019-06-21 19:26         ` Jon Mason
2019-06-21 21:37           ` richard.purdie

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox