@@ -128,7 +128,7 @@ func NewMonitor(flag *Config) (m *Monitor, e error) {
128128 m .sizeCache , _ = lru .New (batch )
129129 e = nil
130130
131- log .Info ("Loading storage data ... ..." )
131+ log .Info ("Loading storage data ... ..." , "latest" , m . fs . LastListenBlockNumber )
132132
133133 fileMap := make (map [metainfo.Hash ]* FileInfo )
134134 //files, err := m.fs.Files()
@@ -186,7 +186,6 @@ func (m *Monitor) taskLoop() {
186186
187187 if err := m .deal (task ); err != nil {
188188 log .Warn ("Block dealing failed" , "err" , err )
189- continue
190189 }
191190 case <- m .exitCh :
192191 log .Info ("Monitor task channel closed" )
@@ -472,16 +471,18 @@ func (m *Monitor) parseFileMeta(tx *Transaction, meta *FileMeta) error {
472471 return nil
473472}
474473
475- func (m * Monitor ) parseBlockTorrentInfo (b * Block ) error {
474+ func (m * Monitor ) parseBlockTorrentInfo (b * Block ) (bool , error ) {
475+ record := false
476476 if len (b .Txs ) > 0 {
477477 start := mclock .Now ()
478478 for _ , tx := range b .Txs {
479479 if meta := tx .Parse (); meta != nil {
480480 log .Debug ("Try to create a file" , "meta" , meta , "number" , b .Number , "infohash" , meta .InfoHash )
481481 if err := m .parseFileMeta (& tx , meta ); err != nil {
482482 log .Error ("Parse file meta error" , "err" , err , "number" , b .Number )
483- return err
483+ return false , err
484484 }
485+ record = true
485486 } else if tx .IsFlowControl () {
486487 if tx .Recipient == nil {
487488 continue
@@ -495,13 +496,13 @@ func (m *Monitor) parseBlockTorrentInfo(b *Block) error {
495496
496497 remainingSize , err := m .getRemainingSize (addr .String ())
497498 if err != nil {
498- return err
499+ return false , err
499500 }
500501
501502 if file .LeftSize > remainingSize {
502503 file .LeftSize = remainingSize
503504 if err := m .fs .WriteFile (file ); err != nil {
504- return err
505+ return false , err
505506 }
506507
507508 log .Debug ("Update storage success" , "hash" , file .Meta .InfoHash , "left" , file .LeftSize )
@@ -519,6 +520,8 @@ func (m *Monitor) parseBlockTorrentInfo(b *Block) error {
519520 } else {
520521 log .Debug ("Uploading a file" , "addr" , addr , "hash" , file .Meta .InfoHash .String (), "number" , b .Number , "left" , file .LeftSize , "remain" , remainingSize , "raw" , file .Meta .RawSize )
521522 }
523+
524+ record = true
522525 }
523526 }
524527 elapsed := time .Duration (mclock .Now ()) - time .Duration (start )
@@ -527,7 +530,7 @@ func (m *Monitor) parseBlockTorrentInfo(b *Block) error {
527530 }
528531 }
529532
530- return nil
533+ return record , nil
531534}
532535
533536func (m * Monitor ) Stop () {
@@ -919,44 +922,36 @@ func (m *Monitor) syncLastBlock() uint64 {
919922 return uint64 (maxNumber - minNumber )
920923}
921924
922- func (m * Monitor ) deal (rpcBlock * Block ) error {
923- i := rpcBlock .Number
924- if hash , suc := m .blockCache .Get (i ); ! suc || hash != rpcBlock .Hash .Hex () {
925-
926- /*block := m.fs.GetBlockByNumber(i)
927- if block == nil {
928- block = rpcBlock
929-
930- if err := m.parseAndStore(block, true); err != nil {
931- log.Error("Fail to parse and storge latest block", "number", i, "error", err)
932- return err
925+ func (m * Monitor ) deal (block * Block ) error {
926+ i := block .Number
927+ if hash , suc := m .blockCache .Get (i ); ! suc || hash != block .Hash .Hex () {
928+ if record , parseErr := m .parseBlockTorrentInfo (block ); parseErr != nil {
929+ log .Error ("Parse new block" , "number" , block .Number , "block" , block , "error" , parseErr )
930+ return parseErr
931+ } else if record {
932+ if storeErr := m .fs .WriteBlock (block ); storeErr != nil {
933+ log .Error ("Store latest block" , "number" , block .Number , "error" , storeErr )
934+ return storeErr
933935 }
934936
937+ log .Debug ("Confirm to seal the fs record" , "number" , i , "cap" , len (m .taskCh ), "record" , record )
935938 } else {
936- if block.Hash.Hex() == rpcBlock.Hash.Hex() {
937-
938- if parseErr := m.parseBlockTorrentInfo(block, true); parseErr != nil { //dirty to do
939- log.Error("Parse old block", "number", i, "block", block, "error", parseErr)
940- return parseErr
941- }
942- } else {
943- //dirty tfs
944- if err := m.parseAndStore(rpcBlock, true); err != nil {
945- log.Error("Dirty tfs fail to parse and storge latest block", "number", i, "error", err)
946- return err
939+ if i % batch == 0 {
940+ if storeErr := m .fs .WriteBlock (block ); storeErr != nil {
941+ log .Error ("Store latest block" , "number" , block .Number , "error" , storeErr )
942+ return storeErr
947943 }
944+
945+ log .Debug ("Confirm to seal the fs record" , "number" , i , "cap" , len (m .taskCh ))
948946 }
949- }*/
950- if err := m .parseAndStore (rpcBlock ); err != nil {
951- log .Error ("Fail to parse and storge latest block" , "number" , i , "error" , err )
952- return err
953947 }
954- m .blockCache .Add (i , rpcBlock .Hash .Hex ())
948+
949+ m .blockCache .Add (i , block .Hash .Hex ())
955950 }
956951 return nil
957952}
958953
959- func (m * Monitor ) parseAndStore (block * Block ) error {
954+ /* func (m *Monitor) parseAndStore(block *Block) error {
960955 if parseErr := m.parseBlockTorrentInfo(block); parseErr != nil {
961956 log.Error("Parse new block", "number", block.Number, "block", block, "error", parseErr)
962957 return parseErr
@@ -967,4 +962,4 @@ func (m *Monitor) parseAndStore(block *Block) error {
967962 return storeErr
968963 }
969964 return nil
970- }
965+ }*/
0 commit comments