Просмотр исходного кода

darkfid/task/sync: handle proposals appending errors

skoupidi 1 год назад
Родитель
Сommit
02a8652eb9
1 измененных файлов с 13 добавлено и 3 удалено
  1. 13 3
      bin/darkfid/src/task/sync.rs

+ 13 - 3
bin/darkfid/src/task/sync.rs

@@ -395,7 +395,7 @@ async fn retrieve_blocks(
     let mut received_blocks = 0;
     let total = node.validator.blockchain.headers.len_sync();
     'blocks_loop: loop {
-        for (index, peer) in peers.iter().enumerate() {
+        'peers_loop: for (index, peer) in peers.iter().enumerate() {
             // Grab the response sub reference
             let Some(ref response_sub) = peer_subs[index] else {
                 continue;
@@ -430,10 +430,20 @@ async fn retrieve_blocks(
             debug!(target: "darkfid::task::sync::retrieve_blocks", "Processing received blocks");
             received_blocks += response.blocks.len();
             if checkpoint_blocks {
-                node.validator.add_checkpoint_blocks(&response.blocks, &headers_hashes).await?;
+                if let Err(e) =
+                    node.validator.add_checkpoint_blocks(&response.blocks, &headers_hashes).await
+                {
+                    debug!(target: "darkfid::task::sync::retrieve_blocks", "Error while adding checkpoint blocks: {e}");
+                    continue
+                };
             } else {
                 for block in &response.blocks {
-                    node.validator.append_proposal(&Proposal::new(block.clone())).await?;
+                    if let Err(e) =
+                        node.validator.append_proposal(&Proposal::new(block.clone())).await
+                    {
+                        debug!(target: "darkfid::task::sync::retrieve_blocks", "Error while appending proposal: {e}");
+                        continue 'peers_loop
+                    };
                 }
             }
             last_received = (*synced_headers.last().unwrap(), *headers_hashes.last().unwrap());