mirror of
https://github.com/openvswitch/ovs
synced 2025-10-17 14:28:02 +00:00
python: idl: Allow retry even when using a single remote.
As described in commit [1], it's possible that remote IP is backed by
a load-balancer and re-connection to this same IP will lead to
connection to a different server. This case is supported for C version
of IDL and should be supported in a same way for python implementation.
[1] ca367fa5f8
("ovsdb-idl.c: Allows retry even when using a single remote.")
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Acked-by: Dumitru Ceara <dceara@redhat.com>
This commit is contained in:
@@ -777,8 +777,7 @@ class Idl(object):
|
||||
% (session_name, self._db.name))
|
||||
return False
|
||||
|
||||
if (database.model == CLUSTERED and
|
||||
self._session.get_num_of_remotes() > 1):
|
||||
if database.model == CLUSTERED:
|
||||
if not database.schema:
|
||||
vlog.info('%s: clustered database server has not yet joined '
|
||||
'cluster; trying another server' % session_name)
|
||||
|
@@ -119,17 +119,26 @@ ovsdb_test_cluster_disconnect () {
|
||||
# Connect to $target. Use "wait" to trigger a non-op transaction so
|
||||
# that test-ovsdb will not quit.
|
||||
|
||||
test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -v -t10 idl unix:s$target.ovsdb '[["idltest",
|
||||
txn='[["idltest",
|
||||
{"op": "wait",
|
||||
"table": "simple",
|
||||
"where": [["i", "==", 1]],
|
||||
"columns": ["i"],
|
||||
"until": "==",
|
||||
"rows": [{"i": 1}]}]]' > test-ovsdb.log 2>&1 &
|
||||
"rows": [{"i": 1}]}]]'
|
||||
|
||||
test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -v -t10 idl \
|
||||
unix:s$target.ovsdb "$txn" > test-ovsdb.log 2>&1 &
|
||||
echo $! > test-ovsdb.pid
|
||||
|
||||
OVS_WAIT_UNTIL([grep "000: table simple: i=1" test-ovsdb.log])
|
||||
|
||||
$PYTHON3 $srcdir/test-ovsdb.py -t10 idl $abs_srcdir/idltest.ovsschema \
|
||||
unix:s$target.ovsdb "$txn" > test-ovsdb-py.log 2>&1 &
|
||||
echo $! > test-ovsdb-py.pid
|
||||
|
||||
OVS_WAIT_UNTIL([grep "000: table simple: i=1" test-ovsdb-py.log])
|
||||
|
||||
# Start collecting raft_is_connected logs for $target before shutting down
|
||||
# any servers.
|
||||
tail -f s$target.log > raft_is_connected.log &
|
||||
@@ -142,6 +151,7 @@ ovsdb_test_cluster_disconnect () {
|
||||
|
||||
# The test-ovsdb should detect the disconnect and retry.
|
||||
OVS_WAIT_UNTIL([grep disconnect test-ovsdb.log])
|
||||
OVS_WAIT_UNTIL([grep disconnect test-ovsdb-py.log])
|
||||
|
||||
# The $target debug log should show raft_is_connected: false.
|
||||
OVS_WAIT_UNTIL([grep "raft_is_connected: false" raft_is_connected.log])
|
||||
|
@@ -651,7 +651,7 @@ def do_idl(schema_file, remote, *commands):
|
||||
commands = commands[1:]
|
||||
else:
|
||||
schema_helper.register_all()
|
||||
idl = ovs.db.idl.Idl(remote, schema_helper)
|
||||
idl = ovs.db.idl.Idl(remote, schema_helper, leader_only=False)
|
||||
if "simple3" in idl.tables:
|
||||
idl.index_create("simple3", "simple3_by_name")
|
||||
|
||||
|
Reference in New Issue
Block a user