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@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
if (timer_expired(&cfm->fault_timer)) {
long long int interval = cfm_fault_interval(cfm);
struct remote_mp *rmp, *rmp_next;
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;
bool old_cfm_fault = cfm->fault;
bool old_rmp_opup = cfm->remote_opup;
bool demand_override;
cfm->health = 0;
} else {
int exp_ccm_recvd;
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);
rmp = CONTAINER_OF(hmap_first(&cfm->remote_mps),
struct remote_mp, node);
cfm->health = MIN(cfm->health, 100);
rmp->num_health_ccm = 0;
ovs_assert(cfm->health >= 0 && cfm->health <= 100);
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;
}
}
cfm->health_interval = 0;
}
" %lldms", cfm->name, rmp->mpid,
time_msec() - rmp->last_rx);
if (!demand_override) {
" %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);
}
hmap_remove(&cfm->remote_mps, &rmp->node);
free(rmp);
}
cfm->remote_opup = true;
}
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;
}
if (hmap_is_empty(&cfm->remote_mps)) {
cfm->fault |= CFM_FAULT_RECV;
}
if (old_cfm_fault == false || cfm->fault == false) {
cfm->flap_count++;
}
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());
}
seq_change(connectivity_seq_get());
}