diff --git a/cmd/climc/shell/compute/disks.go b/cmd/climc/shell/compute/disks.go index 1405c08112..09f2dbcabd 100644 --- a/cmd/climc/shell/compute/disks.go +++ b/cmd/climc/shell/compute/disks.go @@ -410,6 +410,13 @@ func init() { if sparseHeader > 0 { writer = sparsefile.NewSparseFileWriter(fi, sparseHeader, totalSize) + fileSize, _ := strconv.ParseInt(resp.Header.Get("X-File-Size"), 10, 64) + if fileSize > 0 { + err = fi.Truncate(fileSize) + if err != nil { + return errors.Wrapf(err, "failed truncate file") + } + } } bar := pb.Full.Start64(totalSize) diff --git a/pkg/hostman/downloader/downloader.go b/pkg/hostman/downloader/downloader.go index 92e45d38cd..03d55215d7 100644 --- a/pkg/hostman/downloader/downloader.go +++ b/pkg/hostman/downloader/downloader.go @@ -87,6 +87,7 @@ func (d *SDownloadProvider) Start( reader = fi size := stat.Size() + d.w.Header().Set("X-File-Size", fmt.Sprintf("%d", size)) if d.sparse { sparse, err := sparsefile.NewSparseFileReader(fi) if err != nil { diff --git a/pkg/hostman/storageman/remotefile/remotefile.go b/pkg/hostman/storageman/remotefile/remotefile.go index 8375b4e594..cba306c616 100644 --- a/pkg/hostman/storageman/remotefile/remotefile.go +++ b/pkg/hostman/storageman/remotefile/remotefile.go @@ -244,6 +244,13 @@ func (r *SRemoteFile) downloadInternal(getData bool, preChksum string, callback if sparseHeader > 0 { writer = sparsefile.NewSparseFileWriter(fi, sparseHeader, totalSize) + fileSize, _ := strconv.ParseInt(resp.Header.Get("X-File-Size"), 10, 64) + if fileSize > 0 { + err = fi.Truncate(fileSize) + if err != nil { + return errors.Wrapf(err, "failed truncate file") + } + } } pb := pb.NewProxyReader(reader, totalSize)