File tree 1 file changed +34
-4
lines changed 1 file changed +34
-4
lines changed Original file line number Diff line number Diff line change @@ -280,11 +280,41 @@ impl Group {
280
280
let keypair = None ;
281
281
282
282
let veilid = self . get_veilid_api ( ) ;
283
+ let mut dht_record: Option < DHTRecordDescriptor > = None ;
284
+ let mut retries = 6 ;
283
285
284
- let dht_record = self
285
- . routing_context
286
- . open_dht_record ( repo_id. clone ( ) , keypair)
287
- . await ?;
286
+ while retries > 0 {
287
+ retries -= 1 ;
288
+ let dht_record_result = self
289
+ . routing_context
290
+ . open_dht_record ( repo_id. clone ( ) , keypair. clone ( ) )
291
+ . await ;
292
+
293
+ match dht_record_result {
294
+ Ok ( record) => {
295
+ dht_record = Some ( record) ;
296
+ break ;
297
+ }
298
+ Err ( e) => {
299
+ eprintln ! (
300
+ "Failed to open DHT record: {}. Retries left: {}" ,
301
+ e, retries
302
+ ) ;
303
+ if retries == 0 {
304
+ return Err ( anyhow ! (
305
+ "Unable to open DHT record, reached max retries: {}" ,
306
+ e
307
+ ) ) ;
308
+ }
309
+ }
310
+ }
311
+
312
+ // Add a delay before retrying (wit exponential backoff)
313
+ tokio:: time:: sleep ( std:: time:: Duration :: from_millis ( 100 * ( 7 - retries) as u64 ) ) . await ;
314
+ }
315
+
316
+ // Ensure that `dht_record` is set before proceeding
317
+ let dht_record = dht_record. ok_or_else ( || anyhow ! ( "DHT record retrieval failed" ) ) ?;
288
318
289
319
let repo = Repo {
290
320
dht_record,
You can’t perform that action at this time.
0 commit comments