[SSSD] [PATCH] Workaround for dyndns_test_ok failiure on mips(el). Child part has finished before the child handler was created.

Lukas Slebodnik lslebodn at redhat.com
Thu Sep 10 08:43:13 UTC 2015


On (28/07/14 10:18), Simo Sorce wrote:
>On Wed, 2014-07-23 at 09:01 +0200, Lukas Slebodnik wrote:
>> On (09/07/14 18:21), Jurica Stanojkovic wrote:
>> >
>> >Hello,
>> >
>> >Package sssd_1.11.5.1-1 on Debian FTBFS for mips and mipsel.
>> >https://buildd.debian.org/status/fetch.php?pkg=sssd&arch=mips&ver=1.11.5.1-1&stamp=1399675946
>> >https://buildd.debian.org/status/fetch.php?pkg=sssd&arch=mipsel&ver=1.11.5.1-1&stamp=1399663454
>> >
>> >dyndns_test_ok is failing with following log:
>> >[ RUN      ] dyndns_test_ok(Tue Jul  8 15:53:55:004476 2014) [sssd] [be_nsupdate_args] (0x0200): (Tue Jul  8 15:53:55:004521 2014) [sssd] [child_handler_setup] (0x2000): nsupdate auth type: GSS-TSIGSetting up signal handler up for pid [21397](Tue Jul  8 15:53:55:004693 2014) [sssd] [__wrap_execv] (0x0200): nsupdate success test case(Tue Jul  8 15:53:55:004825 2014) [sssd] [__wrap_execv] (0x1000): Child exiting with status 0(Tue Jul  8 15:53:55:005275 2014) [sssd] [child_handler_setup] (0x2000): Signal handler set up for pid [21397](Tue Jul  8 15:54:55:837623 2014) [sssd] [write_pipe_handler] (0x0020): write failed [32][Broken pipe].(Tue Jul  8 15:54:55:837801 2014) [sssd] [nsupdate_child_stdin_done] (0x1000): Sending nsupdate data complete(Tue Jul  8 15:54:55:837869 2014) [sssd] [nsupdate_child_stdin_done] (0x0040): Sending nsupdate data failed [32]: Broken pipe(Tue Jul  8 15:54:55:837947 2014) [sssd] [be_nsupdate_done] (0x0040): nsupdate child execution failed [1432158228]: Dynamic DNS update failed(Tue Jul  8 15:54:55:837985 2014) [sssd] [dyndns_test_ok] (0x1000): Child request returned [1432158228]: Unknown error 14321582280x555d0014 != 0../src/tests/cmocka/test_dyndns.c:222: error: Failure![  FAILED  ] dyndns_test_okChild part has finished before the child handler was created.
>> >
>> >I have created and attached a patch which is workaround for this issue.
>> >Could someone please take a look and comment this?
>> >
>> >Thank you!
>> >
>> >Sincerely,
>> >Jurica
>> > 
>> 
>> >From d6162e90d89b744153bff068488a555047a9004e Mon Sep 17 00:00:00 2001
>> >From: Jurica Stanojkovic <jurica.stanojkovic at rt-rk.com>
>> >Date: Wed, 9 Jul 2014 17:57:55 +0200
>> >Subject: [PATCH] Workaround for dyndns_test_ok failiure on mips(el).
>> > Child part has finished before the child handler was created.
>> >
>> >---
>> bump.
>> 
>> Could someone review this patch.
>> I was helping with this problem on IRC. I don't want to give ACK.
>
>Well the commit message does not say why a sleep of 2 seconds is needed,
>can you shed a light on it ?
>
Updated version is attached.

LS
-------------- next part --------------
>From 80c25a192f2a410e18248f848a2256803e997c6b Mon Sep 17 00:00:00 2001
From: Lukas Slebodnik <lslebodn at redhat.com>
Date: Thu, 10 Sep 2015 10:42:02 +0200
Subject: [PATCH] dyndns-tests: Simulate job in wrapped execv

The function be_nsupdate_send fork a child for execution of the utility
nsupdate.

The child process builds nsupdate args in the function
be_nsupdate_args and then execute the utility.

Meanwhile the parent process register handlers for child and timeout
for canceling the long lasting child.
   nsupdate_child_send -> child_handler_setup

You can see in following log file that the wrapped version of execv
function might be very fast and therefore parent can register handlers
after finishing child. This is a reason why there is a child timeout.

(10:18:48:556001 2015) [sssd] [be_nsupdate_args] (0x0200): nsupdate auth type: GSS-TSIG
(10:18:48:556126 2015) [sssd] [__wrap_execv] (0x0200): nsupdate success test case
(10:18:48:556200 2015) [sssd] [__wrap_execv] (0x1000): Child exiting with status 0
(10:18:48:557218 2015) [sssd] [child_handler_setup] (0x2000): Setting up signal handler up for pid [3957]
(10:18:48:560987 2015) [sssd] [child_handler_setup] (0x2000): Signal handler set up for pid [3957]
(10:18:50:608520 2015) [sssd] [nsupdate_child_timeout] (0x0020): Timeout reached for dynamic DNS update
(10:18:50:681525 2015) [sssd] [be_nsupdate_done] (0x0040): nsupdate child execution failed [1432158233]: Dynamic DNS update timed out
(10:18:50:687031 2015) [sssd] [dyndns_test_ok] (0x1000): Child request returned [1432158233]: Unknown error 1432158233

The patch simulate a work in wrapped function with small delay.
It should be enough time for the parent process to registering a child.

Based on patch from Jurica Stanojkovic <jurica.stanojkovic at rt-rk.com>
Thank you.

Resolves:
https://fedorahosted.org/sssd/ticket/2283
---
 src/tests/cmocka/test_dyndns.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/tests/cmocka/test_dyndns.c b/src/tests/cmocka/test_dyndns.c
index 691378ee6edc5b0238adc8404ea0a433ae3cf907..dc3d19f59cf586e3ef4ed12e99192c639c4e45d5 100644
--- a/src/tests/cmocka/test_dyndns.c
+++ b/src/tests/cmocka/test_dyndns.c
@@ -70,6 +70,7 @@ void __wrap_execv(const char *path, char *const argv[])
         case MOCK_NSUPDATE_OK:
             DEBUG(SSSDBG_FUNC_DATA, "nsupdate success test case\n");
             err = 0;
+            sleep(2);
             break;
         case MOCK_NSUPDATE_ERR:
             DEBUG(SSSDBG_FUNC_DATA, "nsupdate error test case\n");
-- 
2.5.0



More information about the sssd-devel mailing list