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