@@ -336,13 +336,18 @@ async fn download_block_and_state(
336
336
} ;
337
337
if !handle. has_state ( ) {
338
338
let state_update = block. block ( ) . read_state_update ( ) ?;
339
- log:: info!( target: "boot" , "download state {}" , handle. id( ) ) ;
339
+ log:: info!( target: "boot" , "downloading state {}... " , handle. id( ) ) ;
340
340
let ( state, data) = engine. download_state ( handle. id ( ) , master_id, active_peers, attempts) . await ?;
341
341
let state_hash = state. root_cell ( ) . repr_hash ( ) ;
342
342
if state_update. new_hash != state_hash {
343
343
fail ! ( "root_hash {} of downloaded state {} is wrong" , state_hash. to_hex_string( ) , handle. id( ) )
344
344
}
345
+
346
+ let now = std:: time:: Instant :: now ( ) ;
347
+ log:: info!( target: "boot" , "storing state {}..." , handle. id( ) ) ;
345
348
let state = engine. store_state ( & handle, state, Some ( & data) ) . await ?;
349
+ log:: info!( target: "boot" , "stored state {} TIME: {}s" , handle. id( ) , now. elapsed( ) . as_secs( ) ) ;
350
+
346
351
engine. process_full_state_in_ext_db ( & state) . await ?;
347
352
}
348
353
engine. set_applied ( & handle, master_id. seq_no ( ) ) . await ?;
@@ -373,6 +378,9 @@ pub async fn cold_boot(engine: Arc<dyn EngineOperations>) -> Result<BlockIdExt>
373
378
Ok ( handle. id ( ) . clone ( ) )
374
379
}
375
380
381
+ /*
382
+ We don't need warm boot: restore db checks and restores db if need.
383
+
376
384
pub async fn warm_boot(
377
385
engine: Arc<dyn EngineOperations>,
378
386
block_id: Arc<BlockIdExt>
@@ -401,112 +409,4 @@ pub async fn warm_boot(
401
409
}
402
410
log::info!(target: "boot", "last key block id = {}", block_id);
403
411
Ok(block_id)
404
- }
405
-
406
- /*
407
- pub async fn cold_sync_stub(engine: Arc<Engine>) -> Result<BlockIdExt> {
408
-
409
- log::info!("cold_sync_stub");
410
-
411
- // For now we can't read key blocks chain, so start not from zerostate but from last key block
412
-
413
-
414
- let mc_overlay = engine.get_masterchain_overlay().await?;
415
- let shards_overlay = engine.get_full_node_overlay(0, SHARD_FULL).await?;
416
-
417
- let init_mc_block_handle = engine.db().load_block_handle(engine.init_mc_block_id())?;
418
-
419
- let ss = if !init_mc_block_handle.state_inited() {
420
- let ss = download_persistent_state(engine.init_mc_block_id(), engine.init_mc_block_id(), mc_overlay.deref()).await?;
421
- engine.db().store_shard_state_dynamic(&init_mc_block_handle, &ss)?;
422
- engine.process_full_state_in_ext_db(&ss).await?;
423
- ss
424
- } else {
425
- engine.load_state(&init_mc_block_handle).await?
426
- };
427
-
428
- if init_mc_block_handle.id().seq_no() == 0 {
429
- engine.db().store_block_applied(init_mc_block_handle.id())?;
430
-
431
- // load workchain zerostate
432
-
433
- let custom = ss
434
- .shard_state()
435
- .read_custom()?
436
- .ok_or_else(|| error!("No custom field in zerostate"))?;
437
- let cp12 = custom.config.config(12)?.ok_or_else(|| error!("No config param 12 in zerostate"))?;
438
-
439
- if let ConfigParamEnum::ConfigParam12(cp12) = cp12 {
440
- let wc = cp12.get(0)?.ok_or_else(|| error!("No description for base workchain"))?;
441
-
442
- let zerostate_id = BlockIdExt {
443
- shard_id: ShardIdent::with_tagged_prefix(BASE_WORKCHAIN_ID, SHARD_FULL)?,
444
- seq_no: 0,
445
- root_hash: wc.zerostate_root_hash,
446
- file_hash: wc.zerostate_file_hash,
447
- };
448
-
449
- let handle = engine.db().load_block_handle(&zerostate_id)?;
450
-
451
- if !handle.applied() {
452
- let ss = download_persistent_state(&zerostate_id, engine.init_mc_block_id(), shards_overlay.deref()).await?;
453
- engine.db().store_shard_state_dynamic(&handle, &ss)?;
454
- engine.process_full_state_in_ext_db(&ss).await?;
455
- engine.db().store_block_applied(&zerostate_id)?;
456
- }
457
-
458
- } else {
459
- fail!("Can't read config param 12")
460
- }
461
- } else {
462
-
463
- // Load master block and state
464
-
465
- let init_mc_block = if !init_mc_block_handle.data_inited() {
466
-
467
- let (block, proof) = loop {
468
- if let Ok(Some((block, proof))) = mc_overlay.download_block_full(engine.init_mc_block_id(), 300).await {
469
- break (block, proof);
470
- }
471
- };
472
- engine.db().store_block_data(&init_mc_block_handle, &block)?;
473
- engine.db().store_block_proof(&init_mc_block_handle, &proof)?;
474
- engine.process_block_in_ext_db(&init_mc_block_handle, &block, Some(&proof), &ss).await?;
475
- engine.db().store_block_applied(engine.init_mc_block_id())?;
476
- block
477
- } else {
478
- engine.db().load_block_data(engine.init_mc_block_id())?
479
- };
480
-
481
- // Load shards blocks and states
482
-
483
- for (_shard_ident, block_id) in init_mc_block.shards_blocks()? {
484
-
485
- let block_handle = engine.db().load_block_handle(&block_id)?;
486
-
487
- let ss = if !block_handle.state_inited() {
488
- let ss = download_persistent_state(&block_id, engine.init_mc_block_id(), shards_overlay.deref()).await?;
489
- engine.db().store_shard_state_dynamic(&block_handle, &ss)?;
490
- engine.process_full_state_in_ext_db(&ss).await?;
491
- ss
492
- } else {
493
- engine.load_state(&block_handle).await?
494
- };
495
-
496
- if !block_handle.data_inited() {
497
- let (block, proof) = loop {
498
- if let Ok(Some((block, proof))) = shards_overlay.download_block_full(&block_id, 30).await {
499
- break (block, proof);
500
- }
501
- };
502
- engine.db().store_block_data(&block_handle, &block)?;
503
- engine.db().store_block_proof(&block_handle, &proof)?;
504
- engine.process_block_in_ext_db(&block_handle, &block, None, &ss).await?;
505
- engine.db().store_block_applied(&block_id)?;
506
- }
507
- }
508
- }
509
-
510
- Ok(engine.init_mc_block_id().clone())
511
- }
512
- */
412
+ }*/
0 commit comments