@@ -52,37 +52,27 @@ type snapshotInfo struct {
52
52
}
53
53
54
54
type snapshotReader struct {
55
- data []byte
56
- fileLocation string
57
- errCh chan error
55
+ reader io.Reader
56
+ errCh chan error
58
57
}
59
58
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 {
69
64
return n , err
70
65
}
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 :
79
68
}
69
+ return n , nil
80
70
}
81
71
82
- func newSnapshotReader (f string , errChan chan error ) * snapshotReader {
72
+ func newSnapshotReader (reader io. Reader , errChan chan error ) * snapshotReader {
83
73
return & snapshotReader {
84
- fileLocation : f ,
85
- errCh : errChan ,
74
+ reader : reader ,
75
+ errCh : errChan ,
86
76
}
87
77
}
88
78
@@ -394,7 +384,12 @@ var cmdCreate = &cli.Command{
394
384
break
395
385
}
396
386
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 )
398
393
399
394
go func () {
400
395
var lastSize int64
@@ -407,11 +402,11 @@ var cmdCreate = &cli.Command{
407
402
}
408
403
logger .Infow ("update" , "total" , size , "speed" , (size - lastSize )/ int64 (flagProgressUpdate / time .Second ))
409
404
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
+ }
415
410
}
416
411
}()
417
412
0 commit comments