@@ -396,8 +396,8 @@ func inspectTrie(ctx *cli.Context) error {
396396 var headerBlockHash common.Hash
397397 if ctx .NArg () >= 1 {
398398 if ctx .Args ().Get (0 ) == "latest" {
399- headerHash := rawdb .ReadHeadHeaderHash (db )
400- blockNumber = * (rawdb .ReadHeaderNumber (db , headerHash ))
399+ headerHash := rawdb .ReadHeadHeaderHash (db . BlockStore () )
400+ blockNumber = * (rawdb .ReadHeaderNumber (db . BlockStore () , headerHash ))
401401 } else if ctx .Args ().Get (0 ) == "snapshot" {
402402 trieRootHash = rawdb .ReadSnapshotRoot (db )
403403 blockNumber = math .MaxUint64
@@ -519,14 +519,19 @@ func checkStateContent(ctx *cli.Context) error {
519519 db := utils .MakeChainDatabase (ctx , stack , true , false )
520520 defer db .Close ()
521521 var (
522- it = rawdb . NewKeyLengthIterator ( db . NewIterator ( prefix , start ), 32 )
522+ it ethdb. Iterator
523523 hasher = crypto .NewKeccakState ()
524524 got = make ([]byte , 32 )
525525 errs int
526526 count int
527527 startTime = time .Now ()
528528 lastLog = time .Now ()
529529 )
530+ if stack .CheckIfMultiDataBase () {
531+ it = rawdb .NewKeyLengthIterator (db .StateStore ().NewIterator (prefix , start ), 32 )
532+ } else {
533+ it = rawdb .NewKeyLengthIterator (db .NewIterator (prefix , start ), 32 )
534+ }
530535 for it .Next () {
531536 count ++
532537 k := it .Key ()
@@ -573,9 +578,11 @@ func dbStats(ctx *cli.Context) error {
573578 defer db .Close ()
574579
575580 showLeveldbStats (db )
576- if db . StateStore () != nil {
581+ if stack . CheckIfMultiDataBase () {
577582 fmt .Println ("show stats of state store" )
578583 showLeveldbStats (db .StateStore ())
584+ fmt .Println ("show stats of block store" )
585+ showLeveldbStats (db .BlockStore ())
579586 }
580587
581588 return nil
@@ -591,10 +598,11 @@ func dbCompact(ctx *cli.Context) error {
591598 log .Info ("Stats before compaction" )
592599 showLeveldbStats (db )
593600
594- statediskdb := db .StateStore ()
595- if statediskdb != nil {
601+ if stack .CheckIfMultiDataBase () {
596602 fmt .Println ("show stats of state store" )
597- showLeveldbStats (statediskdb )
603+ showLeveldbStats (db .StateStore ())
604+ fmt .Println ("show stats of block store" )
605+ showLeveldbStats (db .BlockStore ())
598606 }
599607
600608 log .Info ("Triggering compaction" )
@@ -603,18 +611,24 @@ func dbCompact(ctx *cli.Context) error {
603611 return err
604612 }
605613
606- if statediskdb != nil {
607- if err := statediskdb .Compact (nil , nil ); err != nil {
614+ if stack .CheckIfMultiDataBase () {
615+ if err := db .StateStore ().Compact (nil , nil ); err != nil {
616+ log .Error ("Compact err" , "error" , err )
617+ return err
618+ }
619+ if err := db .BlockStore ().Compact (nil , nil ); err != nil {
608620 log .Error ("Compact err" , "error" , err )
609621 return err
610622 }
611623 }
612624
613625 log .Info ("Stats after compaction" )
614626 showLeveldbStats (db )
615- if statediskdb != nil {
627+ if stack . CheckIfMultiDataBase () {
616628 fmt .Println ("show stats of state store after compaction" )
617- showLeveldbStats (statediskdb )
629+ showLeveldbStats (db .StateStore ())
630+ fmt .Println ("show stats of block store after compaction" )
631+ showLeveldbStats (db .BlockStore ())
618632 }
619633 return nil
620634}
@@ -635,18 +649,18 @@ func dbGet(ctx *cli.Context) error {
635649 log .Info ("Could not decode the key" , "error" , err )
636650 return err
637651 }
652+ opDb := db
653+ if stack .CheckIfMultiDataBase () {
654+ keyType := rawdb .DataTypeByKey (key )
655+ if keyType == rawdb .StateDataType {
656+ opDb = db .StateStore ()
657+ } else if keyType == rawdb .BlockDataType {
658+ opDb = db .BlockStore ()
659+ }
660+ }
638661
639- statediskdb := db .StateStore ()
640- data , err := db .Get (key )
662+ data , err := opDb .Get (key )
641663 if err != nil {
642- // if separate trie db exist, try to get it from separate db
643- if statediskdb != nil {
644- statedata , dberr := statediskdb .Get (key )
645- if dberr == nil {
646- fmt .Printf ("key %#x: %#x\n " , key , statedata )
647- return nil
648- }
649- }
650664 log .Info ("Get operation failed" , "key" , fmt .Sprintf ("%#x" , key ), "error" , err )
651665 return err
652666 }
@@ -809,11 +823,21 @@ func dbDelete(ctx *cli.Context) error {
809823 log .Info ("Could not decode the key" , "error" , err )
810824 return err
811825 }
812- data , err := db .Get (key )
826+ opDb := db
827+ if stack .CheckIfMultiDataBase () {
828+ keyType := rawdb .DataTypeByKey (key )
829+ if keyType == rawdb .StateDataType {
830+ opDb = db .StateStore ()
831+ } else if keyType == rawdb .BlockDataType {
832+ opDb = db .BlockStore ()
833+ }
834+ }
835+
836+ data , err := opDb .Get (key )
813837 if err == nil {
814838 fmt .Printf ("Previous value: %#x\n " , data )
815839 }
816- if err = db .Delete (key ); err != nil {
840+ if err = opDb .Delete (key ); err != nil {
817841 log .Info ("Delete operation returned an error" , "key" , fmt .Sprintf ("%#x" , key ), "error" , err )
818842 return err
819843 }
@@ -923,11 +947,22 @@ func dbPut(ctx *cli.Context) error {
923947 log .Info ("Could not decode the value" , "error" , err )
924948 return err
925949 }
926- data , err = db .Get (key )
950+
951+ opDb := db
952+ if stack .CheckIfMultiDataBase () {
953+ keyType := rawdb .DataTypeByKey (key )
954+ if keyType == rawdb .StateDataType {
955+ opDb = db .StateStore ()
956+ } else if keyType == rawdb .BlockDataType {
957+ opDb = db .BlockStore ()
958+ }
959+ }
960+
961+ data , err = opDb .Get (key )
927962 if err == nil {
928963 fmt .Printf ("Previous value: %#x\n " , data )
929964 }
930- return db .Put (key , value )
965+ return opDb .Put (key , value )
931966}
932967
933968// dbDumpTrie shows the key-value slots of a given storage trie
@@ -940,7 +975,6 @@ func dbDumpTrie(ctx *cli.Context) error {
940975
941976 db := utils .MakeChainDatabase (ctx , stack , true , false )
942977 defer db .Close ()
943-
944978 triedb := utils .MakeTrieDatabase (ctx , db , false , true , false )
945979 defer triedb .Close ()
946980
@@ -1019,7 +1053,7 @@ func freezerInspect(ctx *cli.Context) error {
10191053 stack , _ := makeConfigNode (ctx )
10201054 ancient := stack .ResolveAncient ("chaindata" , ctx .String (utils .AncientFlag .Name ))
10211055 stack .Close ()
1022- return rawdb .InspectFreezerTable (ancient , freezer , table , start , end )
1056+ return rawdb .InspectFreezerTable (ancient , freezer , table , start , end , stack . CheckIfMultiDataBase () )
10231057}
10241058
10251059func importLDBdata (ctx * cli.Context ) error {
@@ -1159,11 +1193,11 @@ func showMetaData(ctx *cli.Context) error {
11591193 defer stack .Close ()
11601194 db := utils .MakeChainDatabase (ctx , stack , true , false )
11611195 defer db .Close ()
1162- ancients , err := db .Ancients ()
1196+ ancients , err := db .BlockStore (). Ancients ()
11631197 if err != nil {
11641198 fmt .Fprintf (os .Stderr , "Error accessing ancients: %v" , err )
11651199 }
1166- data := rawdb .ReadChainMetadata (db )
1200+ data := rawdb .ReadChainMetadataFromMultiDatabase (db )
11671201 data = append (data , []string {"frozen" , fmt .Sprintf ("%d items" , ancients )})
11681202 data = append (data , []string {"snapshotGenerator" , snapshot .ParseGeneratorStatus (rawdb .ReadSnapshotGenerator (db ))})
11691203 if b := rawdb .ReadHeadBlock (db ); b != nil {
@@ -1224,8 +1258,8 @@ func hbss2pbss(ctx *cli.Context) error {
12241258 log .Info ("hbss2pbss triedb" , "scheme" , triedb .Scheme ())
12251259 defer triedb .Close ()
12261260
1227- headerHash := rawdb .ReadHeadHeaderHash (db )
1228- blockNumber := rawdb .ReadHeaderNumber (db , headerHash )
1261+ headerHash := rawdb .ReadHeadHeaderHash (db . BlockStore () )
1262+ blockNumber := rawdb .ReadHeaderNumber (db . BlockStore () , headerHash )
12291263 if blockNumber == nil {
12301264 log .Error ("read header number failed." )
12311265 return fmt .Errorf ("read header number failed" )
0 commit comments