[ovs-dev] [PATCH v2] ovn-controller: Add external-ids:ovn-remote-probe-interval

Huang Lei 148012453 at qq.com
Mon Feb 22 08:50:22 UTC 2016


From: Huang Lei <lhuang8 at ebay.com>

For setting the inactivity probe interval of the json session to the OVN southbound database.

Signed-off-by: Huang Lei <lhuang8 at 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)





More information about the dev mailing list