Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 7bea7be

Browse files
committed
test_referee test version without hardcoded sleep times and fsync=on
1 parent 976250e commit 7bea7be

File tree

4 files changed

+42
-23
lines changed

4 files changed

+42
-23
lines changed

tests2/docker-entrypoint.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ if [ "$1" = 'postgres' ]; then
5151
listen_addresses='*'
5252
max_prepared_transactions = 100
5353
synchronous_commit = on
54-
fsync = off
54+
fsync = on
5555
wal_level = logical
5656
max_worker_processes = 30
5757
max_replication_slots = 10
@@ -62,11 +62,11 @@ if [ "$1" = 'postgres' ]; then
6262
# log_statement = all
6363
6464
multimaster.max_nodes = 3
65-
# multimaster.volkswagen_mode = 1
66-
# multimaster.ignore_tables_without_pk = 1
6765
multimaster.heartbeat_recv_timeout = 1100
6866
multimaster.heartbeat_send_timeout = 250
69-
multimaster.max_recovery_lag = 1000000000
67+
multimaster.max_recovery_lag = 1GB
68+
multimaster.min_recovery_lag = 10kB
69+
multimaster.preserve_commit_order = off
7070
EOF
7171

7272
if [ -n "$NODE_ID" ]; then

tests2/lib/bank_client.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,14 +159,15 @@ def no_prepared_tx(self):
159159
def status(self):
160160
while self.running:
161161
msg = yield from self.child_pipe.coro_recv()
162-
if msg == 'status':
162+
if msg == 'status' or msg == 'status_noclean':
163163
serialized_aggs = []
164164

165165
for conn_id, conn_aggs in self.aggregates.items():
166166
serialized_aggs.append({})
167167
for aggname, agg in conn_aggs.items():
168168
serialized_aggs[conn_id][aggname] = agg.as_dict()
169-
agg.clear_values()
169+
if msg == 'status':
170+
agg.clear_values()
170171

171172
yield from self.child_pipe.coro_send(serialized_aggs)
172173
else:
@@ -284,9 +285,14 @@ def bgrun(self):
284285
self.evloop_process = multiprocessing.Process(target=self.run, args=())
285286
self.evloop_process.start()
286287

287-
def get_aggregates(self, _print=True):
288-
self.parent_pipe.send('status')
288+
def get_aggregates(self, _print=True, clean=True):
289+
if clean:
290+
self.parent_pipe.send('status')
291+
else:
292+
self.parent_pipe.send('status_noclean')
293+
289294
resp = self.parent_pipe.recv()
295+
290296
if _print:
291297
MtmClient.print_aggregates(resp)
292298
return resp

tests2/lib/test_helper.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
TEST_WARMING_TIME = 5
77
TEST_DURATION = 10
8+
TEST_MAX_RECOVERY_TIME = 300
89
TEST_RECOVERY_TIME = 30
910
TEST_SETUP_TIME = 20
1011
TEST_STOP_DELAY = 5
@@ -34,7 +35,20 @@ def assertNoCommits(self, aggs):
3435
if commits:
3536
raise AssertionError('There are commits during aggregation interval')
3637

37-
def performFailure(self, failure, wait=0):
38+
def awaitCommit(self, node_id):
39+
total_sleep = 0
40+
41+
while total_sleep <= TEST_MAX_RECOVERY_TIME:
42+
aggs = self.client.get_aggregates(clean=False, _print=False)
43+
# print('=== ',aggs[node_id]['transfer']['finish'])
44+
if ('commit' in aggs[node_id]['transfer']['finish'] and
45+
aggs[node_id]['transfer']['finish']['commit'] > 10):
46+
break
47+
time.sleep(5)
48+
total_sleep += 5
49+
50+
51+
def performFailure(self, failure, wait=0, node_wait_for_commit=-1):
3852

3953
time.sleep(TEST_WARMING_TIME)
4054

@@ -57,9 +71,13 @@ def performFailure(self, failure, wait=0):
5771
print('Eliminate failure at ',datetime.datetime.utcnow())
5872

5973
self.client.clean_aggregates()
60-
time.sleep(TEST_RECOVERY_TIME)
61-
aggs = self.client.get_aggregates()
6274

75+
if node_wait_for_commit >= 0:
76+
self.awaitCommit(node_wait_for_commit)
77+
else:
78+
time.sleep(TEST_RECOVERY_TIME)
79+
80+
aggs = self.client.get_aggregates()
6381
return (aggs_failure, aggs)
6482

6583
def nodeExecute(dsn, statements):

tests2/test_referee.py

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,6 @@ def setUpClass(cls):
2525
'--build',
2626
'-d'])
2727

28-
# XXX: add normal wait here
29-
time.sleep(TEST_SETUP_TIME)
30-
3128
cls.client = MtmClient([
3229
"dbname=regression user=postgres host=127.0.0.1 port=15432",
3330
"dbname=regression user=postgres host=127.0.0.1 port=15433"
@@ -42,8 +39,6 @@ def tearDownClass(cls):
4239
print('tearDown')
4340
cls.client.stop()
4441

45-
time.sleep(TEST_STOP_DELAY)
46-
4742
if not cls.client.is_data_identic():
4843
raise AssertionError('Different data on nodes')
4944

@@ -55,7 +50,7 @@ def tearDownClass(cls):
5550

5651
def setUp(self):
5752
warnings.simplefilter("ignore", ResourceWarning)
58-
time.sleep(20)
53+
5954
print('Start new test at ',datetime.datetime.utcnow())
6055

6156
def tearDown(self):
@@ -64,7 +59,7 @@ def tearDown(self):
6459
def test_node_crash(self):
6560
print('### test_node_crash ###')
6661

67-
aggs_failure, aggs = self.performFailure(CrashRecoverNode('node2'))
62+
aggs_failure, aggs = self.performFailure(CrashRecoverNode('node2'), node_wait_for_commit=1)
6863

6964
self.assertCommits(aggs_failure[:1])
7065
self.assertNoCommits(aggs_failure[1:])
@@ -77,7 +72,7 @@ def test_node_crash(self):
7772
def test_partition_referee(self):
7873
print('### test_partition_referee ###')
7974

80-
aggs_failure, aggs = self.performFailure(SingleNodePartition('node2'))
75+
aggs_failure, aggs = self.performFailure(SingleNodePartition('node2'), node_wait_for_commit=1)
8176

8277
self.assertCommits(aggs_failure[:1])
8378
self.assertNoCommits(aggs_failure[1:])
@@ -89,7 +84,7 @@ def test_partition_referee(self):
8984
def test_double_failure_referee(self):
9085
print('### test_double_failure_referee ###')
9186

92-
aggs_failure, aggs = self.performFailure(SingleNodePartition('node2'))
87+
aggs_failure, aggs = self.performFailure(SingleNodePartition('node2'), node_wait_for_commit=1)
9388

9489
self.assertCommits(aggs_failure[:1])
9590
self.assertNoCommits(aggs_failure[1:])
@@ -98,7 +93,7 @@ def test_double_failure_referee(self):
9893
self.assertCommits(aggs)
9994
self.assertIsolation(aggs)
10095

101-
aggs_failure, aggs = self.performFailure(SingleNodePartition('node1'))
96+
aggs_failure, aggs = self.performFailure(SingleNodePartition('node1'), node_wait_for_commit=0)
10297

10398
self.assertNoCommits(aggs_failure[:1])
10499
self.assertCommits(aggs_failure[1:])
@@ -121,7 +116,7 @@ def test_winner_restart(self):
121116
self.assertCommits(aggs[1:])
122117
self.assertIsolation(aggs)
123118

124-
aggs_failure, aggs = self.performFailure(RestartNode('node2'))
119+
aggs_failure, aggs = self.performFailure(RestartNode('node2'), node_wait_for_commit=1)
125120

126121
self.assertNoCommits(aggs_failure)
127122
self.assertIsolation(aggs_failure)
@@ -133,7 +128,7 @@ def test_winner_restart(self):
133128
# need to start node1 to perform consequent tests
134129
docker_api = docker.from_env()
135130
docker_api.containers.get('node1').start()
136-
time.sleep(35)
131+
self.awaitCommit(0)
137132

138133

139134
if __name__ == '__main__':

0 commit comments

Comments
 (0)