AT_CHECK([RUN_OVS_VSCTL([list b x])],
[1], [], [ovs-vsctl: no row "x" in table Bridge
], [OVS_VSCTL_CLEANUP])
-AT_CHECK([RUN_OVS_VSCTL([list b br])],
- [1], [], [ovs-vsctl: multiple rows in Bridge match "br"
-], [OVS_VSCTL_CLEANUP])
AT_CHECK([RUN_OVS_VSCTL([get b br0 d])],
[1], [], [ovs-vsctl: Bridge contains more than one column whose name matches "d"
], [OVS_VSCTL_CLEANUP])
# Give the ovs-vsctls a chance to read the database
sleep 1
-AT_CHECK([RUN_OVS_VSCTL([add-br br10 -- set bridge br1 other-config:abc=quux])
+AT_CHECK([RUN_OVS_VSCTL([add-br br10 -- set bridge br10 other-config:abc=quux])
RUN_OVS_VSCTL([add-br br1 -- set bridge br1 other-config:abc=def -- add-bond br1 bond0 eth0 eth1 -- set port bond0 bond_updelay=500])],
[0], [], [], [OVS_VSCTL_CLEANUP])
An sFlow configuration attached to a bridge. Records may be
identified by bridge name.
.PP
-Names of tables, records, and columns are not case-sensitive, and
-\fB\-\-\fR and \fB_\fR are treated interchangeably. Unique
+Record names must be specified in full and with correct
+capitalization. Names of tables and columns are not case-sensitive,
+and \fB\-\-\fR and \fB_\fR are treated interchangeably. Unique
abbreviations are acceptable, e.g. \fBnet\fR or \fBn\fR is sufficient
to identify the \fBNetFlow\fR table.
.
will abort if no bridge named \fBbr0\fR exists when \fBovs\-vsctl\fR
initially connects to the database.
.IP
-Unlike all the other database commands, \fBwait\-until\fR treats its
-\fIrecord\fR argument as case-sensitive and does not allow it to be
-abbreviated. Otherwise, \fBwait\-until br1\fR would be satisfied by a
-bridge named \fBbr10\fR.
-.IP
Consider specifying \fB\-\-timeout=0\fR along with
\fB\-\-wait\-until\fR, to prevent \fBovs\-vsctl\fR from terminating
after waiting only at most 5 seconds.
static const struct ovsdb_idl_row *
get_row_by_id(struct vsctl_context *ctx, const struct vsctl_table_class *table,
- const struct vsctl_row_id *id, const char *record_id,
- bool partial_match_ok)
+ const struct vsctl_row_id *id, const char *record_id)
{
const struct ovsdb_idl_row *referrer, *final;
}
} else {
const struct ovsdb_idl_row *row;
- unsigned int best_score = 0;
referrer = NULL;
for (row = ovsdb_idl_first_row(ctx->idl, id->table);
- row != NULL && best_score != UINT_MAX;
+ row != NULL;
row = ovsdb_idl_next_row(row))
{
const struct ovsdb_datum *name;
name = ovsdb_idl_get(row, id->name_column,
OVSDB_TYPE_STRING, OVSDB_TYPE_VOID);
- if (name->n == 1) {
- unsigned int score;
-
- score = (partial_match_ok
- ? score_partial_match(name->keys[0].string, record_id)
- : !strcmp(name->keys[0].string, record_id));
- if (score > best_score) {
- referrer = row;
- best_score = score;
- } else if (score == best_score) {
- referrer = NULL;
+ if (name->n == 1 && !strcmp(name->keys[0].string, record_id)) {
+ if (referrer) {
+ vsctl_fatal("multiple rows in %s match \"%s\"",
+ table->class->name, record_id);
}
+ referrer = row;
}
}
- if (best_score && !referrer) {
- vsctl_fatal("multiple rows in %s match \"%s\"",
- table->class->name, record_id);
- }
}
if (!referrer) {
return NULL;
}
static const struct ovsdb_idl_row *
-get_row__(struct vsctl_context *ctx,
- const struct vsctl_table_class *table, const char *record_id,
- bool partial_match_ok)
+get_row (struct vsctl_context *ctx,
+ const struct vsctl_table_class *table, const char *record_id)
{
const struct ovsdb_idl_row *row;
struct uuid uuid;
int i;
for (i = 0; i < ARRAY_SIZE(table->row_ids); i++) {
- row = get_row_by_id(ctx, table, &table->row_ids[i], record_id,
- partial_match_ok);
+ row = get_row_by_id(ctx, table, &table->row_ids[i], record_id);
if (row) {
break;
}
return row;
}
-static const struct ovsdb_idl_row *
-get_row(struct vsctl_context *ctx,
- const struct vsctl_table_class *table, const char *record_id)
-{
- return get_row__(ctx, table, record_id, true);
-}
-
static const struct ovsdb_idl_row *
must_get_row(struct vsctl_context *ctx,
const struct vsctl_table_class *table, const char *record_id)
table = get_table(table_name);
- row = get_row__(ctx, table, record_id, false);
+ row = get_row(ctx, table, record_id);
if (!row) {
ctx->try_again = true;
return;