mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 06:15:47 +00:00
ovsdb-idl: Return correct seqno from ovsdb_idl_db_set_condition().
If an IDL client sets the same monitor condition twice, the expected
seqno when the IDL contents are updated should be the same for both
calls.
In the following scenario:
1. Client calls ovsdb_idl_db_set_condition(db, table, cond1)
2. ovsdb_idl sends monitor_cond_change(cond1) but the server doesn't yet
reply.
3. Client calls ovsdb_idl_db_set_condition(db, table, cond1)
At step 3 the returned expected seqno should be the same as at step 1.
Similarly, if step 2 is skipped, i.e., the client calls sets
the condition twice in the same iteration, then both
ovsdb_idl_db_set_condition() calls should return the same value.
Fixes: 46437c5232
("ovsdb-idl: Enhance conditional monitoring API")
Signed-off-by: Dumitru Ceara <dceara@redhat.com>
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
This commit is contained in:
committed by
Ilya Maximets
parent
12eb2f67df
commit
17f22fe461
@@ -1564,7 +1564,6 @@ ovsdb_idl_db_set_condition(struct ovsdb_idl_db *db,
|
||||
{
|
||||
struct ovsdb_idl_condition *table_cond;
|
||||
struct ovsdb_idl_table *table = ovsdb_idl_db_table_from_class(db, tc);
|
||||
unsigned int seqno = db->cond_seqno;
|
||||
|
||||
/* Compare the new condition to the last known condition which can be
|
||||
* either "new" (not sent yet), "requested" or "acked", in this order.
|
||||
@@ -1582,10 +1581,14 @@ ovsdb_idl_db_set_condition(struct ovsdb_idl_db *db,
|
||||
ovsdb_idl_condition_clone(&table->new_cond, condition);
|
||||
db->cond_changed = true;
|
||||
poll_immediate_wake();
|
||||
return seqno + 1;
|
||||
return db->cond_seqno + 1;
|
||||
} else if (table_cond != table->ack_cond) {
|
||||
/* 'condition' was already set but has not been "acked" yet. The IDL
|
||||
* will be up to date when db->cond_seqno gets incremented. */
|
||||
return db->cond_seqno + 1;
|
||||
}
|
||||
|
||||
return seqno;
|
||||
return db->cond_seqno;
|
||||
}
|
||||
|
||||
/* Sets the replication condition for 'tc' in 'idl' to 'condition' and
|
||||
|
Reference in New Issue
Block a user