X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ovsdb%2Fovsdb-server.c;h=c9b0fdd951378d661ef9c15fc5e6fe40b9b7fb2c;hb=e1ce3f2dccb027ef5ebe6035ab4f6a71de4ccf1c;hp=9eb58ebf1fd758826fc98a67156912681a88e5cb;hpb=a4613b01abefdadf53dbf03025748fae3230eb68;p=openvswitch diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c index 9eb58ebf..c9b0fdd9 100644 --- a/ovsdb/ovsdb-server.c +++ b/ovsdb/ovsdb-server.c @@ -40,7 +40,7 @@ #include "stream-ssl.h" #include "stream.h" #include "stress.h" -#include "svec.h" +#include "sset.h" #include "table.h" #include "timeval.h" #include "transaction.h" @@ -64,15 +64,15 @@ static unixctl_cb_func ovsdb_server_compact; static unixctl_cb_func ovsdb_server_reconnect; static void parse_options(int argc, char *argv[], char **file_namep, - struct shash *remotes, char **unixctl_pathp, + struct sset *remotes, char **unixctl_pathp, char **run_command); static void usage(void) NO_RETURN; static void reconfigure_from_db(struct ovsdb_jsonrpc_server *jsonrpc, - const struct ovsdb *db, struct shash *remotes); + const struct ovsdb *db, struct sset *remotes); static void update_remote_status(const struct ovsdb_jsonrpc_server *jsonrpc, - const struct shash *remotes, + const struct sset *remotes, struct ovsdb *db); int @@ -82,7 +82,7 @@ main(int argc, char *argv[]) char *run_command = NULL; struct unixctl_server *unixctl; struct ovsdb_jsonrpc_server *jsonrpc; - struct shash remotes; + struct sset remotes; struct ovsdb_error *error; struct ovsdb_file *file; struct ovsdb *db; @@ -101,7 +101,6 @@ main(int argc, char *argv[]) parse_options(argc, argv, &file_name, &remotes, &unixctl_path, &run_command); - die_if_already_running(); daemonize_start(); error = ovsdb_file_open(file_name, false, &db, &file); @@ -171,7 +170,7 @@ main(int argc, char *argv[]) } ovsdb_jsonrpc_server_destroy(jsonrpc); ovsdb_destroy(db); - shash_destroy_free_data(&remotes); + sset_destroy(&remotes); unixctl_server_destroy(unixctl); if (run_process && process_exited(run_process)) { @@ -469,7 +468,7 @@ update_remote_row(const struct ovsdb_row *row, struct ovsdb_txn *txn, struct ovsdb_row *rw_row; const char *target; const struct ovsdb_jsonrpc_remote_status *status; - char *keys[3], *values[3]; + char *keys[4], *values[4]; size_t n = 0; /* Get the "target" (protocol/host/port) spec. */ @@ -495,9 +494,14 @@ update_remote_row(const struct ovsdb_row *row, struct ovsdb_txn *txn, keys[n] = xstrdup("state"); values[n++] = xstrdup(status->state); - keys[n] = xstrdup(status->is_connected ? "time_connected" - : "time_disconnected"); - values[n++] = xasprintf("%u", status->conn_secs); + if (status->sec_since_connect != UINT_MAX) { + keys[n] = xstrdup("sec_since_connect"); + values[n++] = xasprintf("%u", status->sec_since_connect); + } + if (status->sec_since_disconnect != UINT_MAX) { + keys[n] = xstrdup("sec_since_disconnect"); + values[n++] = xasprintf("%u", status->sec_since_disconnect); + } if (status->last_error) { keys[n] = xstrdup("last_error"); values[n++] = @@ -546,14 +550,14 @@ update_remote_rows(const struct ovsdb *db, struct ovsdb_txn *txn, static void update_remote_status(const struct ovsdb_jsonrpc_server *jsonrpc, - const struct shash *remotes, struct ovsdb *db) + const struct sset *remotes, struct ovsdb *db) { static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1); - struct shash_node *remote; struct shash statuses; struct ovsdb_txn *txn; const bool durable_txn = false; struct ovsdb_error *error; + const char *remote; /* Get status of current connections. */ ovsdb_jsonrpc_server_get_remote_status(jsonrpc, &statuses); @@ -561,8 +565,8 @@ update_remote_status(const struct ovsdb_jsonrpc_server *jsonrpc, txn = ovsdb_txn_create(db); /* Iterate over --remote arguments given on command line. */ - SHASH_FOR_EACH (remote, remotes) { - update_remote_rows(db, txn, remote->name, &statuses); + SSET_FOR_EACH (remote, remotes) { + update_remote_rows(db, txn, remote, &statuses); } error = ovsdb_txn_commit(txn, durable_txn); @@ -577,16 +581,14 @@ update_remote_status(const struct ovsdb_jsonrpc_server *jsonrpc, /* Reconfigures ovsdb-server based on information in the database. */ static void reconfigure_from_db(struct ovsdb_jsonrpc_server *jsonrpc, - const struct ovsdb *db, struct shash *remotes) + const struct ovsdb *db, struct sset *remotes) { struct shash resolved_remotes; - struct shash_node *node; + const char *name; /* Configure remotes. */ shash_init(&resolved_remotes); - SHASH_FOR_EACH (node, remotes) { - const char *name = node->name; - + SSET_FOR_EACH (name, remotes) { if (!strncmp(name, "db:", 3)) { query_db_remotes(name, db, &resolved_remotes); } else { @@ -647,7 +649,7 @@ ovsdb_server_reconnect(struct unixctl_conn *conn, const char *args OVS_UNUSED, static void parse_options(int argc, char *argv[], char **file_namep, - struct shash *remotes, char **unixctl_pathp, + struct sset *remotes, char **unixctl_pathp, char **run_command) { enum { @@ -679,7 +681,7 @@ parse_options(int argc, char *argv[], char **file_namep, }; char *short_options = long_options_to_short_options(long_options); - shash_init(remotes); + sset_init(remotes); for (;;) { int c; @@ -690,7 +692,7 @@ parse_options(int argc, char *argv[], char **file_namep, switch (c) { case OPT_REMOTE: - shash_add_once(remotes, optarg, NULL); + sset_add(remotes, optarg); break; case OPT_UNIXCTL: