@@ -779,8 +779,7 @@ class Idl(object):
vlog.info('%s: replication server is disconnected from the '
'replication source; trying another server'
% session_name)
- elif (database.model == CLUSTERED and
- self._session.get_num_of_remotes() > 1):
+ elif database.model == CLUSTERED:
if not database.schema:
vlog.info('%s: clustered database server has not yet joined '
'cluster; trying another server' % session_name)
@@ -137,17 +137,26 @@ ovsdb_test_cluster_disconnect () {
cleanup="$cleanup ${target}_backup"
fi
- test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -v -t10 idl unix:s${client_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${client_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${client_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 &
@@ -160,6 +169,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")
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] ca367fa5f8bb ("ovsdb-idl.c: Allows retry even when using a single remote.") Signed-off-by: Ilya Maximets <i.maximets@ovn.org> --- python/ovs/db/idl.py | 3 +-- tests/ovsdb-cluster.at | 14 ++++++++++++-- tests/test-ovsdb.py | 2 +- 3 files changed, 14 insertions(+), 5 deletions(-)