On Mon, Feb 22, 2016 at 12:50 AM, Huang Lei <148012...@qq.com> wrote:

> 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);
>

This may cause subtle  behavior changes to current
jsonrpc_session_set_probe_interval() users (ovsdb-idl and jsonrpc-server).
It may not matter
much in practice, but would be nice not to introduce them, at least not
within this patch.

> +    }
>  }
>
>  /* 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)
>
No need for a space between "*" and 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;
> +}
> +
> +
>
extra blank line.

>  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
>
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to