summaryrefslogtreecommitdiff
path: root/ovn/utilities
diff options
context:
space:
mode:
authorHan Zhou <hzhou8@ebay.com>2019-04-12 16:26:25 -0700
committerBen Pfaff <blp@ovn.org>2019-04-15 12:54:43 -0700
commit3dcb9ce012601efbc1d8d97e25eebb52d0b921cf (patch)
treee87ddba637a130bcf7ec27b5ffbd3a80d5278f3d /ovn/utilities
parentd59050555cefa2a5345c6eb97b1d3e723c984d08 (diff)
downloadopenvswitch-3dcb9ce012601efbc1d8d97e25eebb52d0b921cf.tar.gz
ovn-nbctl: Support --no-shuffle-remotes.
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 <hzhou8@ebay.com> Signed-off-by: Ben Pfaff <blp@ovn.org>
Diffstat (limited to 'ovn/utilities')
-rw-r--r--ovn/utilities/ovn-nbctl.8.xml17
-rw-r--r--ovn/utilities/ovn-nbctl.c26
2 files changed, 41 insertions, 2 deletions
diff --git a/ovn/utilities/ovn-nbctl.8.xml b/ovn/utilities/ovn-nbctl.8.xml
index a7a9c2701..55c92f7e6 100644
--- a/ovn/utilities/ovn-nbctl.8.xml
+++ b/ovn/utilities/ovn-nbctl.8.xml
@@ -1142,6 +1142,23 @@
<code>Understanding Cluster Consistency</code> in <code>ovsdb</code>(7)
for more information.
</dd>
+
+ <dt><code>--shuffle-remotes</code></dt>
+ <dt><code>--no-shuffle-remotes</code></dt>
+ <dd>
+ By default, or with <code>--shuffle-remotes</code>, when there are
+ multiple remotes specified in the OVSDB connection string specified by
+ <code>--db</code> or the <env>OVN_NB_DB</env> 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 <code>--no-shuffle-remotes</code>,
+ <code>ovn-nbctl</code> 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.
+ </dd>
</dl>
<h2>Daemon Options</h2>
diff --git a/ovn/utilities/ovn-nbctl.c b/ovn/utilities/ovn-nbctl.c
index 2727b410a..e185b9dad 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