prover loop: no records-indexing poll until the node's exec follower holds a record (ledger N7, PC 1 on 0.3.18)
The 0.3.18 clock-sample gate stopped one caller; the prover's first igneum_getAssignedShards after the node reads synced killed PC 1's 0.3.17 node the same way (rpc.rs:808, records[1..=0] on an empty vector) because its follower loads after the sync flag. The loop now waits on igneum_getExecStatus's executedTipHash, the same gate. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
0d05308e8d
commit
927895a69d
2 changed files with 11 additions and 1 deletions
|
|
@ -478,6 +478,16 @@ fn loop_forever(shared: Arc<Shared>, bin_dir: PathBuf) {
|
|||
});
|
||||
continue;
|
||||
}
|
||||
// ledger N7 (7 October 2026, PC 1 on 0.3.18): a node before the exec RPC fix dies on igneum_getAssignedShards
|
||||
// and igneum_getProofRecords when its exec follower holds no record (rpc.rs slices records[1..=0]), and the
|
||||
// node reads synced seconds before a slow follower has one; nothing below asks until the follower reports a tip
|
||||
if !crate::update::exec_has_record(shared.runtime.evm_port()) {
|
||||
set(&shared, |p| {
|
||||
p.status = "waiting".into();
|
||||
p.message = "waiting for the node's execution layer".into();
|
||||
});
|
||||
continue;
|
||||
}
|
||||
// 1. the keys and the work list
|
||||
let labels = labels(&shared);
|
||||
let mut keys: Vec<(String, String)> = Vec::new();
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ fn days_from_civil(y: i64, m: i64, d: i64) -> i64 {
|
|||
|
||||
/// True once the node's exec follower holds a record (igneum_getExecStatus's executedTipHash is set). Any error or an
|
||||
/// unreachable node reads false: the block sample waits rather than asks.
|
||||
fn exec_has_record(evm_port: u16) -> bool {
|
||||
pub fn exec_has_record(evm_port: u16) -> bool {
|
||||
let body = "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"igneum_getExecStatus\",\"params\":[]}";
|
||||
let out = crate::detect::run_timeout(
|
||||
Command::new(crate::platform::tool("curl")).args(["-s", "--max-time", "5", "-X", "POST", &format!("http://127.0.0.1:{evm_port}"), "-H", "Content-Type: application/json", "-d", body]),
|
||||
|
|
|
|||
Loading…
Reference in a new issue