@@ -123,11 +123,17 @@ impl KvbmLeader {
123
123
} ;
124
124
125
125
let cancel_token = tokio_util:: sync:: CancellationToken :: new ( ) ;
126
- leader. spawn_barrier_task (
127
- drt,
126
+
127
+ // The leader_sockets struct cannot be cloned,
128
+ // so we use a tuple to "struct" the two urls
129
+ let leader_urls = (
128
130
leader_sockets. pub_url . clone ( ) ,
129
131
leader_sockets. ack_url . clone ( ) ,
130
132
) ;
133
+ leader. spawn_barrier_task (
134
+ drt,
135
+ leader_urls
136
+ ) ;
131
137
leader. spawn_zmq_task ( leader_sockets, cancel_token) ;
132
138
133
139
Ok ( leader)
@@ -136,8 +142,7 @@ impl KvbmLeader {
136
142
fn spawn_barrier_task (
137
143
& self ,
138
144
drt : DistributedRuntime ,
139
- leader_sockets_pub_url : String ,
140
- leader_sockets_ack_url : String ,
145
+ leader_urls : ( String , String ) ,
141
146
) {
142
147
let state = self . state . clone ( ) ;
143
148
let leader_config = self . config . clone ( ) ;
@@ -148,8 +153,7 @@ impl KvbmLeader {
148
153
tokio:: spawn ( async move {
149
154
match KvbmLeader :: run_barrier_sync (
150
155
drt,
151
- leader_sockets_pub_url,
152
- leader_sockets_ack_url,
156
+ leader_urls,
153
157
leader_config,
154
158
)
155
159
. await
@@ -180,8 +184,7 @@ impl KvbmLeader {
180
184
181
185
async fn run_barrier_sync (
182
186
drt : DistributedRuntime ,
183
- leader_sockets_pub_url : String ,
184
- leader_sockets_ack_url : String ,
187
+ leader_urls : ( String , String ) ,
185
188
leader_config : KvbmLeaderConfig ,
186
189
) -> anyhow:: Result < ( usize , usize , usize ) > {
187
190
let barrier_id_worker_to_leader =
@@ -191,24 +194,18 @@ impl KvbmLeader {
191
194
leader_config. world_size,
192
195
barrier_id_worker_to_leader
193
196
) ;
194
- let zmq_data_worker_to_leader: Arc < KvbmLeaderData > = Arc :: new ( KvbmLeaderData {
195
- pub_url : leader_sockets_pub_url. clone ( ) ,
196
- ack_url : leader_sockets_ack_url. clone ( ) ,
197
- num_host_blocks : 0 , // doesn't matter for worker to leader sync
198
- num_disk_blocks : 0 , // doesn't matter for worker to leader sync
199
- } ) ;
200
197
201
198
// Build our leader barrier and publish the data.
202
199
// TODO: Use a separate timeout parameter from the ZMQ connection timeout
203
- let worker_to_leader_barrier: LeaderBarrier < KvbmLeaderData , worker:: KvbmWorkerData > =
200
+ let worker_to_leader_barrier: LeaderBarrier < ( ) , worker:: KvbmWorkerData > =
204
201
LeaderBarrier :: new (
205
202
barrier_id_worker_to_leader. clone ( ) ,
206
203
leader_config. world_size ,
207
204
Some ( Duration :: from_secs ( leader_config. leader_init_timeout_secs ) ) ,
208
205
) ;
209
206
210
207
let worker_data = worker_to_leader_barrier
211
- . sync ( & drt, zmq_data_worker_to_leader . as_ref ( ) )
208
+ . sync ( & drt, & ( ) )
212
209
. await
213
210
. map_err ( |e| anyhow:: anyhow!( "Failed to sync worker to leader barrier: {:?}" , e) ) ?;
214
211
@@ -245,14 +242,15 @@ impl KvbmLeader {
245
242
barrier_id_leader_to_worker
246
243
) ;
247
244
245
+ let ( leader_pub_url, leader_ack_url) = leader_urls;
248
246
let zmq_data_leader_to_worker = Arc :: new ( KvbmLeaderData {
249
- pub_url : leader_sockets_pub_url . clone ( ) ,
250
- ack_url : leader_sockets_ack_url . clone ( ) ,
247
+ pub_url : leader_pub_url ,
248
+ ack_url : leader_ack_url ,
251
249
num_host_blocks,
252
250
num_disk_blocks,
253
251
} ) ;
254
252
255
- let leader_to_worker_barrier: LeaderBarrier < KvbmLeaderData , worker :: KvbmWorkerData > =
253
+ let leader_to_worker_barrier: LeaderBarrier < KvbmLeaderData , ( ) > =
256
254
LeaderBarrier :: new (
257
255
barrier_id_leader_to_worker. clone ( ) ,
258
256
leader_config. world_size ,
0 commit comments