Skip to content

Commit

Permalink
db-ctl-base: remove the recurse member from struct cmd_show_table
Browse files Browse the repository at this point in the history
The 'recurse' is used during run time to suppress duplicated prints.
It is not essential to describe how show command should work.

This patch remove the 'recurse' member. Duplicated prints is now
suppressed by maintaining an 'sset' of tables that have been printed
at run time.

Signed-off-by: Andy Zhou <[email protected]>
Acked-by: Ben Pfaff <[email protected]>
  • Loading branch information
azhou-nicira committed Jul 23, 2015
1 parent ecbc260 commit 6530be3
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 34 deletions.
20 changes: 14 additions & 6 deletions lib/db-ctl-base.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
#include "ovsdb-idl.h"
#include "ovsdb-idl-provider.h"
#include "shash.h"
#include "sset.h"
#include "string.h"
#include "table.h"
#include "util.h"
Expand Down Expand Up @@ -1648,9 +1649,12 @@ cmd_show_find_table_by_name(const char *name)
return NULL;
}

/* 'shown' records the tables that has been displayed by the current
* command to avoid duplicated prints.
*/
static void
cmd_show_row(struct ctl_context *ctx, const struct ovsdb_idl_row *row,
int level)
int level, struct sset *shown)
{
struct cmd_show_table *show = cmd_show_find_table_by_row(row);
size_t i;
Expand All @@ -1667,11 +1671,11 @@ cmd_show_row(struct ctl_context *ctx, const struct ovsdb_idl_row *row,
}
ds_put_char(&ctx->output, '\n');

if (!show || show->recurse) {
if (!show || sset_find(shown, show->table->name)) {
return;
}

show->recurse = true;
sset_add(shown, show->table->name);
for (i = 0; i < ARRAY_SIZE(show->columns); i++) {
const struct ovsdb_idl_column *column = show->columns[i];
const struct ovsdb_datum *datum;
Expand All @@ -1696,7 +1700,7 @@ cmd_show_row(struct ctl_context *ctx, const struct ovsdb_idl_row *row,
ref_show->table,
&datum->keys[j].uuid);
if (ref_row) {
cmd_show_row(ctx, ref_row, level + 1);
cmd_show_row(ctx, ref_row, level + 1, shown);
}
}
continue;
Expand Down Expand Up @@ -1749,18 +1753,22 @@ cmd_show_row(struct ctl_context *ctx, const struct ovsdb_idl_row *row,
ds_put_char(&ctx->output, '\n');
}
}
show->recurse = false;
sset_find_and_delete_assert(shown, show->table->name);
}

static void
cmd_show(struct ctl_context *ctx)
{
const struct ovsdb_idl_row *row;
struct sset shown = SSET_INITIALIZER(&shown);

for (row = ovsdb_idl_first_row(ctx->idl, cmd_show_tables[0].table);
row; row = ovsdb_idl_next_row(row)) {
cmd_show_row(ctx, row, 0);
cmd_show_row(ctx, row, 0, &shown);
}

ovs_assert(sset_is_empty(&shown));
sset_destroy(&shown);
}


Expand Down
4 changes: 0 additions & 4 deletions lib/db-ctl-base.h
Original file line number Diff line number Diff line change
Expand Up @@ -157,15 +157,11 @@ struct ctl_command *ctl_parse_commands(int argc, char *argv[],
*
* - 'columns[]' allows user to specify the print of additional columns
* in 'table'.
*
* - 'recurse' is used to avoid duplicate print.
*
* */
struct cmd_show_table {
const struct ovsdb_idl_table_class *table;
const struct ovsdb_idl_column *name_column;
const struct ovsdb_idl_column *columns[3]; /* Seems like a good number. */
bool recurse;
};

/* This array defines the 'show' command output format. User can check the
Expand Down
26 changes: 13 additions & 13 deletions utilities/ovs-vsctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -980,45 +980,45 @@ struct cmd_show_table cmd_show_tables[] = {
NULL,
{&ovsrec_open_vswitch_col_manager_options,
&ovsrec_open_vswitch_col_bridges,
&ovsrec_open_vswitch_col_ovs_version},
false},
&ovsrec_open_vswitch_col_ovs_version}
},

{&ovsrec_table_bridge,
&ovsrec_bridge_col_name,
{&ovsrec_bridge_col_controller,
&ovsrec_bridge_col_fail_mode,
&ovsrec_bridge_col_ports},
false},
&ovsrec_bridge_col_ports}
},

{&ovsrec_table_port,
&ovsrec_port_col_name,
{&ovsrec_port_col_tag,
&ovsrec_port_col_trunks,
&ovsrec_port_col_interfaces},
false},
&ovsrec_port_col_interfaces}
},

{&ovsrec_table_interface,
&ovsrec_interface_col_name,
{&ovsrec_interface_col_type,
&ovsrec_interface_col_options,
&ovsrec_interface_col_error},
false},
&ovsrec_interface_col_error}
},

{&ovsrec_table_controller,
&ovsrec_controller_col_target,
{&ovsrec_controller_col_is_connected,
NULL,
NULL},
false},
NULL}
},

{&ovsrec_table_manager,
&ovsrec_manager_col_target,
{&ovsrec_manager_col_is_connected,
NULL,
NULL},
false},
NULL}
},

{NULL, NULL, {NULL, NULL, NULL}, false}
{NULL, NULL, {NULL, NULL, NULL}}
};

static void
Expand Down
22 changes: 11 additions & 11 deletions vtep/vtep-ctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -369,38 +369,38 @@ struct cmd_show_table cmd_show_tables[] = {
NULL,
{&vteprec_global_col_managers,
&vteprec_global_col_switches,
NULL},
false},
NULL}
},

{&vteprec_table_manager,
&vteprec_manager_col_target,
{&vteprec_manager_col_is_connected,
NULL,
NULL},
false},
NULL}
},

{&vteprec_table_physical_switch,
&vteprec_physical_switch_col_name,
{&vteprec_physical_switch_col_management_ips,
&vteprec_physical_switch_col_tunnel_ips,
&vteprec_physical_switch_col_ports},
false},
&vteprec_physical_switch_col_ports}
},

{&vteprec_table_physical_port,
&vteprec_physical_port_col_name,
{&vteprec_physical_port_col_vlan_bindings,
NULL,
NULL},
false},
NULL}
},

{&vteprec_table_logical_switch,
&vteprec_logical_switch_col_name,
{NULL,
NULL,
NULL},
false},
NULL}
},

{NULL, NULL, {NULL, NULL, NULL}, false}
{NULL, NULL, {NULL, NULL, NULL}}
};

/* vtep-ctl specific context. Inherits the 'struct ctl_context' as base. */
Expand Down

0 comments on commit 6530be3

Please sign in to comment.