diff options
author | Dumitru Ceara <dceara@redhat.com> | 2021-05-07 21:28:02 +0200 |
---|---|---|
committer | Ilya Maximets <i.maximets@ovn.org> | 2021-05-14 13:44:37 +0200 |
commit | b5bb044fbe4c1395dcde5cc7d5081ef0099bb8b3 (patch) | |
tree | b5be5847c36550fca58b4f695a65fc631231bc74 /vswitchd | |
parent | 7100c220e669443aa646513ce6cb241ccf2caf5c (diff) | |
download | openvswitch-b5bb044fbe4c1395dcde5cc7d5081ef0099bb8b3.tar.gz |
ovsdb-cs: Consider all tables when computing expected cond seqno.
In ovsdb_cs_db_set_condition(), take into account all pending condition
changes for all tables when computing the db->cond_seqno at which the
monitor is expected to be updated.
In the following scenario, with two tables, A and B, the old code
performed the following steps:
1. Initial db->cond_seqno = X.
2. Client changes condition for table A:
- A->new_cond gets set
- expected cond seqno returned to the client: X + 1
3. ovsdb-cs sends the monitor_cond_change for table A
- A->req_cond <- A->new_cond
4. Client changes condition for table B:
- B->new_cond gets set
- expected cond seqno returned to the client: X + 1
- however, because the condition change at step 3 is still not replied
to, table B's monitor_cond_change request is not sent yet.
5. ovsdb-cs receives the reply for the condition change at step 3:
- db->cond_seqno <- X + 1
6. ovsdb-cs sends the monitor_cond_change for table B
7. ovsdb-cs receives the reply for the condition change at step 6:
- db->cond_seqno <- X + 2
The client was incorrectly informed that it will have all relevant
updates for table B at seqno X + 1 while actually that happens later, at
seqno X + 2.
Fixes: 46437c5232bd ("ovsdb-idl: Enhance conditional monitoring API")
Acked-by: Ben Pfaff <blp@ovn.org>
Signed-off-by: Dumitru Ceara <dceara@redhat.com>
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Diffstat (limited to 'vswitchd')
0 files changed, 0 insertions, 0 deletions