Hi Mark,

I've redesigned the whole thing to reuse options:requested-chassis (which is now comma separated list of chassis); db wise it's also backwards compatible (additional chassis are still tracked in a separate additional_chassis field, which is a list of chassis ids). The patch series is here:

https://patchwork.ozlabs.org/project/ovn/list/?series=292585

Let me know if this covers your concerns.

Ihar

On 2/21/22 6:47 PM, Mark Michelson wrote:
Hi Ihar,

I now have read the entire patch series, and I wonder how you would feel about an alternate approach. Currently, what you've implemented is a supplement to options:requested-chassis, but what if you went for a replacement instead?

What if you added a new column (or new "options" key) for logical switch ports that took a list of chassis. The list would be ordered by preference, meaning that the first chassis would act as the requested chassis, and any after would act as a standby [1].

If this method is used for indicating the preferred chassis, we honor it. And if this column is empty, then we can fall back to the "classic" behavior of using options:requested-chassis.

The advantages of this method are:

1) Keeping the logic separate from options:requested-chassis means that it will (hopefully) be simpler to implement, and less likely to cause issues since most of the existing requested-chassis logic will remain untouched.

2) Using a list allows for an arbitrary number of chassis to be specified. For a simple migration, this might not be necessary. But allowing for a list allows for other uses of this particular column.

3) Since activation strategy is implemented as a separate option, it means that migration doesn't have to be the only use for this column. For instance, we could implement an activation strategy such that if BFD probes fail on the main chassis, then we could activate the workload on the next chassis in the list. That way it could be used for failover in addition to migrations.

What do you think?
Mark Michelson

[1] Alternately, you could assign a specific priority value to each chassis instead of using the order of the items in the list. This is similar to what is done for other options, like gateway_chassis.

On 2/17/22 10:16, Ihar Hrachyshka wrote:
This version of the series is complete. It contains the previously
missing ddlog implementation; also RARP that is used for additional
chassis activation is now reinjected into the pipeline after blocking
flows are deleted by vswitchd.

Ihar Hrachyshka (16):
   tests: log more info on OVN_CHECK_PACKETS* failure
   tests: don't bail from OVN_CHECK_PACKETS_CONTAIN prematurily
   Introduce chassis_is_vtep
   northd: introduce separate function to look up chassis
   northd: separate code for nb->sb port binding chassis update
   Pass chassis and encap into get_port_binding_tun
   Introduce match_outport_dp_and_port_keys in physical.c
   Split code to set zone info into put_zones_ofpacts
   Use get_port_binding_tun instead of chassis_tunnel_find
   Tag all packets that arrived from a tunnel as LOCAL_ONLY
   Update port-up on main chassis only
   Introduce LSP:options:requested-additional-chassis
   Clone packets to both port chassis
   Enforce tunneling when additional-chassis is set
   Implement RARP activation strategy for ports
   Reinject RARP packet when activation-strategy=rarp

---

v0: initial draft (single patch)
v1: split into pieces
v1: renamed options: migration-destination ->
                      requested-additional-chassis,
                      migration-unblocked ->
                      additional-chassis-activated
v1: introduced options:activation-strategy=rarp to allow for other
     strategies / having default no-op strategy
v1: implement in-memory port-activated tracking to avoid races
v1: numerous code cleanup / bug fixes
v1: special handling for localnet attached switches
v2: added ddlog implementation
v2: re-inject RARP packet after vswitch updates flows
v3: re-sent as a single series

---

  controller/binding.c        | 188 +++++--
  controller/binding.h        |   2 +
  controller/if-status.c      |  15 +-
  controller/if-status.h      |   1 +
  controller/lport.c          |  19 +-
  controller/ovn-controller.c |   4 +-
  controller/physical.c       | 390 ++++++++++----
  controller/pinctrl.c        | 254 ++++++++-
  controller/pinctrl.h        |   2 +
  include/ovn/actions.h       |   9 +
  lib/actions.c               |  40 +-
  northd/northd.c             | 130 +++--
  northd/ovn-northd.c         |   7 +-
  northd/ovn-sb.dlopts        |   2 +
  northd/ovn_northd.dl        | 169 +++++-
  ovn-nb.xml                  |  18 +
  ovn-sb.ovsschema            |  17 +-
  ovn-sb.xml                  |  73 ++-
  tests/ovn.at                | 991 +++++++++++++++++++++++++++++++++++-
  utilities/ovn-trace.c       |   3 +
  20 files changed, 2110 insertions(+), 224 deletions(-)



_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to