Skip to content

Commit d527c54

Browse files
committed
Implement retry mechanism with exponential backoff for DHT record retrieval
1 parent eb13072 commit d527c54

File tree

1 file changed

+34
-4
lines changed

1 file changed

+34
-4
lines changed

src/group.rs

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -280,11 +280,41 @@ impl Group {
280280
let keypair = None;
281281

282282
let veilid = self.get_veilid_api();
283+
let mut dht_record: Option<DHTRecordDescriptor> = None;
284+
let mut retries = 6;
283285

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"))?;
288318

289319
let repo = Repo {
290320
dht_record,

0 commit comments

Comments
 (0)