[ovs-dev] [PATCH V3] cfm: Notify connectivity_seq on remote maintenance points change.

Alex Wang alexw at nicira.com
Tue Mar 18 21:19:03 UTC 2014


Hey Ben,

could you review this patch when you are available? fix a bug in branch-2.1

Thanks,
Alex Wang,


On Tue, Mar 18, 2014 at 2:14 PM, Alex Wang <alexw at nicira.com> wrote:

> Commit f23d157c ("ofproto-dpif: Don't poll ports when nothing changes")
> did not ensure the update of the row of remote maintenance points in ovsdb
> when it changes.  This commit makes the update happen by notifying the
> global connectivity_seq.
>
> Bug #1192265
>
> Signed-off-by: Alex Wang <alexw at nicira.com>
>
> ---
> V2 -> V3:
> - to prevent similar bug from happening again, move the check for all
>   cfm status variables in one place.
>
> PATCH -> V2:
> - remove the seq_change in cfm_process_heartbeat().
>   realize that the returned rmps_array is only updated in
>   cfm_run(), the check should be placed there.
> ---
>  lib/cfm.c |   22 +++++++++++++---------
>  1 file changed, 13 insertions(+), 9 deletions(-)
>
> diff --git a/lib/cfm.c b/lib/cfm.c
> index 38448ab..325931d 100644
> --- a/lib/cfm.c
> +++ b/lib/cfm.c
> @@ -393,6 +393,10 @@ cfm_run(struct cfm *cfm) OVS_EXCLUDED(mutex)
>      if (timer_expired(&cfm->fault_timer)) {
>          long long int interval = cfm_fault_interval(cfm);
>          struct remote_mp *rmp, *rmp_next;
> +        uint64_t old_flap_count = cfm->flap_count;
> +        int old_health = cfm->health;
> +        size_t old_rmps_array_len = cfm->rmps_array_len;
> +        bool old_rmps_deleted = false;
>          bool old_cfm_fault = cfm->fault;
>          bool old_rmp_opup = cfm->remote_opup;
>          bool demand_override;
> @@ -419,7 +423,6 @@ cfm_run(struct cfm *cfm) OVS_EXCLUDED(mutex)
>                  cfm->health = 0;
>              } else {
>                  int exp_ccm_recvd;
> -                int old_health = cfm->health;
>
>                  rmp = CONTAINER_OF(hmap_first(&cfm->remote_mps),
>                                     struct remote_mp, node);
> @@ -434,10 +437,6 @@ cfm_run(struct cfm *cfm) OVS_EXCLUDED(mutex)
>                  cfm->health = MIN(cfm->health, 100);
>                  rmp->num_health_ccm = 0;
>                  ovs_assert(cfm->health >= 0 && cfm->health <= 100);
> -
> -                if (cfm->health != old_health) {
> -                    seq_change(connectivity_seq_get());
> -                }
>              }
>              cfm->health_interval = 0;
>          }
> @@ -457,6 +456,7 @@ cfm_run(struct cfm *cfm) OVS_EXCLUDED(mutex)
>                            " %lldms", cfm->name, rmp->mpid,
>                            time_msec() - rmp->last_rx);
>                  if (!demand_override) {
> +                    old_rmps_deleted = true;
>                      hmap_remove(&cfm->remote_mps, &rmp->node);
>                      free(rmp);
>                  }
> @@ -480,10 +480,6 @@ cfm_run(struct cfm *cfm) OVS_EXCLUDED(mutex)
>              cfm->remote_opup = true;
>          }
>
> -        if (old_rmp_opup != cfm->remote_opup) {
> -            seq_change(connectivity_seq_get());
> -        }
> -
>          if (hmap_is_empty(&cfm->remote_mps)) {
>              cfm->fault |= CFM_FAULT_RECV;
>          }
> @@ -505,7 +501,15 @@ cfm_run(struct cfm *cfm) OVS_EXCLUDED(mutex)
>              if (old_cfm_fault == false || cfm->fault == false) {
>                  cfm->flap_count++;
>              }
> +        }
>
> +        /* These variables represent the cfm session status, it is
> desirable
> +         * to update them to database immediately after change. */
> +        if (old_health != cfm->health
> +            || old_rmp_opup != cfm->remote_opup
> +            || (old_rmps_array_len != cfm->rmps_array_len ||
> old_rmps_deleted)
> +            || old_cfm_fault != cfm->fault
> +            || old_flap_count != cfm->flap_count) {
>              seq_change(connectivity_seq_get());
>          }
>
> --
> 1.7.9.5
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openvswitch.org/pipermail/ovs-dev/attachments/20140318/56ad60af/attachment-0005.html>


More information about the dev mailing list