@@ -771,18 +771,18 @@ func (c *Client) ConcurrentDownloadChunkData(id string, concurrentNum int) ([]by
771
771
772
772
// it's caller's responsibility to reserve or delete the tmp file created by this method
773
773
774
- func (c * Client ) ConcurrentDownloadChunkDataStream (id string , concurrentNum int ) (* os.File , [] byte , error ) {
774
+ func (c * Client ) ConcurrentDownloadChunkDataStream (id string , concurrentNum int ) (dataFile * os.File , err error ) {
775
775
offsetResponse , err := c .getTransactionOffset (id )
776
776
if err != nil {
777
- return nil , nil , err
777
+ return nil , err
778
778
}
779
779
size , err := strconv .ParseInt (offsetResponse .Size , 10 , 64 )
780
780
if err != nil {
781
- return nil , nil , err
781
+ return nil , err
782
782
}
783
783
endOffset , err := strconv .ParseInt (offsetResponse .Offset , 10 , 64 )
784
784
if err != nil {
785
- return nil , nil , err
785
+ return nil , err
786
786
}
787
787
startOffset := endOffset - size + 1
788
788
@@ -792,17 +792,29 @@ func (c *Client) ConcurrentDownloadChunkDataStream(id string, concurrentNum int)
792
792
i += types .MAX_CHUNK_SIZE
793
793
}
794
794
795
- if len (offsetArr ) <= 3 { // not need concurrent get chunks
796
- data , err := c .DownloadChunkData (id )
797
- return nil , data , err
798
- }
799
-
800
795
log .Debug ("need download chunks length" , "length" , len (offsetArr ))
801
796
802
- dataFile , err : = os .CreateTemp ("." , "concurrent-load-chunks -" )
797
+ dataFile , err = os .CreateTemp ("." , "concurrent-load-data -" )
803
798
if err != nil {
804
- return nil , nil , err
799
+ return nil , err
800
+ }
801
+ defer func () {
802
+ if err != nil {
803
+ dataFile .Close ()
804
+ os .Remove (dataFile .Name ())
805
+ }
806
+ }()
807
+
808
+ if len (offsetArr ) <= 3 { // not need concurrent get chunks
809
+ var data []byte
810
+ data , err = c .DownloadChunkData (id )
811
+ if err != nil {
812
+ return nil , err
813
+ }
814
+ _ , err = dataFile .Write (data )
815
+ return dataFile , err
805
816
}
817
+
806
818
type Offset struct {
807
819
fileOffset int64
808
820
chunkOffset int64
@@ -845,20 +857,21 @@ func (c *Client) ConcurrentDownloadChunkDataStream(id string, concurrentNum int)
845
857
846
858
for i , offset := range offsetArr [:len (offsetArr )- 2 ] {
847
859
wg .Add (1 )
848
- if err : = p .Invoke (Offset {fileOffset : offset , chunkOffset : offset + startOffset }); err != nil {
860
+ if err = p .Invoke (Offset {fileOffset : offset , chunkOffset : offset + startOffset }); err != nil {
849
861
log .Error ("p.Invoke(i)" , "err" , err , "i" , i )
850
- return nil , nil , err
862
+ return nil , err
851
863
}
852
864
}
853
865
wg .Wait ()
854
866
_ , err = dataFile .Seek (0 , 2 )
855
867
if err != nil {
856
- return nil , nil , err
868
+ return nil , err
857
869
}
858
870
// add latest 2 chunks
859
871
start := offsetArr [len (offsetArr )- 3 ] + startOffset + types .MAX_CHUNK_SIZE
860
872
for i := 0 ; int64 (i )+ start < endOffset ; {
861
- chunkData , err := c .getChunkData (int64 (i ) + start )
873
+ var chunkData []byte
874
+ chunkData , err = c .getChunkData (int64 (i ) + start )
862
875
if err != nil {
863
876
count := 0
864
877
for count < 2 {
@@ -874,17 +887,19 @@ func (c *Client) ConcurrentDownloadChunkDataStream(id string, concurrentNum int)
874
887
}
875
888
}
876
889
if err != nil {
877
- return nil , nil , errors .New ("concurrent get latest two chunks failed" )
890
+ err = errors .New (fmt .Sprintf ("concurrent get latest two chunks failed,err:%v" , err ))
891
+ return nil , err
878
892
}
879
893
n := 0
880
894
n , err = dataFile .Write (chunkData )
881
895
if err != nil || n < len (chunkData ) {
882
- return nil , nil , fmt .Errorf ("write dataFile error writeSize:%d, expectSize:%d" , n , len (chunkData ))
896
+ err = fmt .Errorf ("write dataFile error writeSize:%d, expectSize:%d" , n , len (chunkData ))
897
+ return nil , err
883
898
}
884
899
i += len (chunkData )
885
900
}
886
901
887
- return dataFile , nil , nil
902
+ return dataFile , nil
888
903
}
889
904
890
905
func (c * Client ) GetUnconfirmedTx (arId string ) (* types.Transaction , error ) {
0 commit comments