mirror of
https://github.com/openvswitch/ovs
synced 2025-08-22 01:51:26 +00:00
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>
This commit is contained in:
parent
009bf21fdd
commit
077f03028b
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user