[ovs-dev] [PATCH] ovs-vsctl: Log better warnings for duplicate ports and interfaces.
Ethan Jackson
ethan at nicira.com
Mon Jul 25 21:05:05 UTC 2011
Looks Good.
Ethan
On Fri, Jul 8, 2011 at 12:31, Ben Pfaff <blp at nicira.com> wrote:
> The database prevents multiple ports or interfaces with a single name, but
> duplicates can still occur if, for example, two bridges' "ports" columns
> both point to a single Port record. The existing warning just says in this
> case that the database contains a duplicate port name. This prompts users
> to dump the Port table to look for the duplicate. Of course there isn't
> one, so then they ask me to point out the problem.
>
> This commit improves the log message to point out the actual problem.
> ---
> utilities/ovs-vsctl.c | 36 ++++++++++++++++++++++++++++--------
> 1 files changed, 28 insertions(+), 8 deletions(-)
>
> diff --git a/utilities/ovs-vsctl.c b/utilities/ovs-vsctl.c
> index c6fc8a4..1c67b11 100644
> --- a/utilities/ovs-vsctl.c
> +++ b/utilities/ovs-vsctl.c
> @@ -785,8 +785,7 @@ get_info(struct vsctl_context *ctx, struct vsctl_info *info)
> struct ovsrec_port *port_cfg = br_cfg->ports[j];
>
> if (!sset_add(&ports, port_cfg->name)) {
> - VLOG_WARN("%s: database contains duplicate port name",
> - port_cfg->name);
> + /* Duplicate port name. (We will warn about that later.) */
> continue;
> }
>
> @@ -800,7 +799,6 @@ get_info(struct vsctl_context *ctx, struct vsctl_info *info)
> sset_destroy(&ports);
>
> sset_init(&bridges);
> - sset_init(&ports);
> for (i = 0; i < ovs->n_bridges; i++) {
> struct ovsrec_bridge *br_cfg = ovs->bridges[i];
> struct vsctl_bridge *br;
> @@ -815,7 +813,18 @@ get_info(struct vsctl_context *ctx, struct vsctl_info *info)
> struct vsctl_port *port;
> size_t k;
>
> - if (!sset_add(&ports, port_cfg->name)) {
> + port = shash_find_data(&info->ports, port_cfg->name);
> + if (port) {
> + if (port_cfg == port->port_cfg) {
> + VLOG_WARN("%s: port is in multiple bridges (%s and %s)",
> + port_cfg->name, br->name, port->bridge->name);
> + } else {
> + /* Log as an error because this violates the database's
> + * uniqueness constraints, so the database server shouldn't
> + * have allowed it. */
> + VLOG_ERR("%s: database contains duplicate port name",
> + port_cfg->name);
> + }
> continue;
> }
>
> @@ -841,9 +850,21 @@ get_info(struct vsctl_context *ctx, struct vsctl_info *info)
> struct ovsrec_interface *iface_cfg = port_cfg->interfaces[k];
> struct vsctl_iface *iface;
>
> - if (shash_find(&info->ifaces, iface_cfg->name)) {
> - VLOG_WARN("%s: database contains duplicate interface name",
> - iface_cfg->name);
> + iface = shash_find_data(&info->ifaces, iface_cfg->name);
> + if (iface) {
> + if (iface_cfg == iface->iface_cfg) {
> + VLOG_WARN("%s: interface is in multiple ports "
> + "(%s and %s)",
> + iface_cfg->name,
> + iface->port->port_cfg->name,
> + port->port_cfg->name);
> + } else {
> + /* Log as an error because this violates the database's
> + * uniqueness constraints, so the database server
> + * shouldn't have allowed it. */
> + VLOG_ERR("%s: database contains duplicate interface "
> + "name", iface_cfg->name);
> + }
> continue;
> }
>
> @@ -855,7 +876,6 @@ get_info(struct vsctl_context *ctx, struct vsctl_info *info)
> }
> }
> sset_destroy(&bridges);
> - sset_destroy(&ports);
> }
>
> static void
> --
> 1.7.4.4
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
More information about the dev
mailing list