@@ -128,7 +128,7 @@ func NewMonitor(flag *Config) (m *Monitor, e error) {
128
128
m .sizeCache , _ = lru .New (batch )
129
129
e = nil
130
130
131
- log .Info ("Loading storage data ... ..." )
131
+ log .Info ("Loading storage data ... ..." , "latest" , m . fs . LastListenBlockNumber )
132
132
133
133
fileMap := make (map [metainfo.Hash ]* FileInfo )
134
134
//files, err := m.fs.Files()
@@ -186,7 +186,6 @@ func (m *Monitor) taskLoop() {
186
186
187
187
if err := m .deal (task ); err != nil {
188
188
log .Warn ("Block dealing failed" , "err" , err )
189
- continue
190
189
}
191
190
case <- m .exitCh :
192
191
log .Info ("Monitor task channel closed" )
@@ -472,16 +471,18 @@ func (m *Monitor) parseFileMeta(tx *Transaction, meta *FileMeta) error {
472
471
return nil
473
472
}
474
473
475
- func (m * Monitor ) parseBlockTorrentInfo (b * Block ) error {
474
+ func (m * Monitor ) parseBlockTorrentInfo (b * Block ) (bool , error ) {
475
+ record := false
476
476
if len (b .Txs ) > 0 {
477
477
start := mclock .Now ()
478
478
for _ , tx := range b .Txs {
479
479
if meta := tx .Parse (); meta != nil {
480
480
log .Debug ("Try to create a file" , "meta" , meta , "number" , b .Number , "infohash" , meta .InfoHash )
481
481
if err := m .parseFileMeta (& tx , meta ); err != nil {
482
482
log .Error ("Parse file meta error" , "err" , err , "number" , b .Number )
483
- return err
483
+ return false , err
484
484
}
485
+ record = true
485
486
} else if tx .IsFlowControl () {
486
487
if tx .Recipient == nil {
487
488
continue
@@ -495,13 +496,13 @@ func (m *Monitor) parseBlockTorrentInfo(b *Block) error {
495
496
496
497
remainingSize , err := m .getRemainingSize (addr .String ())
497
498
if err != nil {
498
- return err
499
+ return false , err
499
500
}
500
501
501
502
if file .LeftSize > remainingSize {
502
503
file .LeftSize = remainingSize
503
504
if err := m .fs .WriteFile (file ); err != nil {
504
- return err
505
+ return false , err
505
506
}
506
507
507
508
log .Debug ("Update storage success" , "hash" , file .Meta .InfoHash , "left" , file .LeftSize )
@@ -519,6 +520,8 @@ func (m *Monitor) parseBlockTorrentInfo(b *Block) error {
519
520
} else {
520
521
log .Debug ("Uploading a file" , "addr" , addr , "hash" , file .Meta .InfoHash .String (), "number" , b .Number , "left" , file .LeftSize , "remain" , remainingSize , "raw" , file .Meta .RawSize )
521
522
}
523
+
524
+ record = true
522
525
}
523
526
}
524
527
elapsed := time .Duration (mclock .Now ()) - time .Duration (start )
@@ -527,7 +530,7 @@ func (m *Monitor) parseBlockTorrentInfo(b *Block) error {
527
530
}
528
531
}
529
532
530
- return nil
533
+ return record , nil
531
534
}
532
535
533
536
func (m * Monitor ) Stop () {
@@ -919,44 +922,36 @@ func (m *Monitor) syncLastBlock() uint64 {
919
922
return uint64 (maxNumber - minNumber )
920
923
}
921
924
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
933
935
}
934
936
937
+ log .Debug ("Confirm to seal the fs record" , "number" , i , "cap" , len (m .taskCh ), "record" , record )
935
938
} 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
947
943
}
944
+
945
+ log .Debug ("Confirm to seal the fs record" , "number" , i , "cap" , len (m .taskCh ))
948
946
}
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
953
947
}
954
- m .blockCache .Add (i , rpcBlock .Hash .Hex ())
948
+
949
+ m .blockCache .Add (i , block .Hash .Hex ())
955
950
}
956
951
return nil
957
952
}
958
953
959
- func (m * Monitor ) parseAndStore (block * Block ) error {
954
+ /* func (m *Monitor) parseAndStore(block *Block) error {
960
955
if parseErr := m.parseBlockTorrentInfo(block); parseErr != nil {
961
956
log.Error("Parse new block", "number", block.Number, "block", block, "error", parseErr)
962
957
return parseErr
@@ -967,4 +962,4 @@ func (m *Monitor) parseAndStore(block *Block) error {
967
962
return storeErr
968
963
}
969
964
return nil
970
- }
965
+ }*/
0 commit comments