X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ovsdb%2Fovsdb-server.c;h=c9b0fdd951378d661ef9c15fc5e6fe40b9b7fb2c;hb=b0387df4e0ac796af05765834bb6e7750b8b6ae6;hp=fac78c80785c02472bd8a5e38dc425a6fe621ca5;hpb=88b649747b690a899f9aae78de6f16690fac1a0c;p=openvswitch diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c index fac78c80..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,8 +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("time_in_state"); - values[n++] = xasprintf("%u", status->state_elapsed); + 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++] = @@ -545,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); @@ -560,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); @@ -576,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 { @@ -646,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 { @@ -678,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; @@ -689,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: