@@ -1428,6 +1428,29 @@ def run_initial_tcb_version_checks(const_args):
14281428 assert False , "No TCB_version found in recovery ledger"
14291429
14301430
1431+ def wait_for_sealed_secrets (node , min_seqno = 0 , timeout = 10 ):
1432+ out , _ = node .remote .get_logs ()
1433+ start = time .time ()
1434+ while time .time () < start + timeout :
1435+ with open (out , "r" ) as outf :
1436+ for line in outf .readlines ():
1437+ if "Sealing complete of ledger secret to" in line :
1438+ try :
1439+ path = line .split ()[- 1 ]
1440+ filename = os .path .basename (path )
1441+ seqno = int (filename .split ("." )[0 ])
1442+ if seqno >= min_seqno :
1443+ return
1444+ except (IndexError , ValueError ):
1445+ continue
1446+
1447+ time .sleep (0.1 )
1448+
1449+ raise TimeoutError (
1450+ f"Could not find sealed secrets for seqno { min_seqno } after { timeout } s in logs"
1451+ )
1452+
1453+
14311454def run_recovery_local_unsealing (
14321455 const_args , recovery_f = 0 , rekey = False , recovery_shares_refresh = False
14331456):
@@ -1444,10 +1467,19 @@ def run_recovery_local_unsealing(
14441467
14451468 primary , _ = network .find_primary ()
14461469 if rekey :
1470+ network .wait_for_node_commit_sync ()
1471+ with primary .client () as c :
1472+ r = c .get ("/node/commit" ).body .json ()
1473+ min_seqno = TxID .from_str (r ["transaction_id" ]).seqno
14471474 network .consortium .trigger_ledger_rekey (primary )
1475+ else :
1476+ min_seqno = 0
14481477 if recovery_shares_refresh :
14491478 network .consortium .trigger_recovery_shares_refresh (primary )
14501479
1480+ for node in network .nodes :
1481+ wait_for_sealed_secrets (node , min_seqno = min_seqno )
1482+
14511483 node_secret_map = {
14521484 node .local_node_id : node .save_sealed_ledger_secret ()
14531485 for node in network .nodes
@@ -1503,6 +1535,8 @@ def run_recovery_unsealing_validate_audit(const_args):
15031535 network .start_and_open (args )
15041536
15051537 network .save_service_identity (args )
1538+ for node in network .nodes :
1539+ wait_for_sealed_secrets (node )
15061540 node0_secrets = network .nodes [0 ].save_sealed_ledger_secret ()
15071541
15081542 latest_public_tables , _ = network .get_latest_ledger_public_state ()
@@ -1586,6 +1620,8 @@ def run_recovery_unsealing_corrupt(const_args, recovery_f=0):
15861620 network .start_and_open (args )
15871621
15881622 network .save_service_identity (args )
1623+ for node in network .nodes :
1624+ wait_for_sealed_secrets (node )
15891625
15901626 node_secret_map = {
15911627 node .local_node_id : node .save_sealed_ledger_secret ()
0 commit comments