sorry, i mean applied to ovn branch,

On Fri, May 22, 2015 at 1:38 PM, Alex Wang <al...@nicira.com> wrote:

> Thx, applied to master,
>
> On Fri, May 22, 2015 at 12:34 PM, Ben Pfaff <b...@nicira.com> wrote:
>
>> Fine with me.
>>
>> On Thu, May 21, 2015 at 10:02:12AM -0700, Alex Wang wrote:
>> > How about adding an inline function like this?~
>> >
>> > On Thu, May 21, 2015 at 10:04 AM, Alex Wang <al...@nicira.com> wrote:
>> >
>> > > This commit changes the type of 'chassis' column in 'Binding' table
>> > > from string to weak reference of 'Chassis' table entry.  This will
>> > > make accessing the chassis from binding more efficient.
>> > >
>> > > Signed-off-by: Alex Wang <al...@nicira.com>
>> > > Acked-by: Ben Pfaff <b...@nicira.com>
>> > >
>> > > ---
>> > > PATCH->V2:
>> > > - Add helper function for getting chassis by name.
>> > > ---
>> > >  ovn/controller/binding.c        |   31
>> ++++++++++++++++++++++---------
>> > >  ovn/controller/chassis.c        |   13 ++-----------
>> > >  ovn/controller/ovn-controller.h |   16 ++++++++++++++++
>> > >  ovn/controller/physical.c       |    2 +-
>> > >  ovn/northd/ovn-northd.c         |    4 ++--
>> > >  ovn/ovn-sb.ovsschema            |    5 ++++-
>> > >  ovn/ovn-sb.xml                  |    3 +--
>> > >  7 files changed, 48 insertions(+), 26 deletions(-)
>> > >
>> > > diff --git a/ovn/controller/binding.c b/ovn/controller/binding.c
>> > > index ab6d9f9..0a4a39e 100644
>> > > --- a/ovn/controller/binding.c
>> > > +++ b/ovn/controller/binding.c
>> > > @@ -74,12 +74,18 @@ get_local_iface_ids(struct controller_ctx *ctx,
>> struct
>> > > sset *lports)
>> > >  void
>> > >  binding_run(struct controller_ctx *ctx)
>> > >  {
>> > > +    const struct sbrec_chassis *chassis_rec;
>> > >      const struct sbrec_binding *binding_rec;
>> > >      struct ovsdb_idl_txn *txn;
>> > >      struct sset lports, all_lports;
>> > >      const char *name;
>> > >      int retval;
>> > >
>> > > +    chassis_rec = get_chassis_by_name(ctx->ovnsb_idl,
>> ctx->chassis_id);
>> > > +    if (!chassis_rec) {
>> > > +        return;
>> > > +    }
>> > > +
>> > >      sset_init(&lports);
>> > >      sset_init(&all_lports);
>> > >      get_local_iface_ids(ctx, &lports);
>> > > @@ -94,17 +100,18 @@ binding_run(struct controller_ctx *ctx)
>> > >          if (sset_find_and_delete(&lports, binding_rec->logical_port)
>> ||
>> > >                  (binding_rec->parent_port &&
>> binding_rec->parent_port[0]
>> > > &&
>> > >                   sset_contains(&all_lports,
>> binding_rec->parent_port))) {
>> > > -            if (!strcmp(binding_rec->chassis, ctx->chassis_id)) {
>> > > +            if (binding_rec->chassis == chassis_rec) {
>> > >                  continue;
>> > >              }
>> > > -            if (binding_rec->chassis[0]) {
>> > > +            if (binding_rec->chassis) {
>> > >                  VLOG_INFO("Changing chassis for lport %s from %s to
>> %s",
>> > > -                          binding_rec->logical_port,
>> binding_rec->chassis,
>> > > -                          ctx->chassis_id);
>> > > +                          binding_rec->logical_port,
>> > > +                          binding_rec->chassis->name,
>> > > +                          chassis_rec->name);
>> > >              }
>> > > -            sbrec_binding_set_chassis(binding_rec, ctx->chassis_id);
>> > > -        } else if (!strcmp(binding_rec->chassis, ctx->chassis_id)) {
>> > > -            sbrec_binding_set_chassis(binding_rec, "");
>> > > +            sbrec_binding_set_chassis(binding_rec, chassis_rec);
>> > > +        } else if (binding_rec->chassis == chassis_rec) {
>> > > +            sbrec_binding_set_chassis(binding_rec, NULL);
>> > >          }
>> > >      }
>> > >
>> > > @@ -126,10 +133,16 @@ binding_run(struct controller_ctx *ctx)
>> > >  void
>> > >  binding_destroy(struct controller_ctx *ctx)
>> > >  {
>> > > +    const struct sbrec_chassis *chassis_rec;
>> > >      int retval = TXN_TRY_AGAIN;
>> > >
>> > >      ovs_assert(ctx->ovnsb_idl);
>> > >
>> > > +    chassis_rec = get_chassis_by_name(ctx->ovnsb_idl,
>> ctx->chassis_id);
>> > > +    if (!chassis_rec) {
>> > > +        return;
>> > > +    }
>> > > +
>> > >      while (retval != TXN_SUCCESS && retval != TXN_UNCHANGED) {
>> > >          const struct sbrec_binding *binding_rec;
>> > >          struct ovsdb_idl_txn *txn;
>> > > @@ -140,8 +153,8 @@ binding_destroy(struct controller_ctx *ctx)
>> > >                                ctx->chassis_id);
>> > >
>> > >          SBREC_BINDING_FOR_EACH(binding_rec, ctx->ovnsb_idl) {
>> > > -            if (!strcmp(binding_rec->chassis, ctx->chassis_id)) {
>> > > -                sbrec_binding_set_chassis(binding_rec, "");
>> > > +            if (binding_rec->chassis == chassis_rec) {
>> > > +                sbrec_binding_set_chassis(binding_rec, NULL);
>> > >              }
>> > >          }
>> > >
>> > > diff --git a/ovn/controller/chassis.c b/ovn/controller/chassis.c
>> > > index 1a2bb32..63e1160 100644
>> > > --- a/ovn/controller/chassis.c
>> > > +++ b/ovn/controller/chassis.c
>> > > @@ -55,11 +55,7 @@ register_chassis(struct controller_ctx *ctx)
>> > >      int retval = TXN_TRY_AGAIN;
>> > >      struct ovsdb_idl_txn *txn;
>> > >
>> > > -    SBREC_CHASSIS_FOR_EACH(chassis_rec, ctx->ovnsb_idl) {
>> > > -        if (!strcmp(chassis_rec->name, ctx->chassis_id)) {
>> > > -            break;
>> > > -        }
>> > > -    }
>> > > +    chassis_rec = get_chassis_by_name(ctx->ovnsb_idl,
>> ctx->chassis_id);
>> > >
>> > >      /* xxx Need to support more than one encap.  Also need to support
>> > >       * xxx encap options. */
>> > > @@ -396,12 +392,7 @@ chassis_destroy(struct controller_ctx *ctx)
>> > >          const struct sbrec_chassis *chassis_rec;
>> > >          struct ovsdb_idl_txn *txn;
>> > >
>> > > -        SBREC_CHASSIS_FOR_EACH(chassis_rec, ctx->ovnsb_idl) {
>> > > -            if (!strcmp(chassis_rec->name, ctx->chassis_id)) {
>> > > -                break;
>> > > -            }
>> > > -        }
>> > > -
>> > > +        chassis_rec = get_chassis_by_name(ctx->ovnsb_idl,
>> > > ctx->chassis_id);
>> > >          if (!chassis_rec) {
>> > >              break;
>> > >          }
>> > > diff --git a/ovn/controller/ovn-controller.h
>> > > b/ovn/controller/ovn-controller.h
>> > > index a1630f7..6f98658 100644
>> > > --- a/ovn/controller/ovn-controller.h
>> > > +++ b/ovn/controller/ovn-controller.h
>> > > @@ -17,6 +17,8 @@
>> > >  #ifndef OVN_CONTROLLER_H
>> > >  #define OVN_CONTROLLER_H 1
>> > >
>> > > +#include "ovn/lib/ovn-sb-idl.h"
>> > > +
>> > >  struct controller_ctx {
>> > >      char *chassis_id;               /* ID for this chassis. */
>> > >      char *br_int_name;              /* Name of local integration
>> bridge.
>> > > */
>> > > @@ -26,4 +28,18 @@ struct controller_ctx {
>> > >      const struct ovsrec_bridge *br_int;
>> > >  };
>> > >
>> > > +static inline const struct sbrec_chassis *
>> > > +get_chassis_by_name(struct ovsdb_idl *ovnsb_idl, char *chassis_id)
>> > > +{
>> > > +    const struct sbrec_chassis *chassis_rec;
>> > > +
>> > > +    SBREC_CHASSIS_FOR_EACH(chassis_rec, ovnsb_idl) {
>> > > +        if (!strcmp(chassis_rec->name, chassis_id)) {
>> > > +            break;
>> > > +        }
>> > > +    }
>> > > +
>> > > +    return chassis_rec;
>> > > +}
>> > > +
>> > >  #endif /* ovn/ovn-controller.h */
>> > > diff --git a/ovn/controller/physical.c b/ovn/controller/physical.c
>> > > index 0fb43c0..dc2fcee 100644
>> > > --- a/ovn/controller/physical.c
>> > > +++ b/ovn/controller/physical.c
>> > > @@ -116,7 +116,7 @@ physical_run(struct controller_ctx *ctx)
>> > >          bool local = ofport != 0;
>> > >          if (!local) {
>> > >              ofport = u16_to_ofp(simap_get(&chassis_to_ofport,
>> > > -                                          binding->chassis));
>> > > +                                          binding->chassis->name));
>> > >              if (!ofport) {
>> > >                  continue;
>> > >              }
>> > > diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c
>> > > index cfad6be..f00e43e 100644
>> > > --- a/ovn/northd/ovn-northd.c
>> > > +++ b/ovn/northd/ovn-northd.c
>> > > @@ -660,10 +660,10 @@ ovnsb_db_changed(struct northd_context *ctx)
>> > >              continue;
>> > >          }
>> > >
>> > > -        if (*binding->chassis && (!lport->up || !*lport->up)) {
>> > > +        if (binding->chassis && (!lport->up || !*lport->up)) {
>> > >              bool up = true;
>> > >              nbrec_logical_port_set_up(lport, &up, 1);
>> > > -        } else if (!*binding->chassis && (!lport->up || *lport->up))
>> {
>> > > +        } else if (!binding->chassis && (!lport->up || *lport->up)) {
>> > >              bool up = false;
>> > >              nbrec_logical_port_set_up(lport, &up, 1);
>> > >          }
>> > > diff --git a/ovn/ovn-sb.ovsschema b/ovn/ovn-sb.ovsschema
>> > > index 699bfc5..a688e76 100644
>> > > --- a/ovn/ovn-sb.ovsschema
>> > > +++ b/ovn/ovn-sb.ovsschema
>> > > @@ -59,7 +59,10 @@
>> > >                                        "minInteger": 0,
>> > >                                        "maxInteger": 4095},
>> > >                                "min": 0, "max": 1}},
>> > > -                "chassis": {"type": "string"},
>> > > +                "chassis": {"type": {"key": {"type": "uuid",
>> > > +                                             "refTable": "Chassis",
>> > > +                                             "refType": "weak"},
>> > > +                                     "min": 0, "max": 1}},
>> > >                  "mac": {"type": {"key": "string",
>> > >                                   "min": 0,
>> > >                                   "max": "unlimited"}}},
>> > > diff --git a/ovn/ovn-sb.xml b/ovn/ovn-sb.xml
>> > > index 334d11a..fdf59f0 100644
>> > > --- a/ovn/ovn-sb.xml
>> > > +++ b/ovn/ovn-sb.xml
>> > > @@ -711,8 +711,7 @@
>> > >
>> > >      <column name="chassis">
>> > >        The physical location of the logical port.  To successfully
>> > > identify a
>> > > -      chassis, this column must match the <ref table="Chassis"
>> > > column="name"/>
>> > > -      column in some row in the <ref table="Chassis"/> table.  This
>> is
>> > > +      chassis, this column must be a <ref table="Chassis"/> record.
>> This
>> > > is
>> > >        populated by <code>ovn-controller</code>.
>> > >      </column>
>> > >
>> > > --
>> > > 1.7.9.5
>> > >
>> > >
>>
>
>
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to