Skip to content

Commit df29492

Browse files
authored
Merge pull request #52 from rustaceanrob/9-9-header-presync
Remove needless loop in presync
2 parents 77fa04d + 6a66cb8 commit df29492

File tree

1 file changed

+57
-54
lines changed

1 file changed

+57
-54
lines changed

node/src/lib.rs

Lines changed: 57 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -99,66 +99,69 @@ pub fn sync_block_headers(
9999
Err(_) => continue,
100100
};
101101
tracing::info!("Connection established");
102-
let mut get_next = true;
103-
loop {
104-
let mut kill = false;
105-
if get_next {
106-
let curr = chainman.best_header().block_hash().hash;
107-
let locator = BlockHash::from_byte_array(curr);
108-
let getheaders = GetHeadersMessage {
109-
version: PROTOCOL_VERSION,
110-
locator_hashes: vec![locator],
111-
stop_hash: BlockHash::GENESIS_PREVIOUS_BLOCK_HASH,
112-
};
113-
tracing::info!("Requesting {locator}");
114-
if writer
115-
.send_message(NetworkMessage::GetHeaders(getheaders))
116-
.is_err()
117-
{
118-
break;
119-
}
120-
}
121-
while let Ok(Some(message)) = reader.read_message() {
122-
match message {
123-
NetworkMessage::Headers(message) => {
124-
for header in message.0 {
125-
chainman
126-
.process_new_block_headers(&consensus::serialize(&header), true)
127-
.expect("process headers failed");
128-
get_next = true;
129-
if header.block_hash().eq(&stop_hash) {
130-
tracing::info!("Done syncing block headers");
131-
if let Some(message_rate) =
132-
metrics.message_rate(p2p::TimedMessage::BlockHeaders)
133-
{
134-
let mps = message_rate
135-
.messages_per_secs(Instant::now())
136-
.unwrap_or(0.);
137-
tracing::info!("Peer responses per second: {mps}");
138-
}
139-
elapsed_time(then);
140-
return;
102+
let curr = chainman.best_header().block_hash().hash;
103+
let locator = BlockHash::from_byte_array(curr);
104+
if locator.eq(&stop_hash) {
105+
tracing::info!("Using existing header state");
106+
return;
107+
}
108+
let getheaders = GetHeadersMessage {
109+
version: PROTOCOL_VERSION,
110+
locator_hashes: vec![locator],
111+
stop_hash: BlockHash::GENESIS_PREVIOUS_BLOCK_HASH,
112+
};
113+
tracing::info!("Requesting {locator}");
114+
if writer
115+
.send_message(NetworkMessage::GetHeaders(getheaders))
116+
.is_err()
117+
{
118+
continue;
119+
}
120+
while let Ok(Some(message)) = reader.read_message() {
121+
match message {
122+
NetworkMessage::Headers(message) => {
123+
for header in message.0 {
124+
chainman
125+
.process_new_block_headers(&consensus::serialize(&header), true)
126+
.expect("process headers failed");
127+
if header.block_hash().eq(&stop_hash) {
128+
tracing::info!("Done syncing block headers");
129+
if let Some(message_rate) =
130+
metrics.message_rate(p2p::TimedMessage::BlockHeaders)
131+
{
132+
let mps =
133+
message_rate.messages_per_secs(Instant::now()).unwrap_or(0.);
134+
tracing::info!("Peer responses per second: {mps}");
141135
}
136+
elapsed_time(then);
137+
return;
142138
}
143-
tracing::info!("Update chain tip: {}", chainman.best_header().height());
144-
break;
145139
}
146-
NetworkMessage::Inv(_) => {
147-
kill = true;
140+
tracing::info!("Update chain tip: {}", chainman.best_header().height());
141+
let curr = chainman.best_header().block_hash().hash;
142+
let locator = BlockHash::from_byte_array(curr);
143+
let getheaders = GetHeadersMessage {
144+
version: PROTOCOL_VERSION,
145+
locator_hashes: vec![locator],
146+
stop_hash: BlockHash::GENESIS_PREVIOUS_BLOCK_HASH,
147+
};
148+
tracing::info!("Requesting {locator}");
149+
if writer
150+
.send_message(NetworkMessage::GetHeaders(getheaders))
151+
.is_err()
152+
{
148153
break;
149154
}
150-
NetworkMessage::Ping(nonce) => {
151-
get_next = false;
152-
let _ = writer.send_message(NetworkMessage::Pong(nonce));
153-
}
154-
e => {
155-
get_next = false;
156-
tracing::info!("Ignoring message {}", e.command());
157-
}
158155
}
159-
}
160-
if kill {
161-
break;
156+
NetworkMessage::Inv(_) => {
157+
break;
158+
}
159+
NetworkMessage::Ping(nonce) => {
160+
let _ = writer.send_message(NetworkMessage::Pong(nonce));
161+
}
162+
e => {
163+
tracing::info!("Ignoring message {}", e.command());
164+
}
162165
}
163166
}
164167
}

0 commit comments

Comments
 (0)