From patchwork Fri Apr 12 23:26:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Han Zhou X-Patchwork-Id: 1084990 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=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="QdPN+r4K"; dkim-atps=neutral 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 44gvGg6WVMz9s6w for ; Sat, 13 Apr 2019 09:28:43 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id EF51418E5; Fri, 12 Apr 2019 23:26:31 +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 3B58218C8 for ; Fri, 12 Apr 2019 23:26:28 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-pg1-f196.google.com (mail-pg1-f196.google.com [209.85.215.196]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id B580976D for ; Fri, 12 Apr 2019 23:26:27 +0000 (UTC) Received: by mail-pg1-f196.google.com with SMTP id q1so5864998pgv.13 for ; Fri, 12 Apr 2019 16:26:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=3P/EPLQGysGr7T+GsJD5L6ZQup+48EUGje2hdWU3FhY=; b=QdPN+r4KzLPl4nJM1Ps8Khp8RSkpzlPFrrzxjSi1rs4E89zXUVOAfERxvNvBSmv8Pr 9R/fV+BD5B54FCJ0Pf1ZSnwT2w5a4+ac15F1PcS+gbPI+RCiI6CJxTC+cgar4lLqUekf 3X4ZXplu21NP8kFjomMksFcuMrYDT6n25BGWKwwNNm4UEf1tbHp+698U8t+HsMRkaWuD Bw9xvIqPWMxjnzU62W+jxTGM7n1++U344mVCbn7zfMURFpMP98c60F899mKido4PgPu+ 5/SPeH3Z8gPXHBp7d3wGu0AGr3weRNx4PWqaKJVcUnOx9gBXB+K291quNaFekIF6ltav BzkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=3P/EPLQGysGr7T+GsJD5L6ZQup+48EUGje2hdWU3FhY=; b=tCtjidtwHupDeIa3tfKaZjlZ5m2cRz/S8vCpXwL+Ig8wRYSkzw6js9t3xUibJR3sxl 1kSgygA0GG8N46iquaWV9TlT4g3i2FHEVy9oJO8W0XUYWYfNK9wG83b1wlMQCBohF/Ah 25ksnW0DvWw2Z2agjpU6BM4HfUKsoni/YFpqwfXRr/4M5jDCVdRdiPmIc9Axm3Hqx/wJ dbszVXsKsrs2posaC3ppp2ypyMnf/w9r071gV+5vq9T4hohCYtzg/m42d7pcF22obv3F vzO3YL9h2UNek4lqSlHl616fnyCNW6aN1B6kPA6QyE5GyWFPEFJAFaDeXiEEVNSYoBU9 aanA== X-Gm-Message-State: APjAAAUa7vOZmlx9q+obrkPLLF3PCMKHMMx5Qw2BpQbs7D1wASvkPsA8 tyv+fs3d03+naJYt+ye9SuT0E1Nx X-Google-Smtp-Source: APXvYqxk2+tsdk56jqgUGWB4QvDA5hh76QtqRQQq2gyveNGJwIHEUvjM+2xUjHiFSIGCTwQz3PKJGA== X-Received: by 2002:a63:ff26:: with SMTP id k38mr56031712pgi.123.1555111587127; Fri, 12 Apr 2019 16:26:27 -0700 (PDT) Received: from localhost.localdomain.localdomain ([216.113.160.77]) by smtp.gmail.com with ESMTPSA id o68sm105570138pfi.140.2019.04.12.16.26.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 12 Apr 2019 16:26:26 -0700 (PDT) From: Han Zhou X-Google-Original-From: Han Zhou To: dev@openvswitch.org Date: Fri, 12 Apr 2019 16:26:25 -0700 Message-Id: <1555111588-79659-6-git-send-email-hzhou8@ebay.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1555111588-79659-1-git-send-email-hzhou8@ebay.com> References: <1555111588-79659-1-git-send-email-hzhou8@ebay.com> X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Subject: [ovs-dev] [PATCH v2 6/9] ovn-nbctl: Support --no-shuffle-remotes. 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 From: Han Zhou Support --no-shuffle-remotes option for ovn-nbctl, which is mainly for testing purpose, so that we can specify the order that client will failover when the connected node is down, to have more predictability in the test cases. Signed-off-by: Han Zhou --- ovn/utilities/ovn-nbctl.8.xml | 17 +++++++++++++++++ ovn/utilities/ovn-nbctl.c | 26 ++++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/ovn/utilities/ovn-nbctl.8.xml b/ovn/utilities/ovn-nbctl.8.xml index a7a9c27..55c92f7 100644 --- a/ovn/utilities/ovn-nbctl.8.xml +++ b/ovn/utilities/ovn-nbctl.8.xml @@ -1142,6 +1142,23 @@ Understanding Cluster Consistency in ovsdb(7) for more information. + +
--shuffle-remotes
+
--no-shuffle-remotes
+
+ By default, or with --shuffle-remotes, when there are + multiple remotes specified in the OVSDB connection string specified by + --db or the OVN_NB_DB environment variable, + the order of the remotes will be shuffled before the client tries to + connect. The remotes will be shuffled only once to a new order before + the first connection attempt. The following retries, if any, will + follow the same new order. The default behavior is to make sure + clients of a clustered database can distribute evenly to all memembers + of the cluster. With --no-shuffle-remotes, + ovn-nbctl will use the original order specified in the + connection string to connect. This allows user to specify the + preferred order, which is particularly useful for testing. +

Daemon Options

diff --git a/ovn/utilities/ovn-nbctl.c b/ovn/utilities/ovn-nbctl.c index 2727b41..e185b9d 100644 --- a/ovn/utilities/ovn-nbctl.c +++ b/ovn/utilities/ovn-nbctl.c @@ -83,6 +83,10 @@ OVS_NO_RETURN static void nbctl_exit(int status); /* --leader-only, --no-leader-only: Only accept the leader in a cluster. */ static int leader_only = true; +/* --shuffle-remotes, --no-shuffle-remotes: Shuffle the order of remotes that + * are specified in the connetion method string. */ +static int shuffle_remotes = true; + /* --unixctl-path: Path to use for unixctl server, for "monitor" and "snoop" commands. */ static char *unixctl_path; @@ -182,8 +186,11 @@ main(int argc, char *argv[]) } daemon_mode = true; } - /* Initialize IDL. "retry" is true iff in daemon mode. */ - idl = the_idl = ovsdb_idl_create(db, &nbrec_idl_class, true, daemon_mode); + /* Initialize IDL. */ + idl = the_idl = ovsdb_idl_create_unconnected(&nbrec_idl_class, true); + ovsdb_idl_set_shuffle_remotes(idl, shuffle_remotes); + /* "retry" is true iff in daemon mode. */ + ovsdb_idl_set_remote(idl, db, daemon_mode); ovsdb_idl_set_leader_only(idl, leader_only); if (daemon_mode) { @@ -304,6 +311,8 @@ enum { OPT_OPTIONS, OPT_LEADER_ONLY, OPT_NO_LEADER_ONLY, + OPT_SHUFFLE_REMOTES, + OPT_NO_SHUFFLE_REMOTES, OPT_BOOTSTRAP_CA_CERT, MAIN_LOOP_OPTION_ENUMS, DAEMON_OPTION_ENUMS, @@ -405,6 +414,8 @@ get_all_options(void) {"options", no_argument, NULL, OPT_OPTIONS}, {"leader-only", no_argument, NULL, OPT_LEADER_ONLY}, {"no-leader-only", no_argument, NULL, OPT_NO_LEADER_ONLY}, + {"shuffle-remotes", no_argument, NULL, OPT_SHUFFLE_REMOTES}, + {"no-shuffle-remotes", no_argument, NULL, OPT_NO_SHUFFLE_REMOTES}, {"version", no_argument, NULL, 'V'}, MAIN_LOOP_LONG_OPTIONS, DAEMON_LONG_OPTIONS, @@ -509,6 +520,14 @@ apply_options_direct(const struct ovs_cmdl_parsed_option *parsed_options, leader_only = false; break; + case OPT_SHUFFLE_REMOTES: + shuffle_remotes = true; + break; + + case OPT_NO_SHUFFLE_REMOTES: + shuffle_remotes = false; + break; + case 'V': ovs_print_version(0, 0); printf("DB Schema %s\n", nbrec_get_db_version()); @@ -705,6 +724,7 @@ Options:\n\ (default: %s)\n\ --no-wait, --wait=none do not wait for OVN reconfiguration (default)\n\ --no-leader-only accept any cluster member, not just the leader\n\ + --no-shuffle-remotes do not shuffle the order of remotes\n\ --wait=sb wait for southbound database update\n\ --wait=hv wait for all chassis to catch up\n\ -t, --timeout=SECS wait at most SECS seconds\n\ @@ -5532,6 +5552,8 @@ nbctl_client(const char *socket_name, case OPT_LEADER_ONLY: case OPT_NO_LEADER_ONLY: + case OPT_SHUFFLE_REMOTES: + case OPT_NO_SHUFFLE_REMOTES: case OPT_BOOTSTRAP_CA_CERT: STREAM_SSL_CASES DAEMON_OPTION_CASES