Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Commit 60554e1

Browse files
authored
Keep sessions in window for the full unfinalized chain (#6054)
* Impl dynamic window size. Keep sessions for unfinalized chain Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * feedback Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * Stretch also in contructor plus tests Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * review feedback Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * fix approval-voting tests Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> * grunting: dispute coordinator tests Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>
1 parent 4ddf0ff commit 60554e1

File tree

4 files changed

+432
-11
lines changed

4 files changed

+432
-11
lines changed

node/core/approval-voting/src/import.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1296,6 +1296,38 @@ pub(crate) mod tests {
12961296
}
12971297
);
12981298

1299+
// Caching of sesssions needs sessoion of first unfinalied block.
1300+
assert_matches!(
1301+
handle.recv().await,
1302+
AllMessages::ChainApi(ChainApiMessage::FinalizedBlockNumber(
1303+
s_tx,
1304+
)) => {
1305+
let _ = s_tx.send(Ok(header.number));
1306+
}
1307+
);
1308+
1309+
assert_matches!(
1310+
handle.recv().await,
1311+
AllMessages::ChainApi(ChainApiMessage::FinalizedBlockHash(
1312+
block_number,
1313+
s_tx,
1314+
)) => {
1315+
assert_eq!(block_number, header.number);
1316+
let _ = s_tx.send(Ok(Some(header.hash())));
1317+
}
1318+
);
1319+
1320+
assert_matches!(
1321+
handle.recv().await,
1322+
AllMessages::RuntimeApi(RuntimeApiMessage::Request(
1323+
h,
1324+
RuntimeApiRequest::SessionIndexForChild(s_tx),
1325+
)) => {
1326+
assert_eq!(h, header.hash());
1327+
let _ = s_tx.send(Ok(session));
1328+
}
1329+
);
1330+
12991331
// determine_new_blocks exits early as the parent_hash is in the DB
13001332

13011333
assert_matches!(

node/core/approval-voting/src/tests.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -807,6 +807,37 @@ async fn import_block(
807807
}
808808
);
809809

810+
assert_matches!(
811+
overseer_recv(overseer).await,
812+
AllMessages::ChainApi(ChainApiMessage::FinalizedBlockNumber(
813+
s_tx,
814+
)) => {
815+
let _ = s_tx.send(Ok(number));
816+
}
817+
);
818+
819+
assert_matches!(
820+
overseer_recv(overseer).await,
821+
AllMessages::ChainApi(ChainApiMessage::FinalizedBlockHash(
822+
block_number,
823+
s_tx,
824+
)) => {
825+
assert_eq!(block_number, number);
826+
let _ = s_tx.send(Ok(Some(hashes[number as usize].0)));
827+
}
828+
);
829+
830+
assert_matches!(
831+
overseer_recv(overseer).await,
832+
AllMessages::RuntimeApi(RuntimeApiMessage::Request(
833+
h,
834+
RuntimeApiRequest::SessionIndexForChild(s_tx),
835+
)) => {
836+
assert_eq!(h, hashes[number as usize].0);
837+
let _ = s_tx.send(Ok(number.into()));
838+
}
839+
);
840+
810841
if !fork {
811842
assert_matches!(
812843
overseer_recv(overseer).await,

node/core/dispute-coordinator/src/tests.rs

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,13 +239,15 @@ impl TestState {
239239
)))
240240
.await;
241241

242-
self.handle_sync_queries(virtual_overseer, block_hash, session).await;
242+
self.handle_sync_queries(virtual_overseer, block_hash, block_number, session)
243+
.await;
243244
}
244245

245246
async fn handle_sync_queries(
246247
&mut self,
247248
virtual_overseer: &mut VirtualOverseer,
248249
block_hash: Hash,
250+
block_number: BlockNumber,
249251
session: SessionIndex,
250252
) {
251253
// Order of messages is not fixed (different on initializing):
@@ -278,11 +280,45 @@ impl TestState {
278280
finished_steps.got_session_information = true;
279281
assert_eq!(h, block_hash);
280282
let _ = tx.send(Ok(session));
283+
284+
// Queries for fetching earliest unfinalized block session. See `RollingSessionWindow`.
285+
assert_matches!(
286+
overseer_recv(virtual_overseer).await,
287+
AllMessages::ChainApi(ChainApiMessage::FinalizedBlockNumber(
288+
s_tx,
289+
)) => {
290+
let _ = s_tx.send(Ok(block_number));
291+
}
292+
);
293+
294+
assert_matches!(
295+
overseer_recv(virtual_overseer).await,
296+
AllMessages::ChainApi(ChainApiMessage::FinalizedBlockHash(
297+
number,
298+
s_tx,
299+
)) => {
300+
assert_eq!(block_number, number);
301+
let _ = s_tx.send(Ok(Some(block_hash)));
302+
}
303+
);
304+
305+
assert_matches!(
306+
overseer_recv(virtual_overseer).await,
307+
AllMessages::RuntimeApi(RuntimeApiMessage::Request(
308+
h,
309+
RuntimeApiRequest::SessionIndexForChild(s_tx),
310+
)) => {
311+
assert_eq!(h, block_hash);
312+
let _ = s_tx.send(Ok(session));
313+
}
314+
);
315+
281316
// No queries, if subsystem knows about this session already.
282317
if self.known_session == Some(session) {
283318
continue
284319
}
285320
self.known_session = Some(session);
321+
286322
loop {
287323
// answer session info queries until the current session is reached.
288324
assert_matches!(
@@ -361,7 +397,8 @@ impl TestState {
361397
)))
362398
.await;
363399

364-
self.handle_sync_queries(virtual_overseer, *leaf, session).await;
400+
self.handle_sync_queries(virtual_overseer, *leaf, n as BlockNumber, session)
401+
.await;
365402
}
366403
}
367404

0 commit comments

Comments
 (0)