diff mbox series

toaster: log ProcessLookupError in test_runbuilds

Message ID 20231110153009.3592572-1-tim.orling@konsulko.com
State New
Headers show
Series toaster: log ProcessLookupError in test_runbuilds | expand

Commit Message

Tim Orling Nov. 10, 2023, 3:30 p.m. UTC
This repeatably fails:

Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
    self.run()
  File ".../poky/bitbake/lib/toaster/tests/commands/test_runbuilds.py", line 39, in run
    os.kill(int(pid), signal.SIGTERM)
ProcessLookupError: [Errno 3] No such process

Rather than have a hard error, add logging and output as a warning.

Signed-off-by: Tim Orling <tim.orling@konsulko.com>
---
 lib/toaster/tests/commands/test_runbuilds.py | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

Comments

Richard Purdie Nov. 10, 2023, 6:01 p.m. UTC | #1
On Fri, 2023-11-10 at 07:30 -0800, Tim Orling wrote:
> This repeatably fails:
> 
> Exception in thread Thread-2:
> Traceback (most recent call last):
>   File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
>     self.run()
>   File ".../poky/bitbake/lib/toaster/tests/commands/test_runbuilds.py", line 39, in run
>     os.kill(int(pid), signal.SIGTERM)
> ProcessLookupError: [Errno 3] No such process
> 
> Rather than have a hard error, add logging and output as a warning.
> 
> Signed-off-by: Tim Orling <tim.orling@konsulko.com>
> ---
>  lib/toaster/tests/commands/test_runbuilds.py | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/lib/toaster/tests/commands/test_runbuilds.py b/lib/toaster/tests/commands/test_runbuilds.py
> index c77d6cf4..14b35764 100644
> --- a/lib/toaster/tests/commands/test_runbuilds.py
> +++ b/lib/toaster/tests/commands/test_runbuilds.py
> @@ -19,6 +19,10 @@ import time
>  import subprocess
>  import signal
>  
> +import logging
> +
> +logger = logging.getLogger("toaster")
> +
>  
>  class KillRunbuilds(threading.Thread):
>      """ Kill the runbuilds process after an amount of time """
> @@ -36,8 +40,11 @@ class KillRunbuilds(threading.Thread):
>  
>          with open(pidfile_path) as pidfile:
>              pid = pidfile.read()
> -            os.kill(int(pid), signal.SIGTERM)
> -
> +            try:
> +                os.kill(int(pid), signal.SIGTERM)
> +            except ProcessLookupError as err:
> +                logger.warning("Failed to kill pid. %s" % err)
> +                pass
>  

Is this a case of "just ensure bitbake has really exited"? If so we
perhaps don't need the warning as it is quite likely it has exited?

Cheers,

Richard
Tim Orling Nov. 10, 2023, 7:16 p.m. UTC | #2
Ignore this patch. More analysis is required.

On Fri, Nov 10, 2023 at 10:01 AM Richard Purdie <
richard.purdie@linuxfoundation.org> wrote:

> On Fri, 2023-11-10 at 07:30 -0800, Tim Orling wrote:
> > This repeatably fails:
> >
> > Exception in thread Thread-2:
> > Traceback (most recent call last):
> >   File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
> >     self.run()
> >   File ".../poky/bitbake/lib/toaster/tests/commands/test_runbuilds.py",
> line 39, in run
> >     os.kill(int(pid), signal.SIGTERM)
> > ProcessLookupError: [Errno 3] No such process
> >
> > Rather than have a hard error, add logging and output as a warning.
> >
> > Signed-off-by: Tim Orling <tim.orling@konsulko.com>
> > ---
> >  lib/toaster/tests/commands/test_runbuilds.py | 11 +++++++++--
> >  1 file changed, 9 insertions(+), 2 deletions(-)
> >
> > diff --git a/lib/toaster/tests/commands/test_runbuilds.py
> b/lib/toaster/tests/commands/test_runbuilds.py
> > index c77d6cf4..14b35764 100644
> > --- a/lib/toaster/tests/commands/test_runbuilds.py
> > +++ b/lib/toaster/tests/commands/test_runbuilds.py
> > @@ -19,6 +19,10 @@ import time
> >  import subprocess
> >  import signal
> >
> > +import logging
> > +
> > +logger = logging.getLogger("toaster")
> > +
> >
> >  class KillRunbuilds(threading.Thread):
> >      """ Kill the runbuilds process after an amount of time """
> > @@ -36,8 +40,11 @@ class KillRunbuilds(threading.Thread):
> >
> >          with open(pidfile_path) as pidfile:
> >              pid = pidfile.read()
> > -            os.kill(int(pid), signal.SIGTERM)
> > -
> > +            try:
> > +                os.kill(int(pid), signal.SIGTERM)
> > +            except ProcessLookupError as err:
> > +                logger.warning("Failed to kill pid. %s" % err)
> > +                pass
> >
>
> Is this a case of "just ensure bitbake has really exited"? If so we
> perhaps don't need the warning as it is quite likely it has exited?
>
>
When Toaster starts, the .runbuild.pid file is created in the $BUILDDIR.
Manually running 'manage.py runbuilds' should leave a process running.
My suspicion is the path to .runbuilds.pid is somehow getting mangled or
a stale, old .runbuilds.pid is sticking around. Something is wonky in the
test environment.



> Cheers,
>
> Richard
>
>
diff mbox series

Patch

diff --git a/lib/toaster/tests/commands/test_runbuilds.py b/lib/toaster/tests/commands/test_runbuilds.py
index c77d6cf4..14b35764 100644
--- a/lib/toaster/tests/commands/test_runbuilds.py
+++ b/lib/toaster/tests/commands/test_runbuilds.py
@@ -19,6 +19,10 @@  import time
 import subprocess
 import signal
 
+import logging
+
+logger = logging.getLogger("toaster")
+
 
 class KillRunbuilds(threading.Thread):
     """ Kill the runbuilds process after an amount of time """
@@ -36,8 +40,11 @@  class KillRunbuilds(threading.Thread):
 
         with open(pidfile_path) as pidfile:
             pid = pidfile.read()
-            os.kill(int(pid), signal.SIGTERM)
-
+            try:
+                os.kill(int(pid), signal.SIGTERM)
+            except ProcessLookupError as err:
+                logger.warning("Failed to kill pid. %s" % err)
+                pass
 
 class TestCommands(TestCase):
     """ Sanity test that runbuilds executes OK """