The logic in ovs-xapi-sync didn't handle the case where ovsdb-server sends
a database update before it replies to a transaction that ovs-xapi-sync
sent, like this:
ovs-xapi-sync ovsdb-server
------------- ------------
.
.
.
transaction request --->
<--- database contents update
<--- transaction reply
.
.
.
The update was not lost but ovs-xapi-sync would not process it until the
database changed again.
Bug #10082.
Reported-by: Krishna Miriyala <[email protected]>
Signed-off-by: Ben Pfaff <[email protected]>
---
It's too easy to get this wrong, so I'm working on some patches
that make it harder. In the meantime, I believe that this fixes
the observed problem.
Thanks,
Ben.
.../usr_share_openvswitch_scripts_ovs-xapi-sync | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync
b/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync
index 7132726..0ffccc2 100755
--- a/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync
+++ b/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync
@@ -272,8 +272,10 @@ def main():
bridges = {} # Map from bridge name to xs_network_uuids
iface_ids = {} # Map from xs-vif-uuid to iface-id
vm_ids = {} # Map from xs-vm-uuid to vm-id
+ seqno = idl.change_seqno # Sequence number when we last processed the db
while True:
- if not force_run and not idl.run():
+ idl.run()
+ if not force_run and seqno == idl.change_seqno:
poller = ovs.poller.Poller()
idl.wait(poller)
poller.block()
@@ -285,6 +287,7 @@ def main():
iface_ids = {}
vm_ids = {}
force_run = False
+ seqno = idl.change_seqno
txn = ovs.db.idl.Transaction(idl)
--
1.7.2.5
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev