Re: [ovs-dev] [PATCH v2] ovs-vsctl: Exit with error if postdb checks report errors.

2023-07-03 Thread Ilya Maximets
On 6/30/23 18:33, Flavio Leitner wrote:
> 
> On 6/30/23 12:31, Aaron Conole wrote:
>> Flavio Leitner  writes:
>>
>>> Today the exit code refers to the execution of the change
>>> in the database. However, when not using parameter --no-wait
>>> (default), the ovs-vsctl also checks if OVSDB transactions
>>> are successfully recorded and reload by ovs-vswitchd. In this
>>> case, an error message is printed if there is a problem during
>>> the reload, like for example the one below:
>>>
>>>   # ovs-vsctl add-port br0 gre0 -- \
>>>  set interface gre0 type=ip6gre options:key=100 \
>>>  options:remote_ip=2001::2
>>> ovs-vsctl: Error detected while setting up 'gre0': could not \
>>> add network device gre0 to ofproto (Address family not supported\
>>> by protocol).  See ovs-vswitchd log for details.
>>> ovs-vsctl: The default log directory is "/var/log/openvswitch".
>>>   # echo $?
>>> 0
>>>
>>> This patch changes to exit with specific error code '65'
>>> (EX_DATAERR) if errors were reported during the reload.
>>>
>>> This change may break existing scripts because ovs-vsctl will
>>> start to fail when before it was succeeding. However, if an
>>> error is printed, then it is likely that the change was not
>>> functional anyway.
>>>
>>> Reported-at: https://bugzilla.redhat.com/1731553
>>> Signed-off-by: Flavio Leitner 
>>> ---
>> LGTM.  I did a quick double check for FreeBSD and Mac OS X, and the
>> error code is the same value as on linux systems.
>>
>> I don't have a windows machine to test with and unfortunately the robot
>> doesn't build series_* branches on appveyor (maybe something to look
>> at).  We may need a workaround for windows - but I'll let Alin take a
>> look.
>>
>> Acked-by: Aaron Conole 
> 
> Thanks for reviewing and testing it.
> 
> fbl

I didn't look very closely at a patch, but it does fail the Windows build
unfortunately:

 utilities\ovs-vsctl.c(28): fatal error C1083: Cannot open include file:
'sysexits.h': No such file or directory

Please, take a look.  You should be able to setup appveyor account for
yourself for testing.  It has a free tier.

Best regards, Ilya Maximets.
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [PATCH v2] ovs-vsctl: Exit with error if postdb checks report errors.

2023-06-30 Thread Flavio Leitner



On 6/30/23 12:31, Aaron Conole wrote:

Flavio Leitner  writes:


Today the exit code refers to the execution of the change
in the database. However, when not using parameter --no-wait
(default), the ovs-vsctl also checks if OVSDB transactions
are successfully recorded and reload by ovs-vswitchd. In this
case, an error message is printed if there is a problem during
the reload, like for example the one below:

  # ovs-vsctl add-port br0 gre0 -- \
 set interface gre0 type=ip6gre options:key=100 \
 options:remote_ip=2001::2
ovs-vsctl: Error detected while setting up 'gre0': could not \
add network device gre0 to ofproto (Address family not supported\
by protocol).  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch".
  # echo $?
0

This patch changes to exit with specific error code '65'
(EX_DATAERR) if errors were reported during the reload.

This change may break existing scripts because ovs-vsctl will
start to fail when before it was succeeding. However, if an
error is printed, then it is likely that the change was not
functional anyway.

Reported-at: https://bugzilla.redhat.com/1731553
Signed-off-by: Flavio Leitner 
---

LGTM.  I did a quick double check for FreeBSD and Mac OS X, and the
error code is the same value as on linux systems.

I don't have a windows machine to test with and unfortunately the robot
doesn't build series_* branches on appveyor (maybe something to look
at).  We may need a workaround for windows - but I'll let Alin take a
look.

Acked-by: Aaron Conole 


Thanks for reviewing and testing it.

fbl







v2:
 Followed Aaron's suggestion to return EX_DATAERR.

  NEWS |  4 
  tests/ovs-vsctl.at   | 19 +--
  tests/ovs-vswitchd.at|  2 +-
  tests/tunnel.at  |  2 +-
  utilities/ovs-vsctl.8.in |  2 ++
  utilities/ovs-vsctl.c| 30 --
  6 files changed, 49 insertions(+), 10 deletions(-)

diff --git a/NEWS b/NEWS
index 66d5a4ea3..cb148a09f 100644
--- a/NEWS
+++ b/NEWS
@@ -28,6 +28,10 @@ Post-v3.1.0
   * Added new options --[ovsdb-server|ovs-vswitchd]-umask=MODE to set umask
 value when starting OVS daemons.  E.g., use --ovsdb-server-umask=0002
 in order to create OVSDB sockets with access mode of 0770.
+   - ovs-vsctl:
+ * Exit with error code 65 (EX_DATAERR) if errors were reported while
+   checking if OVSDB transactions are successfully recorded and reload
+   by ovs-vswitchd.
 - QoS:
   * Added new configuration option 'jitter' for a linux-netem QoS type.
 - DPDK:
diff --git a/tests/ovs-vsctl.at b/tests/ovs-vsctl.at
index a368bff6e..b282798cc 100644
--- a/tests/ovs-vsctl.at
+++ b/tests/ovs-vsctl.at
@@ -1522,7 +1522,7 @@ cat >experr experr << EOF
+ovs-vsctl: Error detected while setting up 'gre0': gre0: bad ip6gre 'remote_ip'
+gre0: ip6gre type requires valid 'remote_ip' argument.  See ovs-vswitchd log 
for details.
+ovs-vsctl: The default log directory is "$OVS_RUNDIR".
+EOF
+AT_CHECK([ovs-vsctl add-port br0 gre0 -- set interface gre0 type=ip6gre 
options:key=100 options:remote_ip=192.168.0.300], [65], [], [experr])
+OVS_VSWITCHD_STOP(["/is not a valid IP address/d
+/netdev_vport|WARN|gre0: bad ip6gre 'remote_ip'/d
+/netdev|WARN|gre0: could not set configuration/d"])
+AT_CLEANUP
diff --git a/tests/ovs-vswitchd.at b/tests/ovs-vswitchd.at
index 977b2eba1..80a748355 100644
--- a/tests/ovs-vswitchd.at
+++ b/tests/ovs-vswitchd.at
@@ -222,7 +222,7 @@ cat >experr <  
  OVS_VSWITCHD_STOP(['/ignoring bridge with invalid name/d'])

diff --git a/tests/tunnel.at b/tests/tunnel.at
index ddeb66bc9..d281c9e6c 100644
--- a/tests/tunnel.at
+++ b/tests/tunnel.at
@@ -1009,7 +1009,7 @@ OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 
type=vxlan \
  options:remote_ip=flow ofport_request=1])
  
  AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=vxlan \

-options:remote_ip=flow options:exts=gbp options:key=1 
ofport_request=2], [0],
+options:remote_ip=flow options:exts=gbp options:key=1 
ofport_request=2], [65],
[], [ignore])
  
  AT_CHECK([grep 'p2: could not set configuration (File exists)' ovs-vswitchd.log | sed "s/^.*\(p2:.*\)$/\1/"], [0],

diff --git a/utilities/ovs-vsctl.8.in b/utilities/ovs-vsctl.8.in
index 9e319aa1c..7c7e7bc29 100644
--- a/utilities/ovs-vsctl.8.in
+++ b/utilities/ovs-vsctl.8.in
@@ -892,6 +892,8 @@ Usage, syntax, or configuration file error.
  .IP "2"
  The \fIbridge\fR argument to \fBbr\-exists\fR specified the name of a
  bridge that does not exist.
+.IP "65"
+An error has been reported post OVSDB reload.
  .SH "SEE ALSO"
  .
  .BR ovsdb\-server (1),
diff --git a/utilities/ovs-vsctl.c 

Re: [ovs-dev] [PATCH v2] ovs-vsctl: Exit with error if postdb checks report errors.

2023-06-30 Thread Aaron Conole
Flavio Leitner  writes:

> Today the exit code refers to the execution of the change
> in the database. However, when not using parameter --no-wait
> (default), the ovs-vsctl also checks if OVSDB transactions
> are successfully recorded and reload by ovs-vswitchd. In this
> case, an error message is printed if there is a problem during
> the reload, like for example the one below:
>
>  # ovs-vsctl add-port br0 gre0 -- \
> set interface gre0 type=ip6gre options:key=100 \
> options:remote_ip=2001::2
> ovs-vsctl: Error detected while setting up 'gre0': could not \
> add network device gre0 to ofproto (Address family not supported\
> by protocol).  See ovs-vswitchd log for details.
> ovs-vsctl: The default log directory is "/var/log/openvswitch".
>  # echo $?
> 0
>
> This patch changes to exit with specific error code '65'
> (EX_DATAERR) if errors were reported during the reload.
>
> This change may break existing scripts because ovs-vsctl will
> start to fail when before it was succeeding. However, if an
> error is printed, then it is likely that the change was not
> functional anyway.
>
> Reported-at: https://bugzilla.redhat.com/1731553
> Signed-off-by: Flavio Leitner 
> ---

LGTM.  I did a quick double check for FreeBSD and Mac OS X, and the
error code is the same value as on linux systems.

I don't have a windows machine to test with and unfortunately the robot
doesn't build series_* branches on appveyor (maybe something to look
at).  We may need a workaround for windows - but I'll let Alin take a
look.

Acked-by: Aaron Conole 

> v2:
> Followed Aaron's suggestion to return EX_DATAERR.
>
>  NEWS |  4 
>  tests/ovs-vsctl.at   | 19 +--
>  tests/ovs-vswitchd.at|  2 +-
>  tests/tunnel.at  |  2 +-
>  utilities/ovs-vsctl.8.in |  2 ++
>  utilities/ovs-vsctl.c| 30 --
>  6 files changed, 49 insertions(+), 10 deletions(-)
>
> diff --git a/NEWS b/NEWS
> index 66d5a4ea3..cb148a09f 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -28,6 +28,10 @@ Post-v3.1.0
>   * Added new options --[ovsdb-server|ovs-vswitchd]-umask=MODE to set 
> umask
> value when starting OVS daemons.  E.g., use --ovsdb-server-umask=0002
> in order to create OVSDB sockets with access mode of 0770.
> +   - ovs-vsctl:
> + * Exit with error code 65 (EX_DATAERR) if errors were reported while
> +   checking if OVSDB transactions are successfully recorded and reload
> +   by ovs-vswitchd.
> - QoS:
>   * Added new configuration option 'jitter' for a linux-netem QoS type.
> - DPDK:
> diff --git a/tests/ovs-vsctl.at b/tests/ovs-vsctl.at
> index a368bff6e..b282798cc 100644
> --- a/tests/ovs-vsctl.at
> +++ b/tests/ovs-vsctl.at
> @@ -1522,7 +1522,7 @@ cat >experr <  ovs-vsctl: Error detected while setting up 'reserved_name'.  See 
> ovs-vswitchd log for details.
>  ovs-vsctl: The default log directory is "$OVS_RUNDIR".
>  EOF
> -AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [experr])
> +AT_CHECK([ovs-vsctl add-port br0 reserved_name], [65], [], [experr])
>  # Prevent race.
>  OVS_WAIT_UNTIL([test `grep -- "|WARN|" ovs-vswitchd.log | wc -l` -ge 1])
>  # Detect the warning log message
> @@ -1560,7 +1560,7 @@ cat >experr <  ovs-vsctl: Error detected while setting up 'reserved_name'.  See 
> ovs-vswitchd log for details.
>  ovs-vsctl: The default log directory is "$OVS_RUNDIR".
>  EOF
> -AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [experr])
> +AT_CHECK([ovs-vsctl add-port br0 reserved_name], [65], [], [experr])
>  # Prevent race.
>  OVS_WAIT_UNTIL([test `grep -- "|WARN|" ovs-vswitchd.log | wc -l` -ge 1])
>  # Detect the warning log message
> @@ -1737,3 +1737,18 @@ AT_CHECK([ovs-vsctl --no-wait --bare --columns 
> _uuid,name list bridge tst1], [0]
>  
>  OVS_VSCTL_CLEANUP
>  AT_CLEANUP
> +
> +AT_SETUP([ovs-vsctl -- return error if OVSDB reload issues are reported])
> +OVS_VSWITCHD_START
> +dnl check if ovs-vsctl returns error 65 if ovs-vswitchd fails to reload.
> +
> +cat >experr << EOF
> +ovs-vsctl: Error detected while setting up 'gre0': gre0: bad ip6gre 
> 'remote_ip'
> +gre0: ip6gre type requires valid 'remote_ip' argument.  See ovs-vswitchd log 
> for details.
> +ovs-vsctl: The default log directory is "$OVS_RUNDIR".
> +EOF
> +AT_CHECK([ovs-vsctl add-port br0 gre0 -- set interface gre0 type=ip6gre 
> options:key=100 options:remote_ip=192.168.0.300], [65], [], [experr])
> +OVS_VSWITCHD_STOP(["/is not a valid IP address/d
> +/netdev_vport|WARN|gre0: bad ip6gre 'remote_ip'/d
> +/netdev|WARN|gre0: could not set configuration/d"])
> +AT_CLEANUP
> diff --git a/tests/ovs-vswitchd.at b/tests/ovs-vswitchd.at
> index 977b2eba1..80a748355 100644
> --- a/tests/ovs-vswitchd.at
> +++ b/tests/ovs-vswitchd.at
> @@ -222,7 +222,7 @@ cat >experr <  ovs-vsctl: Error detected while setting up 'b/c'.  See ovs-vswitchd log for 
> details.
>  ovs-vsctl: The default log directory is "$OVS_RUNDIR".
>  EOF
> -AT_CHECK([ovs-vsctl 

[ovs-dev] [PATCH v2] ovs-vsctl: Exit with error if postdb checks report errors.

2023-06-30 Thread Flavio Leitner
Today the exit code refers to the execution of the change
in the database. However, when not using parameter --no-wait
(default), the ovs-vsctl also checks if OVSDB transactions
are successfully recorded and reload by ovs-vswitchd. In this
case, an error message is printed if there is a problem during
the reload, like for example the one below:

 # ovs-vsctl add-port br0 gre0 -- \
set interface gre0 type=ip6gre options:key=100 \
options:remote_ip=2001::2
ovs-vsctl: Error detected while setting up 'gre0': could not \
add network device gre0 to ofproto (Address family not supported\
by protocol).  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch".
 # echo $?
0

This patch changes to exit with specific error code '65'
(EX_DATAERR) if errors were reported during the reload.

This change may break existing scripts because ovs-vsctl will
start to fail when before it was succeeding. However, if an
error is printed, then it is likely that the change was not
functional anyway.

Reported-at: https://bugzilla.redhat.com/1731553
Signed-off-by: Flavio Leitner 
---

v2:
Followed Aaron's suggestion to return EX_DATAERR.

 NEWS |  4 
 tests/ovs-vsctl.at   | 19 +--
 tests/ovs-vswitchd.at|  2 +-
 tests/tunnel.at  |  2 +-
 utilities/ovs-vsctl.8.in |  2 ++
 utilities/ovs-vsctl.c| 30 --
 6 files changed, 49 insertions(+), 10 deletions(-)

diff --git a/NEWS b/NEWS
index 66d5a4ea3..cb148a09f 100644
--- a/NEWS
+++ b/NEWS
@@ -28,6 +28,10 @@ Post-v3.1.0
  * Added new options --[ovsdb-server|ovs-vswitchd]-umask=MODE to set umask
value when starting OVS daemons.  E.g., use --ovsdb-server-umask=0002
in order to create OVSDB sockets with access mode of 0770.
+   - ovs-vsctl:
+ * Exit with error code 65 (EX_DATAERR) if errors were reported while
+   checking if OVSDB transactions are successfully recorded and reload
+   by ovs-vswitchd.
- QoS:
  * Added new configuration option 'jitter' for a linux-netem QoS type.
- DPDK:
diff --git a/tests/ovs-vsctl.at b/tests/ovs-vsctl.at
index a368bff6e..b282798cc 100644
--- a/tests/ovs-vsctl.at
+++ b/tests/ovs-vsctl.at
@@ -1522,7 +1522,7 @@ cat >experr experr <
 #include 
 #include 
+#include 
 #include 
 
 #include "db-ctl-base.h"
@@ -56,6 +57,9 @@
 
 VLOG_DEFINE_THIS_MODULE(vsctl);
 
+/* Post OVSDB reload error reported. */
+#define EXIT_POSTDB_ERROR EX_DATAERR
+
 struct vsctl_context;
 
 /* --db: The database server to contact. */
@@ -115,7 +119,7 @@ static void parse_options(int argc, char *argv[], struct 
shash *local_options);
 static void run_prerequisites(struct ctl_command[], size_t n_commands,
   struct ovsdb_idl *);
 static bool do_vsctl(const char *args, struct ctl_command *, size_t n,
- struct ovsdb_idl *);
+ struct ovsdb_idl *, bool *);
 
 /* post_db_reload_check frame work is to allow ovs-vsctl to do additional
  * checks after OVSDB transactions are successfully recorded and reload by
@@ -134,11 +138,13 @@ static bool do_vsctl(const char *args, struct ctl_command 
*, size_t n,
  * Current implementation only check for Post OVSDB reload failures on new
  * interface additions with 'add-br' and 'add-port' commands.
  *
+ * post_db_reload_check returns 'true' if a failure is reported.
+ *
  * post_db_reload_expect_iface()
  *
  * keep track of interfaces to be checked post OVSDB reload. */
 static void post_db_reload_check_init(void);
-static void post_db_reload_do_checks(const struct vsctl_context *);
+static bool post_db_reload_do_checks(const struct vsctl_context *);
 static void post_db_reload_expect_iface(const struct ovsrec_interface *);
 
 static struct uuid *neoteric_ifaces;
@@ -200,9 +206,15 @@ main(int argc, char *argv[])
 }
 
 if (seqno != ovsdb_idl_get_seqno(idl)) {
+bool postdb_err;
+
 seqno = ovsdb_idl_get_seqno(idl);
-if (do_vsctl(args, commands, n_commands, idl)) {
+if (do_vsctl(args, commands, n_commands, idl, _err)) {
 free(args);
+if (postdb_err) {
+