[OE-core] [PATCH 1/1] oeqa/runtime/cases/systemd.py: avoid timeout problem

Burton, Ross ross.burton at intel.com
Wed Jul 11 10:38:27 UTC 2018


The problem is that when the system is loaded, systemctl calls may be
too slow and they will time out.  This patch simply changes *one* of
the many systemctl calls to use busctl directly, leaving many other
calls as a potential failure point.

Surely a better solution would be to patch in a way to override the
timeout, so we can pass that in all calls.

Ross

On 11 July 2018 at 06:46, ChenQi <Qi.Chen at windriver.com> wrote:
> ping
>
> Is there some problem with this patch?
>
> Recently when I'm doing testimage test for systemd upgrade, the 'systemctl
> list-unit-files' command in this test case revealed a 'segment fault' error
> on musl qemuarm.
> So I'd suggest to keep 'systemctl list-unit-files' command and use 'busctl'
> as a fallback in case of timeout.
>
> Best Regards,
> Chen Qi
>
>
> On 07/04/2018 06:05 PM, ChenQi wrote:
>>
>> ping
>>
>>
>> On 06/26/2018 09:48 AM, ChenQi wrote:
>>>
>>> On 06/25/2018 09:40 PM, Burton, Ross wrote:
>>>>
>>>> The busctl invocation will only rarely be called so is very prone to
>>>> bitrot, maybe it should just always use busctl?
>>>>
>>>> Personally I think that there should be a way for VM time to be
>>>> independent of host time to avoid this sort of problem...
>>>>
>>>> Ross
>>>
>>>
>>> Hi Ross,
>>>
>>> I now realize that I didn't include enough information in the commit
>>> message.
>>> In fact, for qemuarm, this problem always appeared.
>>> Compared to other qemu bsps (e.g. qemux86-64), qemuarm is running much
>>> slower.
>>>
>>> I've now updated the commit the message to include this qemuarm info, and
>>> also updated the remote branch.
>>>
>>>   git://git.pokylinux.org/poky-contrib ChenQi/systemd-bus-timeout
>>>
>>> http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=ChenQi/systemd-bus-timeout
>>>
>>>
>>> If you think we should still use `busctl' directly, I can send out a new
>>> patch. Either way is OK to me.
>>>
>>> Best Regards,
>>> Chen Qi
>>>
>>>> On 25 June 2018 at 10:33, Chen Qi <Qi.Chen at windriver.com> wrote:
>>>>>
>>>>> I've encountered the following error when doing testimage.
>>>>>
>>>>>    RESULTS - systemd.SystemdBasicTests.test_systemd_list - Testcase
>>>>> 551: FAILED
>>>>>
>>>>> After investigation, I found that it's not functionality issue. It's
>>>>> just that the qemu was not running fast enough. And it resulted 'time
>>>>> out'
>>>>> problem when using `systemctl list-unit-files'.
>>>>>
>>>>> The correctness could be verified by using 'busctl' directly.
>>>>> e.g.
>>>>> busctl --timeout=240 call org.freedesktop.systemd1 \
>>>>> /org/freedesktop/systemd1 org.freedesktop.systemd1.Manager \
>>>>> ListUnitFilesByPatterns asas 0 0
>>>>>
>>>>> Checking the source codes, I can see that the timeout is 25s. I don't
>>>>> think we should patch systemd's source codes just for such a simple
>>>>> runtime test case.
>>>>>
>>>>> So instead, I change the test case to use 'busctl' directly if
>>>>> 'systemctl list-unit-files' gets a timeout error.
>>>>>
>>>>> Signed-off-by: Chen Qi <Qi.Chen at windriver.com>
>>>>> ---
>>>>>   meta/lib/oeqa/runtime/cases/systemd.py | 14 +++++++++++++-
>>>>>   1 file changed, 13 insertions(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/meta/lib/oeqa/runtime/cases/systemd.py
>>>>> b/meta/lib/oeqa/runtime/cases/systemd.py
>>>>> index db69384..b4f1025 100644
>>>>> --- a/meta/lib/oeqa/runtime/cases/systemd.py
>>>>> +++ b/meta/lib/oeqa/runtime/cases/systemd.py
>>>>> @@ -81,7 +81,19 @@ class SystemdBasicTests(SystemdTest):
>>>>>       @OETestID(551)
>>>>> @OETestDepends(['systemd.SystemdBasicTests.test_systemd_basic'])
>>>>>       def test_systemd_list(self):
>>>>> -        self.systemctl('list-unit-files')
>>>>> +        command = 'systemctl list-unit-files'
>>>>> +        status, output = self.target.run(command)
>>>>> +        message = '\n'.join([command, output])
>>>>> +        match = re.search('Connection timed out', output)
>>>>> +        if match:
>>>>> +            # it's possible that qemu is running slow
>>>>> +            # use busctl to check the results with timeout set to 240s
>>>>> +            command = 'busctl --timeout=240 call
>>>>> org.freedesktop.systemd1 /org/freedesktop/systemd1
>>>>> org.freedesktop.systemd1.Manager ListUnitFilesByPatterns asas 0 0'
>>>>> +            status, output = self.target.run(command)
>>>>> +            message = '\n'.join([command, output])
>>>>> +            self.assertEqual(status, 0, message)
>>>>> +        else:
>>>>> +            self.assertEqual(status, 0, message)
>>>>>
>>>>>       @OETestID(550)
>>>>> @OETestDepends(['systemd.SystemdBasicTests.test_systemd_basic'])
>>>>> --
>>>>> 1.9.1
>>>>>
>>>>> --
>>>>> _______________________________________________
>>>>> Openembedded-core mailing list
>>>>> Openembedded-core at lists.openembedded.org
>>>>> http://lists.openembedded.org/mailman/listinfo/openembedded-core
>>>
>>>
>>>
>>
>



More information about the Openembedded-core mailing list