Skip to content

Commit

Permalink
perf: virtual machine function optimization
Browse files Browse the repository at this point in the history
  • Loading branch information
张启航 committed Nov 23, 2023
1 parent c4d64e7 commit db8715a
Show file tree
Hide file tree
Showing 5 changed files with 153 additions and 111 deletions.
2 changes: 2 additions & 0 deletions api/handler/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -1689,6 +1689,8 @@ func (s *ServiceAction) VolumnVar(tsv *dbmodel.TenantServiceVolume, tenantID, fi
return util.CreateAPIHandleError(400, fmt.Errorf("应用类型为'无状态'.不支持本地存储"))
}
tsv.HostPath = fmt.Sprintf("%s/tenant/%s/service/%s%s", localPath, tenantID, tsv.ServiceID, tsv.VolumePath)
case dbmodel.VMVolumeType.String():
tsv.HostPath = fmt.Sprintf("%s/tenant/%s/service/%s%s", sharePath, tenantID, tsv.ServiceID, tsv.VolumePath)
}
}
util.SetVolumeDefaultValue(tsv)
Expand Down
44 changes: 38 additions & 6 deletions builder/exector/build_from_vm.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package exector

import (
"fmt"
humanize "github.com/dustin/go-humanize"
"github.com/goodrain/rainbond/builder"
"github.com/goodrain/rainbond/builder/sources"
"github.com/goodrain/rainbond/event"
Expand Down Expand Up @@ -108,13 +109,13 @@ func (v *VMBuildItem) RunVMBuild() error {
}

func downloadFile(downPath, url string, Logger event.Logger) error {
Logger.Info("begin down vm image "+url, map[string]string{"step": "builder-exector"})
rsp, err := http.Get(url)
defer func() {
_ = rsp.Body.Close()
}()

downPath = path.Join(downPath, filepath.Base(url))
baseURL := filepath.Base(url)
fileName := strings.Split(baseURL, "?")[0]
downPath = path.Join(downPath, fileName)
dir := filepath.Dir(downPath)
// 递归创建目录
if err := os.MkdirAll(dir, os.ModePerm); err != nil {
Expand All @@ -127,12 +128,43 @@ func downloadFile(downPath, url string, Logger event.Logger) error {
defer func() {
_ = f.Close()
}()
_, err = io.Copy(f, rsp.Body)

myDownloader := &MyDownloader{
Reader: rsp.Body,
Total: rsp.ContentLength,
Logger: Logger,
Pace: 10,
}

Logger.Info(fmt.Sprintf("begin download vm image %v, image name is %v", url, fileName), map[string]string{"step": "builder-exector"})
Logger.Info(fmt.Sprintf("image size is %v, downloading will take some time, please be patient.", humanize.Bytes(uint64(rsp.ContentLength))), map[string]string{"step": "builder-exector"})

_, err = io.Copy(f, myDownloader)
if err != nil {
downError := fmt.Sprintf("download vm image %v failre: %v", url, err.Error())
Logger.Error(downError, map[string]string{"step": "builder-exector", "status": "failure"})
} else {
Logger.Info("down vm image success", map[string]string{"step": "builder-exector"})
}
return err
}

type MyDownloader struct {
io.Reader // 读取器
Total int64 // 总大小
Current int64 // 当前大小
Logger event.Logger
Pace float64
}

func (d *MyDownloader) Read(p []byte) (n int, err error) {
n, err = d.Reader.Read(p)
d.Current += int64(n)
if float64(d.Current*10000/d.Total)/100 == d.Pace {
downLog := fmt.Sprintf("virtual machine image is being downloaded.current download progress is:%.2f%%", float64(d.Current*10000/d.Total)/100)
d.Logger.Info(downLog, map[string]string{"step": "builder-exector"})
d.Pace += 10
}
if float64(d.Current*10000/d.Total)/100 == 100 {
d.Logger.Info("download vm image success", map[string]string{"step": "builder-exector"})
}
return
}
Loading

0 comments on commit db8715a

Please sign in to comment.