From patchwork Mon Jan 1 05:16:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Pfaff X-Patchwork-Id: 854289 X-Patchwork-Delegate: jpettit@nicira.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3z95931tZ9z9t84 for ; Mon, 1 Jan 2018 16:19:35 +1100 (AEDT) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 87A8CCA0; Mon, 1 Jan 2018 05:16:59 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id A8DFEC96 for ; Mon, 1 Jan 2018 05:16:56 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net [217.70.183.194]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 1C2EC14B for ; Mon, 1 Jan 2018 05:16:56 +0000 (UTC) X-Originating-IP: 173.228.112.64 Received: from sigabrt.gateway.sonic.net (173-228-112-64.dsl.dynamic.fusionbroadband.com [173.228.112.64]) (Authenticated sender: blp@ovn.org) by relay2-d.mail.gandi.net (Postfix) with ESMTPSA id E0B4FC5A55; Mon, 1 Jan 2018 06:16:53 +0100 (CET) From: Ben Pfaff To: dev@openvswitch.org Date: Sun, 31 Dec 2017 21:16:31 -0800 Message-Id: <20180101051640.13043-6-blp@ovn.org> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20180101051640.13043-1-blp@ovn.org> References: <20180101051640.13043-1-blp@ovn.org> X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: Ben Pfaff Subject: [ovs-dev] [PATCH 06/15] jsonrpc-server: Separate changing read_only status from reconnecting. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org 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 Acked-by: Justin Pettit --- ovsdb/jsonrpc-server.c | 19 ++++++++++++++----- ovsdb/jsonrpc-server.h | 7 +++++-- ovsdb/ovsdb-server.c | 15 +++------------ 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/ovsdb/jsonrpc-server.c b/ovsdb/jsonrpc-server.c index 05e0d73ae0be..27586cddd8b3 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; @@ -349,12 +348,22 @@ ovsdb_jsonrpc_server_reconnect(struct ovsdb_jsonrpc_server *svr, bool read_only) } bool -ovsdb_jsonrpc_server_is_read_only(struct ovsdb_jsonrpc_server *svr) +ovsdb_jsonrpc_server_is_read_only(const struct ovsdb_jsonrpc_server *svr) { return svr->read_only; } void +ovsdb_jsonrpc_server_set_read_only(struct ovsdb_jsonrpc_server *svr, + bool read_only) +{ + if (svr->read_only != read_only) { + svr->read_only = read_only; + ovsdb_jsonrpc_server_reconnect(svr); + } +} + +void ovsdb_jsonrpc_server_run(struct ovsdb_jsonrpc_server *svr) { struct shash_node *node; diff --git a/ovsdb/jsonrpc-server.h b/ovsdb/jsonrpc-server.h index 1add3276d3b6..a3acc75f8d4f 100644 --- a/ovsdb/jsonrpc-server.h +++ b/ovsdb/jsonrpc-server.h @@ -64,11 +64,14 @@ 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 *); + +bool ovsdb_jsonrpc_server_is_read_only(const 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 7f2d19ef568b..1efb5552da5a 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); }