diff options
author | Ben Pfaff <blp@ovn.org> | 2018-01-22 11:22:57 -0800 |
---|---|---|
committer | Ben Pfaff <blp@ovn.org> | 2018-03-24 12:04:51 -0700 |
commit | 077f03028bbea3073c362b146a0891bf5040ca15 (patch) | |
tree | 2338d3ce670563e1a79f8d637fa063abd9b73034 /ovsdb | |
parent | 009bf21fdd3554065f4f546d48bf32e6aa7bf309 (diff) | |
download | openvswitch-077f03028bbea3073c362b146a0891bf5040ca15.tar.gz |
jsonrpc-server: Separate changing read_only status from reconnecting.
The code in jsonrpc-server conflated two different kinds of functionality.
It makes sense for the client to be able to change whether a particular
server is read-only. It also makes sense for the client to tell a server
to reconnect. The code in jsonrpc-server only provided a single function
that does both, which is weird. This commit breaks these apart.
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Justin Pettit <jpettit@ovn.org>
Diffstat (limited to 'ovsdb')
-rw-r--r-- | ovsdb/jsonrpc-server.c | 17 | ||||
-rw-r--r-- | ovsdb/jsonrpc-server.h | 6 | ||||
-rw-r--r-- | ovsdb/ovsdb-server.c | 15 |
3 files changed, 17 insertions, 21 deletions
diff --git a/ovsdb/jsonrpc-server.c b/ovsdb/jsonrpc-server.c index 05e0d73ae..75ff98f78 100644 --- a/ovsdb/jsonrpc-server.c +++ b/ovsdb/jsonrpc-server.c @@ -165,7 +165,7 @@ ovsdb_jsonrpc_server_add_db(struct ovsdb_jsonrpc_server *svr, struct ovsdb *db) * If this is too big of a hammer in practice, we could be more selective, * e.g. disconnect only connections that actually tried to use a database * with 'db''s name. */ - ovsdb_jsonrpc_server_reconnect(svr, svr->read_only); + ovsdb_jsonrpc_server_reconnect(svr); return ovsdb_server_add_db(&svr->up, db); } @@ -182,7 +182,7 @@ ovsdb_jsonrpc_server_remove_db(struct ovsdb_jsonrpc_server *svr, * * If this is too big of a hammer in practice, we could be more selective, * e.g. disconnect only connections that actually reference 'db'. */ - ovsdb_jsonrpc_server_reconnect(svr, svr->read_only); + ovsdb_jsonrpc_server_reconnect(svr); return ovsdb_server_remove_db(&svr->up, db); } @@ -336,11 +336,10 @@ ovsdb_jsonrpc_server_free_remote_status( /* Forces all of the JSON-RPC sessions managed by 'svr' to disconnect and * reconnect. */ void -ovsdb_jsonrpc_server_reconnect(struct ovsdb_jsonrpc_server *svr, bool read_only) +ovsdb_jsonrpc_server_reconnect(struct ovsdb_jsonrpc_server *svr) { struct shash_node *node; - svr->read_only = read_only; SHASH_FOR_EACH (node, &svr->remotes) { struct ovsdb_jsonrpc_remote *remote = node->data; @@ -348,10 +347,14 @@ ovsdb_jsonrpc_server_reconnect(struct ovsdb_jsonrpc_server *svr, bool read_only) } } -bool -ovsdb_jsonrpc_server_is_read_only(struct ovsdb_jsonrpc_server *svr) +void +ovsdb_jsonrpc_server_set_read_only(struct ovsdb_jsonrpc_server *svr, + bool read_only) { - return svr->read_only; + if (svr->read_only != read_only) { + svr->read_only = read_only; + ovsdb_jsonrpc_server_reconnect(svr); + } } void diff --git a/ovsdb/jsonrpc-server.h b/ovsdb/jsonrpc-server.h index 1add3276d..2be4bbc01 100644 --- a/ovsdb/jsonrpc-server.h +++ b/ovsdb/jsonrpc-server.h @@ -64,11 +64,13 @@ bool ovsdb_jsonrpc_server_get_remote_status( void ovsdb_jsonrpc_server_free_remote_status( struct ovsdb_jsonrpc_remote_status *); -void ovsdb_jsonrpc_server_reconnect(struct ovsdb_jsonrpc_server *, bool read_only); +void ovsdb_jsonrpc_server_reconnect(struct ovsdb_jsonrpc_server *); void ovsdb_jsonrpc_server_run(struct ovsdb_jsonrpc_server *); void ovsdb_jsonrpc_server_wait(struct ovsdb_jsonrpc_server *); -bool ovsdb_jsonrpc_server_is_read_only(struct ovsdb_jsonrpc_server *); + +void ovsdb_jsonrpc_server_set_read_only(struct ovsdb_jsonrpc_server *, + bool read_only); void ovsdb_jsonrpc_server_get_memory_usage(const struct ovsdb_jsonrpc_server *, struct simap *usage); diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c index 3ac7bf472..3d330f99e 100644 --- a/ovsdb/ovsdb-server.c +++ b/ovsdb/ovsdb-server.c @@ -156,7 +156,6 @@ main_loop(struct ovsdb_jsonrpc_server *jsonrpc, struct shash *all_dbs, char *remotes_error, *ssl_error; struct shash_node *node; long long int status_timer = LLONG_MIN; - bool last_role = *is_backup; *exiting = false; ssl_error = NULL; @@ -182,12 +181,7 @@ main_loop(struct ovsdb_jsonrpc_server *jsonrpc, struct shash *all_dbs, * the set of remotes that reconfigure_remotes() uses. */ unixctl_server_run(unixctl); - /* In ovsdb-server's role (active or backup) has changed, restart - * the ovsdb jsonrpc server. */ - if (last_role != *is_backup) { - bool read_only = last_role = *is_backup; - ovsdb_jsonrpc_server_reconnect(jsonrpc, read_only); - } + ovsdb_jsonrpc_server_set_read_only(jsonrpc, *is_backup); report_error_if_changed( reconfigure_remotes(jsonrpc, all_dbs, remotes), @@ -1125,10 +1119,9 @@ ovsdb_server_disable_monitor_cond(struct unixctl_conn *conn, void *jsonrpc_) { struct ovsdb_jsonrpc_server *jsonrpc = jsonrpc_; - bool read_only = ovsdb_jsonrpc_server_is_read_only(jsonrpc); ovsdb_jsonrpc_disable_monitor_cond(); - ovsdb_jsonrpc_server_reconnect(jsonrpc, read_only); + ovsdb_jsonrpc_server_reconnect(jsonrpc); unixctl_command_reply(conn, NULL); } @@ -1186,9 +1179,7 @@ ovsdb_server_reconnect(struct unixctl_conn *conn, int argc OVS_UNUSED, const char *argv[] OVS_UNUSED, void *jsonrpc_) { struct ovsdb_jsonrpc_server *jsonrpc = jsonrpc_; - bool read_only = ovsdb_jsonrpc_server_is_read_only(jsonrpc); - - ovsdb_jsonrpc_server_reconnect(jsonrpc, read_only); + ovsdb_jsonrpc_server_reconnect(jsonrpc); unixctl_command_reply(conn, NULL); } |