@@ -52,37 +52,27 @@ type snapshotInfo struct {
5252}
5353
5454type snapshotReader struct {
55- data []byte
56- fileLocation string
57- errCh chan error
55+ reader io.Reader
56+ errCh chan error
5857}
5958
60- func (sr * snapshotReader ) Read (p []byte ) (n int , err error ) {
61- r , err := os .OpenFile (sr .fileLocation , os .O_RDONLY , 444 )
62- if err != nil {
63- return n , err
64- }
65- defer r .Close ()
66- for {
67- n , err := r .Read (p )
68- if err != nil && err != io .EOF {
59+ func (sr * snapshotReader ) Read (p []byte ) (n int , err error ) {
60+ n , _ = sr .reader .Read (p )
61+ select {
62+ case err := <- sr .errCh :
63+ if err != nil {
6964 return n , err
7065 }
71- select {
72- case err := <- sr .errCh :
73- if err != nil {
74- return n , err
75- }
76- return n , io .EOF
77- default :
78- }
66+ return n , io .EOF
67+ default :
7968 }
69+ return n , nil
8070}
8171
82- func newSnapshotReader (f string , errChan chan error ) * snapshotReader {
72+ func newSnapshotReader (reader io. Reader , errChan chan error ) * snapshotReader {
8373 return & snapshotReader {
84- fileLocation : f ,
85- errCh : errChan ,
74+ reader : reader ,
75+ errCh : errChan ,
8676 }
8777}
8878
@@ -394,7 +384,12 @@ var cmdCreate = &cli.Command{
394384 break
395385 }
396386
397- rr := newSnapshotReader (rrPath , errCh )
387+ f , err := os .OpenFile (rrPath , os .O_RDONLY , 444 )
388+ if err != nil {
389+ return err
390+ }
391+ defer f .Close ()
392+ rr := newSnapshotReader (f , errCh )
398393
399394 go func () {
400395 var lastSize int64
@@ -407,11 +402,11 @@ var cmdCreate = &cli.Command{
407402 }
408403 logger .Infow ("update" , "total" , size , "speed" , (size - lastSize )/ int64 (flagProgressUpdate / time .Second ))
409404 lastSize = size
410- case err := <- errCh :
411- if err != nil {
412- break
413- }
414- }
405+ case err := <- errCh :
406+ if err != nil {
407+ break
408+ }
409+ }
415410 }
416411 }()
417412
0 commit comments