On Fri, Dec 13, 2019 at 2:23 PM Dumitru Ceara <[email protected]> wrote: > > On Fri, Dec 13, 2019 at 11:37 AM <[email protected]> wrote: > > > > From: Numan Siddique <[email protected]> > > > > When ovsdb-server is in backup mode and connects to the active > > ovsdb-server for replication, and if takes more than 5 seconds to > > get the dump of the whole database, it will drop the connection > > soon after as the default probe interval is 5 seconds. This > > results in a snowball effect of reconnections to the active > > ovsdb-server. > > > > This patch handles or mitigates this issue by setting the > > default probe interval value to 60 seconds and provide the option to > > configure this value from the unixctl command. > > > > Other option could be increase the value of > > 'RECONNECT_DEFAULT_PROBE_INTERVAL' > > to a higher value. > > Numan, sorry, I missed this the first time around. Could you also > please document the new command in ovsdb-server.in.1? >
Thanks Dumitru. My bad for missing this. I submitted v3 addressing this. Thanks Numan > Thanks, > Dumitru > > > > > Acked-by: Mark Michelson <[email protected]> > > Signed-off-by: Numan Siddique <[email protected]> > > --- > > ovsdb/ovsdb-server.c | 46 +++++++++++++++++++++++++++++++++++++------- > > ovsdb/replication.c | 4 +++- > > ovsdb/replication.h | 4 +++- > > 3 files changed, 45 insertions(+), 9 deletions(-) > > > > diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c > > index 9827320ec..4ffe24ad7 100644 > > --- a/ovsdb/ovsdb-server.c > > +++ b/ovsdb/ovsdb-server.c > > @@ -86,6 +86,7 @@ static unixctl_cb_func > > ovsdb_server_set_active_ovsdb_server; > > static unixctl_cb_func ovsdb_server_get_active_ovsdb_server; > > static unixctl_cb_func ovsdb_server_connect_active_ovsdb_server; > > static unixctl_cb_func ovsdb_server_disconnect_active_ovsdb_server; > > +static unixctl_cb_func ovsdb_server_set_active_ovsdb_server_probe_interval; > > static unixctl_cb_func ovsdb_server_set_sync_exclude_tables; > > static unixctl_cb_func ovsdb_server_get_sync_exclude_tables; > > static unixctl_cb_func ovsdb_server_get_sync_status; > > @@ -97,6 +98,7 @@ struct server_config { > > char **sync_from; > > char **sync_exclude; > > bool *is_backup; > > + int *replication_probe_interval; > > struct ovsdb_jsonrpc_server *jsonrpc; > > }; > > static unixctl_cb_func ovsdb_server_add_remote; > > @@ -144,9 +146,10 @@ static void load_config(FILE *config_file, struct sset > > *remotes, > > > > static void > > ovsdb_replication_init(const char *sync_from, const char *exclude, > > - struct shash *all_dbs, const struct uuid > > *server_uuid) > > + struct shash *all_dbs, const struct uuid > > *server_uuid, > > + int probe_interval) > > { > > - replication_init(sync_from, exclude, server_uuid); > > + replication_init(sync_from, exclude, server_uuid, probe_interval); > > struct shash_node *node; > > SHASH_FOR_EACH (node, all_dbs) { > > struct db *db = node->data; > > @@ -304,6 +307,7 @@ main(int argc, char *argv[]) > > struct server_config server_config; > > struct shash all_dbs; > > struct shash_node *node, *next; > > + int replication_probe_interval = REPLICATION_DEFAULT_PROBE_INTERVAL; > > > > ovs_cmdl_proctitle_init(argc, argv); > > set_program_name(argv[0]); > > @@ -351,6 +355,7 @@ main(int argc, char *argv[]) > > server_config.sync_from = &sync_from; > > server_config.sync_exclude = &sync_exclude; > > server_config.is_backup = &is_backup; > > + server_config.replication_probe_interval = &replication_probe_interval; > > > > perf_counters_init(); > > > > @@ -436,6 +441,9 @@ main(int argc, char *argv[]) > > > > unixctl_command_register("ovsdb-server/disconnect-active-ovsdb-server", "", > > 0, 0, > > ovsdb_server_disconnect_active_ovsdb_server, > > &server_config); > > + unixctl_command_register( > > + "ovsdb-server/set-active-ovsdb-server-probe-interval", "", 1, 1, > > + ovsdb_server_set_active_ovsdb_server_probe_interval, > > &server_config); > > unixctl_command_register("ovsdb-server/set-sync-exclude-tables", "", > > 0, 1, ovsdb_server_set_sync_exclude_tables, > > &server_config); > > @@ -454,7 +462,8 @@ main(int argc, char *argv[]) > > if (is_backup) { > > const struct uuid *server_uuid; > > server_uuid = ovsdb_jsonrpc_server_get_uuid(jsonrpc); > > - ovsdb_replication_init(sync_from, sync_exclude, &all_dbs, > > server_uuid); > > + ovsdb_replication_init(sync_from, sync_exclude, &all_dbs, > > server_uuid, > > + replication_probe_interval); > > } > > > > main_loop(&server_config, jsonrpc, &all_dbs, unixctl, &remotes, > > @@ -1317,7 +1326,8 @@ ovsdb_server_connect_active_ovsdb_server(struct > > unixctl_conn *conn, > > const struct uuid *server_uuid; > > server_uuid = ovsdb_jsonrpc_server_get_uuid(config->jsonrpc); > > ovsdb_replication_init(*config->sync_from, *config->sync_exclude, > > - config->all_dbs, server_uuid); > > + config->all_dbs, server_uuid, > > + *config->replication_probe_interval); > > if (!*config->is_backup) { > > *config->is_backup = true; > > save_config(config); > > @@ -1340,6 +1350,25 @@ ovsdb_server_disconnect_active_ovsdb_server(struct > > unixctl_conn *conn, > > unixctl_command_reply(conn, NULL); > > } > > > > +static void > > +ovsdb_server_set_active_ovsdb_server_probe_interval(struct unixctl_conn > > *conn, > > + int argc OVS_UNUSED, > > + const char *argv[], > > + void *config_) > > +{ > > + struct server_config *config = config_; > > + > > + int probe_interval; > > + if (str_to_int(argv[1], 10, &probe_interval)) { > > + *config->replication_probe_interval = probe_interval; > > + save_config(config); > > + unixctl_command_reply(conn, NULL); > > + } else { > > + unixctl_command_reply( > > + conn, "Invalid probe interval, integer value expected"); > > + } > > +} > > + > > static void > > ovsdb_server_set_sync_exclude_tables(struct unixctl_conn *conn, > > int argc OVS_UNUSED, > > @@ -1357,7 +1386,8 @@ ovsdb_server_set_sync_exclude_tables(struct > > unixctl_conn *conn, > > const struct uuid *server_uuid; > > server_uuid = ovsdb_jsonrpc_server_get_uuid(config->jsonrpc); > > ovsdb_replication_init(*config->sync_from, > > *config->sync_exclude, > > - config->all_dbs, server_uuid); > > + config->all_dbs, server_uuid, > > + *config->replication_probe_interval); > > } > > err = set_blacklist_tables(argv[1], false); > > } > > @@ -1568,7 +1598,8 @@ ovsdb_server_add_database(struct unixctl_conn *conn, > > int argc OVS_UNUSED, > > const struct uuid *server_uuid; > > server_uuid = ovsdb_jsonrpc_server_get_uuid(config->jsonrpc); > > ovsdb_replication_init(*config->sync_from, > > *config->sync_exclude, > > - config->all_dbs, server_uuid); > > + config->all_dbs, server_uuid, > > + *config->replication_probe_interval); > > } > > unixctl_command_reply(conn, NULL); > > } else { > > @@ -1590,7 +1621,8 @@ remove_db(struct server_config *config, struct > > shash_node *node, char *comment) > > const struct uuid *server_uuid; > > server_uuid = ovsdb_jsonrpc_server_get_uuid(config->jsonrpc); > > ovsdb_replication_init(*config->sync_from, *config->sync_exclude, > > - config->all_dbs, server_uuid); > > + config->all_dbs, server_uuid, > > + *config->replication_probe_interval); > > } > > } > > > > diff --git a/ovsdb/replication.c b/ovsdb/replication.c > > index 42e27cba0..d5aee77c4 100644 > > --- a/ovsdb/replication.c > > +++ b/ovsdb/replication.c > > @@ -125,7 +125,7 @@ static struct replication_db *find_db(const char > > *db_name); > > > > void > > replication_init(const char *sync_from_, const char *exclude_tables, > > - const struct uuid *server) > > + const struct uuid *server, int probe_interval) > > { > > free(sync_from); > > sync_from = xstrdup(sync_from_); > > @@ -143,6 +143,8 @@ replication_init(const char *sync_from_, const char > > *exclude_tables, > > session = jsonrpc_session_open(sync_from, true); > > session_seqno = UINT_MAX; > > > > + jsonrpc_session_set_probe_interval(session, probe_interval); > > + > > /* Keep a copy of local server uuid. */ > > server_uuid = *server; > > > > diff --git a/ovsdb/replication.h b/ovsdb/replication.h > > index 1f9c32fa7..c74805014 100644 > > --- a/ovsdb/replication.h > > +++ b/ovsdb/replication.h > > @@ -44,8 +44,10 @@ struct ovsdb; > > * used mainly by uinxctl commands. > > */ > > > > +#define REPLICATION_DEFAULT_PROBE_INTERVAL 60000 > > + > > void replication_init(const char *sync_from, const char *exclude_tables, > > - const struct uuid *server); > > + const struct uuid *server, int probe_interval); > > void replication_run(void); > > void replication_wait(void); > > void replication_destroy(void); > > -- > > 2.21.0 > > > > _______________________________________________ > > dev mailing list > > [email protected] > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > > > > _______________________________________________ > dev mailing list > [email protected] > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
