[tarantool-patches] Re[2]: [PATCH] test: enable parallel for python tests and long
Sergei Voronezhskii
sergw at tarantool.org
Thu Feb 28 10:53:30 MSK 2019
Updated branch: https://github.com/tarantool/tarantool/commits/sergw/enable-parallel-test-py-long-fixups
Test passed: https://travis-ci.org/tarantool/tarantool/builds/499664259
>Воскресенье, 23 декабря 2018, 14:04 +03:00 от Alexander Turenko < alexander.turenko at tarantool.org >:
>
>Hi!
>
>See comments below and fixups on the
>sergw/enable-parallel-test-py-long-fixups branch.
>
>I tested it with the command below and after the fixup it passes.
>
>```
>$ ./test-run.py --long -- $(for i in $(seq 1 10); do echo -n "-py/ "; done)
>```
>
>WBR, Alexander Turenko.
>
>On Tue, Dec 18, 2018 at 11:43:00AM +0300, Sergei Voronezhskii wrote:
>> Fixed cleanup for python tests:
>> - box-py/iproto.test.py need to cleanup created cluster
>> reproduce:
>> - [box-py/iproto.test.py, null]
>> - [box-py/bootstrap.test.py, null]
>> - box-py/boostrap.test.py should not restart server because of next
>> box-py/call.test.py got error:
>> `NetworkError: (104, 'Connection reset by peer')`
>> at `iproto.authenticate('test', 'test')`
>> reproduce:
>> - [box-py/iproto.test.py, null]
>> - [box-py/bootstrap.test.py, null]
>> - [box-py/call.test.py, null]
>> - replication-py/multi.test.py should not relay on hardcoded server.id
>
>relay -> rely
fixed
>Why it should not? You cleaned up _cluster in box-py/iproto.test.py.
>Why don't clean up it in replication-py/cluster.test.py too?
>
>> because previous test can create some and `id` will autoincremented,
>> instead this we need to calculate vclock_diff
>You use hardcoded server id 1. 'previous test can create some' -- some
>what? I suppose you are about using vclock difference instead of
>absolute value, but the message states something different.
I guess it's enough for checking with hardcoded server id 1.
If master==replica1 and master==replica2, it useless to checking
replica1 and replica2.
Previous test autoincrement replica id and also moves vclock.
>
>> reproduce:
>> - [replication-py/cluster.test.py, null]
>> - [replication-py/multi.test.py, null]
>>
>> Part of: #3232
>> ---
>> BRANCH: https://github.com/tarantool/tarantool/tree/sergw/enable-parallel-test-py-long
>> test/box-py/bootstrap.test.py | 4 +---
>> test/box-py/iproto.result | 4 ++++
>> test/box-py/iproto.test.py | 1 +
>> test/box-py/suite.ini | 2 +-
>> test/engine_long/suite.ini | 2 +-
>> test/long_run-py/suite.ini | 2 +-
>> test/luajit-tap/suite.ini | 2 +-
>> test/replication-py/multi.result | 19 +++++--------------
>> test/replication-py/multi.test.py | 28 +++++++++++++++++-----------
>> test/replication-py/suite.ini | 2 +-
>> test/xlog-py/suite.ini | 2 +-
>> 11 files changed, 34 insertions(+), 34 deletions(-)
>>
>> diff --git a/test/box-py/bootstrap.test.py b/test/box-py/bootstrap.test.py
>> index 9d690b03f..dba6f5ae9 100644
>> --- a/test/box-py/bootstrap.test.py
>> +++ b/test/box-py/bootstrap.test.py
>> @@ -9,8 +9,6 @@ cluster_uuid = yaml.load(server.admin('box.space._schema:get("cluster")',
>> sys.stdout.push_filter(cluster_uuid, '<cluster uuid>')
>>
>> server.admin('box.internal.bootstrap()')
>> -server.restart()
>> -
>
>I suppose now the test case will not test what it was intended. Please,
>implement waiting for the server startup.
>
>You should have strong opinion why this will not broke the test case
>before propose such kind of things in a patch. When you have this
>opinion it is easy to write it in the commit message.
>
>I don't sure whether it really brokes the test case, but I don't see any
>justification in the commit message. So I need to investigate the
>problem from scratch to prove it is good or bad. And so what gain we get
>from your work?
>
>The code cost is zero w/o investigation. The investigation result was
>not shared. I don't understand why do you behave in this way. Again and
>again.
>
I have checked upgrade.lua for bootstrap method for investigation.
But I did not found any clue why we should do restart here.
To fix it without delete `restart` we can do:
iproto.py_con.ping()
server.restart()
iproto.reconnect()
iproto.authenticate('test', 'test')
But I have exception TarantoolStartError on OSX.
After while you can see @locker already removed it at
https://github.com/tarantool/tarantool/commit/3fe8c2835406c02acb59b6f86721d63cec69fac7
>> server.admin('box.space._schema:select{}')
>> server.admin('box.space._cluster:select{}')
>> server.admin('box.space._space:select{}')
>> @@ -20,4 +18,4 @@ server.admin('box.space._func:select{}')
>> server.admin('box.space._priv:select{}')
>>
>> # Cleanup
>> -sys.stdout.pop_filter()
>> +sys.stdout.clear_all_filters()
>
>Two filters was pushed, two should be popped, I think.
>
>> diff --git a/test/replication-py/multi.test.py b/test/replication-py/multi.test.py
>> index 224332266..3394d47be 100644
>> --- a/test/replication-py/multi.test.py
>> +++ b/test/replication-py/multi.test.py
>> @@ -10,10 +10,14 @@ ROW_N = REPLICA_N * 20
>>
>> # master server
>> master = server
>> +
>> master.admin("fiber = require('fiber')")
>> master.admin("box.schema.user.grant('guest', 'replication')")
>> master.admin("box.schema.user.grant('guest', 'execute', 'universe')")
>>
>> +# Get vclock on master
>> +vclock_cnt = yaml.load(master.admin("box.info.vclock[1]", silent = True))[0]
>> +
>> print '----------------------------------------------------------------------'
>> print 'Bootstrap replicas'
>> print '----------------------------------------------------------------------'
>> @@ -48,14 +52,16 @@ for server in cluster:
>> server.iproto.py_con.eval("box.cfg { replication = ... }", [sources])
>>
>> # Wait connections to establish
>> -for server in cluster:
>> +for sid, server in enumerate(cluster, 1):
>> for server2 in cluster:
>> server.iproto.py_con.eval("""
>> while #box.info.vclock[...] ~= nil do
>> fiber.sleep(0.01)
>> end;""", server2.id)
>> - print 'server', server.id, "connected"
>> - server.admin("box.info.vclock")
>> + print 'server', sid, "connected"
>> + vclock_new = yaml.load(server.admin("box.info.vclock[1]", silent = True))[0]
>> + print "vclock_diff: {}".format(vclock_new - vclock_cnt)
>> +
>>
>
>Re server.id -> sid: Please, cleanup _cluster in
>replication-py/cluster.test.py instead. The same for all such changes
>below.
Added
diff --git a/test/replication-py/cluster.result b/test/replication-py/cluster.result
index 3b5566829..04f06f74e 100644
--- a/test/replication-py/cluster.result
+++ b/test/replication-py/cluster.result
@@ -196,6 +196,10 @@ box.info.vclock[2] == 2
---
- true
...
+box.space._cluster:delete{2} ~= nil
+---
+- true
+...
-------------------------------------------------------------
JOIN replica to read-only master
-------------------------------------------------------------
@@ -216,3 +220,7 @@ Cleanup
box.schema.user.revoke('guest', 'replication')
---
...
+box.space._cluster:delete{2} ~= nil
+---
+- true
+...
diff --git a/test/replication-py/cluster.test.py b/test/replication-py/cluster.test.py
index b5f59f40f..dcb05a517 100644
--- a/test/replication-py/cluster.test.py
+++ b/test/replication-py/cluster.test.py
@@ -239,6 +239,7 @@ replica.admin('box.info.vclock[%d] == 2' % replica_id)
replica.stop()
replica.cleanup()
+master.admin('box.space._cluster:delete{%d} ~= nil' % replica_id)
print '-------------------------------------------------------------'
print 'JOIN replica to read-only master'
@@ -290,3 +291,5 @@ print '-------------------------------------------------------------'
sys.stdout.pop_filter()
master.admin("box.schema.user.revoke('guest', 'replication')")
+
+master.admin('box.space._cluster:delete{2} ~= nil')
>
>Re vclocks: Why this vector clock difference is a scalar value? Why it
>is always for server id 1? Please, describe the problem first. It is
>that cluster.test.py moves vclock? I think we can just don't print it,
>because it was informational thing.
Yes it because of cluster.test.py moves vclock. I've updated commit message
Fixed cleanup for python tests:
- replication-py/cluster.test.py
- box-py/iproto.test.py
need to cleanup created cluster
reproduce:
- [box-py/iproto.test.py, null]
- [box-py/bootstrap.test.py, null]
- replication-py/multi.test.py
1) should not rely on hardcoded server.id because previous test can
create replica and `id` will autoincremented, instead enumerate
through cluster list
2) because of cluster.test.py moves vclock need to check for vclock
difference instead of printing `box.info.vclock`
reproduce:
- [replication-py/cluster.test.py, null]
- [replication-py/multi.test.py, null]
Part of: #3232
--
Sergei Voronezhskii
More information about the Tarantool-patches
mailing list