5
5
from time import sleep
6
6
7
7
from benchmark .commands import CommandMaker
8
- from benchmark .config import Key , LocalCommittee , NodeParameters , BenchParameters , ConfigError
8
+ from benchmark .config import (
9
+ Key ,
10
+ LocalCommittee ,
11
+ NodeParameters ,
12
+ BenchParameters ,
13
+ ConfigError ,
14
+ )
9
15
from benchmark .logs import LogParser , ParseError
10
16
from benchmark .utils import Print , BenchError , PathMaker
11
17
12
18
13
19
class LocalBench :
14
- BASE_PORT = 3000
20
+ BASE_PORT = 4000
15
21
16
22
def __init__ (self , bench_parameters_dict , node_parameters_dict ):
17
23
try :
18
24
self .bench_parameters = BenchParameters (bench_parameters_dict )
19
25
self .node_parameters = NodeParameters (node_parameters_dict )
20
26
except ConfigError as e :
21
- raise BenchError (' Invalid nodes or bench parameters' , e )
27
+ raise BenchError (" Invalid nodes or bench parameters" , e )
22
28
23
29
def __getattr__ (self , attr ):
24
30
return getattr (self .bench_parameters , attr )
25
31
26
32
def _background_run (self , command , log_file ):
27
33
name = splitext (basename (log_file ))[0 ]
28
- cmd = f' { command } 2> { log_file } '
29
- subprocess .run ([' tmux' , ' new' , '-d' , '-s' , name , cmd ], check = True )
34
+ cmd = f" { command } 2> { log_file } "
35
+ subprocess .run ([" tmux" , " new" , "-d" , "-s" , name , cmd ], check = True )
30
36
31
37
def _kill_nodes (self ):
32
38
try :
33
39
cmd = CommandMaker .kill ().split ()
34
40
subprocess .run (cmd , stderr = subprocess .DEVNULL )
35
41
except subprocess .SubprocessError as e :
36
- raise BenchError (' Failed to kill testbed' , e )
42
+ raise BenchError (" Failed to kill testbed" , e )
37
43
38
44
def run (self , debug = False ):
39
45
assert isinstance (debug , bool )
40
- Print .heading (' Starting local benchmark' )
46
+ Print .heading (" Starting local benchmark" )
41
47
42
48
# Kill any previous testbed.
43
49
self ._kill_nodes ()
44
50
45
51
try :
46
- Print .info (' Setting up testbed...' )
52
+ Print .info (" Setting up testbed..." )
47
53
nodes , rate = self .nodes [0 ], self .rate [0 ]
48
54
49
55
# Cleanup all files.
50
- cmd = f' { CommandMaker .clean_logs ()} ; { CommandMaker .cleanup ()} '
56
+ cmd = f" { CommandMaker .clean_logs ()} ; { CommandMaker .cleanup ()} "
51
57
subprocess .run ([cmd ], shell = True , stderr = subprocess .DEVNULL )
52
58
sleep (0.5 ) # Removing the store may take time.
53
59
@@ -77,12 +83,12 @@ def run(self, debug=False):
77
83
workers_addresses = committee .workers_addresses (self .faults )
78
84
rate_share = ceil (rate / committee .workers ())
79
85
for i , addresses in enumerate (workers_addresses ):
80
- for ( id , address ) in addresses :
86
+ for id , address in addresses :
81
87
cmd = CommandMaker .run_client (
82
88
address ,
83
89
self .tx_size ,
84
90
rate_share ,
85
- [x for y in workers_addresses for _ , x in y ]
91
+ [x for y in workers_addresses for _ , x in y ],
86
92
)
87
93
log_file = PathMaker .client_log_file (i , id )
88
94
self ._background_run (cmd , log_file )
@@ -94,34 +100,34 @@ def run(self, debug=False):
94
100
PathMaker .committee_file (),
95
101
PathMaker .db_path (i ),
96
102
PathMaker .parameters_file (),
97
- debug = debug
103
+ debug = debug ,
98
104
)
99
105
log_file = PathMaker .primary_log_file (i )
100
106
self ._background_run (cmd , log_file )
101
107
102
108
# Run the workers (except the faulty ones).
103
109
for i , addresses in enumerate (workers_addresses ):
104
- for ( id , address ) in addresses :
110
+ for id , address in addresses :
105
111
cmd = CommandMaker .run_worker (
106
112
PathMaker .key_file (i ),
107
113
PathMaker .committee_file (),
108
114
PathMaker .db_path (i , id ),
109
115
PathMaker .parameters_file (),
110
116
id , # The worker's id.
111
- debug = debug
117
+ debug = debug ,
112
118
)
113
119
log_file = PathMaker .worker_log_file (i , id )
114
120
self ._background_run (cmd , log_file )
115
121
116
122
# Wait for all transactions to be processed.
117
- Print .info (f' Running benchmark ({ self .duration } sec)...' )
123
+ Print .info (f" Running benchmark ({ self .duration } sec)..." )
118
124
sleep (self .duration )
119
125
self ._kill_nodes ()
120
126
121
127
# Parse logs and return the parser.
122
- Print .info (' Parsing logs...' )
128
+ Print .info (" Parsing logs..." )
123
129
return LogParser .process (PathMaker .logs_path (), faults = self .faults )
124
130
125
131
except (subprocess .SubprocessError , ParseError ) as e :
126
132
self ._kill_nodes ()
127
- raise BenchError (' Failed to run benchmark' , e )
133
+ raise BenchError (" Failed to run benchmark" , e )
0 commit comments