On 2 June 2016 at 01:28, Paul Boca <pb...@cloudbasesolutions.com> wrote:
> Hi!
>
> Thanks for review!
> Please see my comments inline.

Thanks for looking into the windows testsuite failures :-)

More below.

>> -----Original Message-----
>> From: Joe Stringer [mailto:j...@ovn.org]
>> Sent: Thursday, June 2, 2016 4:53 AM
>> To: Paul Boca
>> Cc: dev@openvswitch.org
>> Subject: Re: [ovs-dev] [PATCH V2 4/4] tests: Fix fail of
>> OVS_APP_EXIT_AND_WAIT on Windows
>>
>> On 1 June 2016 at 04:46, Paul Boca <pb...@cloudbasesolutions.com> wrote:
>> > The problem is that on some cases it gets called with the socket
>> > name instead of the service name.
>> >
>> > Signed-off-by: Paul-Daniel Boca <pb...@cloudbasesolutions.com>
>>
>> Looking at commit 0c473314294930a47a18d380e0bbcdf7b02a16f2 which
>> introduced this macro, it seems like simply skipping these pieces
>> could cause some tests to intermittently fail, because "ovs-appctl ...
>> exit" does not wait until the process has terminated; it simply tells
>> the process to terminate itself, then returns.
> [Paul Boca] The problem with OVS_APP_EXIT_AND_WAIT is that it gets called 
> with "`pwd`"/unixctl,
> the macro tries to get the pid from the wrong file "$1.pid", this expands to 
> "`pwd`"/unixctl.pid
> which doesn't exist. Also the macro tries to wait for the pid inside 
> "`pwd`"/unixctl.pid.
> I'm looking at commit d9c8c57c48a22b145cf1b5e78839ac0a16e039e9 which replaces
> "ovs-appctl -t `pwd`/unixctl exit" with 
> OVS_APP_EXIT_AND_WAIT([`pwd`/unixctl]) which it
> doesn't do the right thing in this case, for other situations this works well.
>
> Here you can see one of the unixctl used:
> https://github.com/openvswitch/ovs/commit/d9c8c57c48a22b145cf1b5e78839ac0a16e039e9
> #diff-b878790402a4b86a273e4b8c75b9bea6R86
>
>>
>> What needs to happen differently on windows between validating that a
>> process has exited vs. a service has exited?
> [Paul Boca] The macro does the right thing except the case above.
> If a pid file name is sent to the macro, with the previous version, it works 
> well.

Bear with me, I'm a little confused - firstly, about why the TMPPID
stuff is supposed to work at all, and secondly why the behaviour
differs between platforms.

One one hand, if the user of OVS_APP_EXIT_AND_WAIT() passes
`pwd`/unixctl, wouldn't the path then become
$OVS_RUNDIR/`pwd`/unixctl.pid ? That doesn't seem like a valid path to
read to acquire a PID. In fact, when I removed the "2>/dev/null" from
the TMPPID line, I found some tests that would quietly log that the
file doesn't exist - and rightly so. This suggests that the
$OVS_RUNDIR part of the cat command should be removed.

On the other hand, if that command returned effectively an empty
string, then I'd expect the kill command would become something like
"kill -0", which should print the usage and return a non-zero exit
code. Because the exit code is nonzero, the OVS_WAIT_WHILE should exit
immediately, so the test should continue. But this doesn't seem to be
the behaviour on windows? Maybe one of my assumptions here is a bit
off.

Lance, it seems like the "$OVS_RUNDIR" part of these commands was
introduced by some of the changes you made around gcov support,
specifically commits d9c8c57c48a2 ("tests: consistently use
OVS_APP_EXIT_AND_WAIT() for daemon termination") and f9b11f2a09b4
("tests: Make OVS_APP_EXIT_AND_WAIT() wait for process termination").
As far as I can tell, they're broken for a bunch of the tests. I
started investigating by applying the diff below, and I can see that
there's a lot of failures locating the pidfiles. Would you be able to
take a look?

diff --git a/tests/ovs-macros.at b/tests/ovs-macros.at
index e5710a07c192..2411fab2bb3f 100644
--- a/tests/ovs-macros.at
+++ b/tests/ovs-macros.at
@@ -131,11 +131,18 @@ m4_define([OVS_WAIT_WHILE],
  [OVS_WAIT([if $1; then return 1; else return 0; fi], [$2])])

dnl OVS_APP_EXIT_AND_WAIT(DAEMON)
dnl
dnl Ask the daemon named DAEMON to exit, via ovs-appctl, and then waits for it
dnl to exit.
m4_define([OVS_APP_EXIT_AND_WAIT],
-  [TMPPID=$(cat "$OVS_RUNDIR"/$1.pid 2>/dev/null)
+  [pidfile="$1.pid"
+   AT_CHECK([test -e $pidfile])
+   TMPPID=$(cat $pidfile)
   AT_CHECK([ovs-appctl -t $1 exit])
   OVS_WAIT_WHILE([kill -0 $TMPPID 2>/dev/null])])

@@ -144,7 +151,9 @@ dnl
dnl Ask the daemon named DAEMON to exit, via ovs-appctl (using the target
dnl argument), and then waits for it to exit.
m4_define([OVS_APP_EXIT_AND_WAIT_BY_TARGET],
-  [TMPPID=`cat "$OVS_RUNDIR"/$1.pid 2>/dev/null`
+  [pidfile="$OVS_RUNDIR"/$1.pid
+   AT_CHECK([test -e $pidfile])
+   TMPPID=$(cat "$pidfile")
   AT_CHECK([ovs-appctl --target=$OVS_RUNDIR/ovsdb-server.$TMPPID.ctl exit])
   OVS_WAIT_WHILE([kill -0 $TMPPID 2>/dev/null])])
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to