From a4927e36ff8fa079338374c61dcae60c5efcff54 Mon Sep 17 00:00:00 2001 From: Huang Lei Date: Fri, 25 Mar 2016 02:18:34 +0800 Subject: [PATCH] ovn-controller: Add external-id 'ovn-remote-probe-interval' Add a external-id 'ovn-remote-probe-interval' for setting the activity probe interval of the json session from ovn-controller to the OVN southbound database. Signed-off-by: Huang Lei Signed-off-by: Ben Pfaff --- lib/ovsdb-idl.c | 9 +++++++++ lib/ovsdb-idl.h | 2 ++ ovn/controller/ovn-controller.8.xml | 14 +++++++++++++ ovn/controller/ovn-controller.c | 31 +++++++++++++++++++++++++++++ 4 files changed, 56 insertions(+) diff --git a/lib/ovsdb-idl.c b/lib/ovsdb-idl.c index 260f06855..3ab05a364 100644 --- a/lib/ovsdb-idl.c +++ b/lib/ovsdb-idl.c @@ -582,6 +582,15 @@ ovsdb_idl_get_last_error(const struct ovsdb_idl *idl) return 0; } } + +/* 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 136c38cae..e2e2a5e63 100644 --- a/lib/ovsdb-idl.h +++ b/lib/ovsdb-idl.h @@ -68,6 +68,8 @@ 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. */ diff --git a/ovn/controller/ovn-controller.8.xml b/ovn/controller/ovn-controller.8.xml index 69d4cc016..1ee3a6e45 100644 --- a/ovn/controller/ovn-controller.8.xml +++ b/ovn/controller/ovn-controller.8.xml @@ -103,6 +103,20 @@

+
external_ids:ovn-remote-probe-interval
+
+

+ The inactivity probe interval of the connection to the OVN database, + in milliseconds. + If the value is zero, it disables the connection keepalive feature. +

+ +

+ If the value is nonzero, then it will be forced to a value of + at least 1000 ms. +

+
+
external_ids:ovn-encap-type

diff --git a/ovn/controller/ovn-controller.c b/ovn/controller/ovn-controller.c index 44ab8b323..6027011dd 100644 --- a/ovn/controller/ovn-controller.c +++ b/ovn/controller/ovn-controller.c @@ -198,6 +198,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) { + return false; + } + + const char *probe_interval = + smap_get(&cfg->external_ids, "ovn-remote-probe-interval"); + if (probe_interval) { + if (str_to_int(probe_interval, 10, value)) { + return true; + } + + VLOG_WARN("Invalid value for OVN remote probe interval: %s", + probe_interval); + } + + return false; +} + int main(int argc, char *argv[]) { @@ -261,6 +287,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.39.5