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>
* 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);
}
*
* 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);
}
/* 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;
}
}
-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
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);
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;
* 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),
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);
}
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);
}