Skip to content

Commit e7ab9b2

Browse files
authored
Merge pull request #69 from beclab/fix/get_files_size
fix: get file size
2 parents 58735c7 + fecc897 commit e7ab9b2

File tree

4 files changed

+54
-1
lines changed

4 files changed

+54
-1
lines changed

pkg/drivers/clouds/rclone/operations/operations.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
type Interface interface {
1717
List(fs string, opts *OperationsOpt) (*OperationsList, error)
1818
Stat(fs string, remote string, opts *OperationsOpt) (*OperationsStat, error)
19+
About(fs string) (*OperationsAboutResp, error)
1920
Mkdir(fs string, dirName string) error
2021
Uploadfile(fs string, dirName string) error
2122
Copyfile(srcFs string, srcR string, dstFs string, dstR string) error
@@ -97,6 +98,32 @@ func (o *operations) Stat(fs string, remote string, opts *OperationsOpt) (*Opera
9798
return data, nil
9899
}
99100

101+
func (o *operations) About(fs string) (*OperationsAboutResp, error) {
102+
var url = fmt.Sprintf("%s/%s", common.ServeAddr, AboutPath)
103+
104+
var param = OperationsReq{
105+
Fs: fs, // xxx:yyy
106+
}
107+
108+
klog.Infof("[rclone] operations about, param: %s", commonutils.ToJson(param))
109+
110+
resp, err := utils.Request(context.Background(), url, http.MethodPost, nil, []byte(commonutils.ToJson(param)))
111+
if err != nil {
112+
klog.Errorf("[rclone] operations about error: %v, fs: %s", err, fs)
113+
return nil, err
114+
}
115+
116+
var data *OperationsAboutResp
117+
if err := json.Unmarshal(resp, &data); err != nil {
118+
klog.Errorf("[rclone] operations about unmarshal error: %v, fs: %s", err, fs)
119+
return nil, err
120+
}
121+
122+
klog.Infof("[rclone] operations about done! fs: %s, data: %s", fs, commonutils.ToJson(data))
123+
124+
return data, nil
125+
}
126+
100127
func (o *operations) Copyfile(srcFs string, srcR string, dstFs string, dstR string) error {
101128
var url = fmt.Sprintf("%s/%s", common.ServeAddr, CopyfilePath)
102129
var async = false

pkg/drivers/clouds/rclone/operations/vars.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ var (
1010
PurgePath = "operations/purge"
1111
StatPath = "operations/stat"
1212
SizePath = "operations/size"
13+
AboutPath = "operations/about"
1314

1415
SyncCopyPath = "sync/copy"
1516
SyncMovePath = "sync/move"
@@ -99,3 +100,9 @@ type SyncCopyReq struct {
99100
DeleteEmptySrcDirs bool `json:"deleteEmptySrcDirs"`
100101
Async *bool `json:"_async,omitempty"`
101102
}
103+
104+
type OperationsAboutResp struct {
105+
Free int64 `json:"free"`
106+
Total int64 `json:"total"`
107+
Used int64 `json:"used"`
108+
}

pkg/drivers/clouds/rclone/rclone.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,23 @@ func (r *rclone) checkChangedConfigs(configs []*config.Config) *config.CreateCon
227227
return changed
228228
}
229229

230+
func (r *rclone) GetSpaceSize(fileParam *models.FileParam) (int64, error) {
231+
var fsPrefix, err = r.GetFsPrefix(fileParam)
232+
if err != nil {
233+
return 0, err
234+
}
235+
236+
var fs string
237+
fs = fsPrefix
238+
239+
resp, err := r.operation.About(fs)
240+
if err != nil {
241+
return 0, err
242+
}
243+
244+
return resp.Free, nil
245+
}
246+
230247
func (r *rclone) GetFilesSize(fileParam *models.FileParam) (int64, error) {
231248
var fsPrefix, err = r.GetFsPrefix(fileParam)
232249
if err != nil {

pkg/tasks/task_paste_cloud.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,16 @@ func (t *Task) DownloadFromCloud() error {
3131
return err
3232
}
3333

34-
posixSize, err := cmd.GetFilesSize(posixParam)
34+
posixSize, err := cmd.GetSpaceSize(posixParam)
3535
if err != nil {
3636
klog.Errorf("get posix free space size error: %v", err)
3737
return err
3838
}
3939

4040
klog.Infof("[Task] Id: %s, check posix space, cloudSize: %d, posixSize: %d", t.id, cloudSize, posixSize)
4141

42+
t.updateTotalSize(cloudSize)
43+
4244
requiredSpace := int64(float64(cloudSize) * 1.05)
4345
if posixSize < requiredSpace {
4446
return fmt.Errorf("not enough free space on disk, required: %s, available: %s", common.FormatBytes(requiredSpace), common.FormatBytes(posixSize))

0 commit comments

Comments
 (0)