From: Huang Lei <lhua...@ebay.com> For setting the inactivity probe interval of the json session to the OVN southbound database.
Signed-off-by: Huang Lei <lhua...@ebay.com> --- lib/jsonrpc.c | 4 +++- lib/ovsdb-idl.c | 10 ++++++++++ lib/ovsdb-idl.h | 4 ++++ ovn/controller/ovn-controller.8.xml | 14 ++++++++++++++ ovn/controller/ovn-controller.c | 33 +++++++++++++++++++++++++++++++++ 5 files changed, 64 insertions(+), 1 deletion(-) diff --git a/lib/jsonrpc.c b/lib/jsonrpc.c index 35428a6..0985d52 100644 --- a/lib/jsonrpc.c +++ b/lib/jsonrpc.c @@ -1147,7 +1147,9 @@ void jsonrpc_session_set_probe_interval(struct jsonrpc_session *s, int probe_interval) { - reconnect_set_probe_interval(s->reconnect, probe_interval); + if (stream_or_pstream_needs_probes(reconnect_get_name(s->reconnect))) { + reconnect_set_probe_interval(s->reconnect, probe_interval); + } } /* Sets the DSCP value used for 's''s connection to 'dscp'. If this is diff --git a/lib/ovsdb-idl.c b/lib/ovsdb-idl.c index 4cb1c81..022f0cf 100644 --- a/lib/ovsdb-idl.c +++ b/lib/ovsdb-idl.c @@ -565,6 +565,16 @@ ovsdb_idl_get_last_error(const struct ovsdb_idl *idl) { return jsonrpc_session_get_last_error(idl->session); } + +/* Sets the "probe interval" for 'idl->session' to 'probe_interval', in + * milliseconds. + */ +void +ovsdb_idl_set_probe_interval(const struct ovsdb_idl *idl, int probe_interval) +{ + jsonrpc_session_set_probe_interval(idl->session, probe_interval); +} + static unsigned char * ovsdb_idl_get_mode(struct ovsdb_idl *idl, diff --git a/lib/ovsdb-idl.h b/lib/ovsdb-idl.h index 136c38c..96d9436 100644 --- a/lib/ovsdb-idl.h +++ b/lib/ovsdb-idl.h @@ -68,7 +68,11 @@ void ovsdb_idl_verify_write_only(struct ovsdb_idl *); bool ovsdb_idl_is_alive(const struct ovsdb_idl *); int ovsdb_idl_get_last_error(const struct ovsdb_idl *); + +void ovsdb_idl_set_probe_interval(const struct ovsdb_idl *, int probe_interval); + + /* Choosing columns and tables to replicate. */ /* Modes with which the IDL can monitor a column. diff --git a/ovn/controller/ovn-controller.8.xml b/ovn/controller/ovn-controller.8.xml index b261af9..6e57fc6 100644 --- a/ovn/controller/ovn-controller.8.xml +++ b/ovn/controller/ovn-controller.8.xml @@ -100,6 +100,20 @@ </p> </dd> + <dt><code>external_ids:ovn-remote-probe-interval</code></dt> + <dd> + <p> + The inactivity probe interval of the connection to the OVN database, + in milliseconds. + If the value is zero, it disables the connection keepalive feature. + </p> + + <p> + If the value is nonzero, then it will be forced to a value of + at least 1000 ms. + </p> + </dd> + <dt><code>external_ids:ovn-encap-type</code></dt> <dd> <p> diff --git a/ovn/controller/ovn-controller.c b/ovn/controller/ovn-controller.c index 3638342..7a1b966 100644 --- a/ovn/controller/ovn-controller.c +++ b/ovn/controller/ovn-controller.c @@ -34,7 +34,9 @@ #include "poll-loop.h" #include "fatal-signal.h" #include "lib/hmap.h" +#include "lib/ovsdb-idl.h" #include "lib/vswitch-idl.h" +#include "lib/util.h" #include "smap.h" #include "stream.h" #include "stream-ssl.h" @@ -198,6 +200,32 @@ get_ovnsb_remote(struct ovsdb_idl *ovs_idl) } } +/* Retrieves the OVN Southbound remote's json session probe interval from the + * "external-ids:ovn-remote-probe-interval" key in 'ovs_idl' and returns it. + * + * This function must be called after get_ovnsb_remote(). + * + */ +static bool +get_ovnsb_remote_probe_interval(struct ovsdb_idl *ovs_idl, int * value) +{ + const struct ovsrec_open_vswitch *cfg = ovsrec_open_vswitch_first(ovs_idl); + if (cfg) { + const char * probe_interval = + smap_get(&cfg->external_ids, "ovn-remote-probe-interval"); + if (probe_interval) { + if (str_to_int(probe_interval, 10, value)) + { + VLOG_INFO("OVN OVSDB remote probe interval is %d ms", *value); + return true; + } + } + } + + return false; +} + + int main(int argc, char *argv[]) { @@ -261,6 +289,11 @@ main(int argc, char *argv[]) ovsdb_idl_create(ovnsb_remote, &sbrec_idl_class, true, true)); ovsdb_idl_get_initial_snapshot(ovnsb_idl_loop.idl); + int probe_interval = 0; + if (get_ovnsb_remote_probe_interval(ovs_idl_loop.idl, &probe_interval)) { + ovsdb_idl_set_probe_interval(ovnsb_idl_loop.idl, probe_interval); + } + /* Initialize connection tracking zones. */ struct simap ct_zones = SIMAP_INITIALIZER(&ct_zones); unsigned long ct_zone_bitmap[BITMAP_N_LONGS(MAX_CT_ZONES)]; -- 2.5.4 (Apple Git-61) _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev