Periodically ask for a full sync from a random peer to backfill anything * we might have missed. */
| 1077 | /* Periodically ask for a full sync from a random peer to backfill anything |
| 1078 | * we might have missed. */ |
| 1079 | static void full_sync_random_peer(struct seeker *seeker) |
| 1080 | { |
| 1081 | /* Select random peer */ |
| 1082 | struct peer *random_peer; |
| 1083 | struct peer_node_id_map_iter it; |
| 1084 | random_peer = first_random_peer(seeker->daemon, &it); |
| 1085 | if (!random_peer) { |
| 1086 | begin_sync_timer(seeker); |
| 1087 | return; |
| 1088 | } |
| 1089 | /* Don't repeatedly resync from the same node. */ |
| 1090 | if (seeker->last_full_sync_peer && seeker->last_full_sync_peer == random_peer) { |
| 1091 | struct peer *new_peer; |
| 1092 | new_peer = next_random_peer(seeker->daemon, random_peer, &it); |
| 1093 | if (new_peer) |
| 1094 | random_peer = new_peer; |
| 1095 | else { |
| 1096 | begin_sync_timer(seeker); |
| 1097 | return; |
| 1098 | } |
| 1099 | } |
| 1100 | status_peer_debug(&random_peer->id, |
| 1101 | "seeker: chosen for periodic full sync"); |
| 1102 | normal_gossip_start(seeker,random_peer, true); |
| 1103 | seeker->last_full_sync_peer = random_peer; |
| 1104 | begin_sync_timer(seeker); |
| 1105 | } |
| 1106 | |
| 1107 | static void begin_sync_timer(struct seeker *seeker) |
| 1108 | { |
nothing calls this directly
no test coverage detected