X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=utilities%2Fovs-vsctl.c;h=c563eee65f8366eb5fa5c43112f436071c6e5913;hb=3754832be4195ef5c01ba2af2e4b50b6f8df91bd;hp=e679e0d8db4cc57d21b9cc7c1ea7910c7a66255e;hpb=25a27ba07c1acbda03c3ff08bf78e2921b48c90b;p=sliver-openvswitch.git diff --git a/utilities/ovs-vsctl.c b/utilities/ovs-vsctl.c index e679e0d8d..c563eee65 100644 --- a/utilities/ovs-vsctl.c +++ b/utilities/ovs-vsctl.c @@ -128,7 +128,7 @@ static bool retry; static struct table_style table_style = TABLE_STYLE_DEFAULT; /* All supported commands. */ -static const struct vsctl_command_syntax all_commands[]; +static const struct vsctl_command_syntax *get_all_commands(void); /* The IDL we're using and the current transaction, if any. * This is for use by vsctl_exit() only, to allow it to clean up. @@ -302,7 +302,7 @@ parse_options(int argc, char *argv[], struct shash *local_options) options = xmemdup(global_long_options, sizeof global_long_options); allocated_options = ARRAY_SIZE(global_long_options); n_options = n_global_long_options; - for (p = all_commands; p->name; p++) { + for (p = get_all_commands(); p->name; p++) { if (p->options[0]) { char *save_ptr = NULL; char *name; @@ -568,7 +568,7 @@ find_command(const char *name) if (shash_is_empty(&commands)) { const struct vsctl_command_syntax *p; - for (p = all_commands; p->name; p++) { + for (p = get_all_commands(); p->name; p++) { shash_add_assert(&commands, p->name, p); } } @@ -3352,6 +3352,7 @@ set_column(const struct vsctl_table_class *table, ovsdb_datum_union(&datum, ovsdb_idl_read(row, column), &column->type, false); + ovsdb_idl_txn_verify(row, column); ovsdb_idl_txn_write(row, column, &datum); } else { struct ovsdb_datum datum; @@ -3630,7 +3631,7 @@ post_create(struct vsctl_context *ctx) struct uuid dummy; if (!uuid_from_string(&dummy, ds_cstr(&ctx->output))) { - NOT_REACHED(); + OVS_NOT_REACHED(); } real = ovsdb_idl_txn_get_insert_uuid(ctx->txn, &dummy); if (real) { @@ -3748,7 +3749,7 @@ evaluate_relop(const struct ovsdb_datum *a, const struct ovsdb_datum *b, return ovsdb_datum_includes_all(b, a, type); default: - NOT_REACHED(); + OVS_NOT_REACHED(); } } @@ -4058,7 +4059,7 @@ do_vsctl(const char *args, struct vsctl_command *commands, size_t n_commands, switch (status) { case TXN_UNCOMMITTED: case TXN_INCOMPLETE: - NOT_REACHED(); + OVS_NOT_REACHED(); case TXN_ABORTED: /* Should not happen--we never call ovsdb_idl_txn_abort(). */ @@ -4079,7 +4080,7 @@ do_vsctl(const char *args, struct vsctl_command *commands, size_t n_commands, vsctl_fatal("database not locked"); default: - NOT_REACHED(); + OVS_NOT_REACHED(); } free(error); @@ -4122,6 +4123,11 @@ do_vsctl(const char *args, struct vsctl_command *commands, size_t n_commands, free(commands); if (wait_for_reload && status != TXN_UNCHANGED) { + /* Even, if --retry flag was not specified, ovs-vsctl still + * has to retry to establish OVSDB connection, if wait_for_reload + * was set. Otherwise, ovs-vsctl would end up waiting forever + * until cur_cfg would be updated. */ + ovsdb_idl_enable_reconnect(idl); for (;;) { ovsdb_idl_run(idl); OVSREC_OPEN_VSWITCH_FOR_EACH (ovs, idl) { @@ -4228,3 +4234,7 @@ static const struct vsctl_command_syntax all_commands[] = { {NULL, 0, 0, NULL, NULL, NULL, NULL, RO}, }; +static const struct vsctl_command_syntax *get_all_commands(void) +{ + return all_commands; +}