Check disk before even trying to run the download
This commit is contained in:
parent
17daa2071f
commit
9c53436470
|
@ -60,7 +60,6 @@ func (dl *Download) Execute() error {
|
||||||
dl.cancelFunc = &cancel
|
dl.cancelFunc = &cancel
|
||||||
defer dl.Cancel()
|
defer dl.Cancel()
|
||||||
|
|
||||||
fnameparts := strings.Split(dl.req.URL.Path, "/")
|
|
||||||
req, _ := http.NewRequestWithContext(ctx, http.MethodGet, dl.req.URL.String(), nil)
|
req, _ := http.NewRequestWithContext(ctx, http.MethodGet, dl.req.URL.String(), nil)
|
||||||
res, err := client.Do(req)
|
res, err := client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -70,6 +69,8 @@ func (dl *Download) Execute() error {
|
||||||
if res.StatusCode >= 300 || res.StatusCode < 200 {
|
if res.StatusCode >= 300 || res.StatusCode < 200 {
|
||||||
return errors.New("downloader: got bad response status from endpoint: " + res.Status)
|
return errors.New("downloader: got bad response status from endpoint: " + res.Status)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fnameparts := strings.Split(dl.req.URL.Path, "/")
|
||||||
p := filepath.Join(dl.req.Directory, fnameparts[len(fnameparts)-1])
|
p := filepath.Join(dl.req.Directory, fnameparts[len(fnameparts)-1])
|
||||||
dl.server.Log().WithField("path", p).Debug("writing remote file to disk")
|
dl.server.Log().WithField("path", p).Debug("writing remote file to disk")
|
||||||
if err := dl.server.Filesystem().Writefile(p, res.Body); err != nil {
|
if err := dl.server.Filesystem().Writefile(p, res.Body); err != nil {
|
||||||
|
|
|
@ -256,6 +256,11 @@ func postServerPullRemoteFile(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := s.Filesystem().HasSpaceErr(true); err != nil {
|
||||||
|
WithError(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
dl := downloader.New(s, downloader.DownloadRequest{
|
dl := downloader.New(s, downloader.DownloadRequest{
|
||||||
URL: u,
|
URL: u,
|
||||||
Directory: data.Directory,
|
Directory: data.Directory,
|
||||||
|
|
|
@ -48,6 +48,15 @@ func (fs *Filesystem) SetDiskLimit(i int64) {
|
||||||
fs.mu.Unlock()
|
fs.mu.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The same concept as HasSpaceAvailable however this will return an error if there is
|
||||||
|
// no space, rather than a boolean value.
|
||||||
|
func (fs *Filesystem) HasSpaceErr(allowStaleValue bool) error {
|
||||||
|
if !fs.HasSpaceAvailable(allowStaleValue) {
|
||||||
|
return &Error{code: ErrCodeDiskSpace}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Determines if the directory a file is trying to be added to has enough space available
|
// Determines if the directory a file is trying to be added to has enough space available
|
||||||
// for the file to be written to.
|
// for the file to be written to.
|
||||||
//
|
//
|
||||||
|
|
|
@ -67,10 +67,6 @@ func IsErrorCode(err error, code ErrorCode) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDiskSpaceError() *Error {
|
|
||||||
return &Error{code: ErrCodeDiskSpace}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns a new BadPathResolution error.
|
// Returns a new BadPathResolution error.
|
||||||
func NewBadPathResolution(path string, resolved string) *Error {
|
func NewBadPathResolution(path string, resolved string) *Error {
|
||||||
return &Error{code: ErrCodePathResolution, path: path, resolved: resolved}
|
return &Error{code: ErrCodePathResolution, path: path, resolved: resolved}
|
||||||
|
|
|
@ -5,7 +5,6 @@ import (
|
||||||
"emperror.dev/errors"
|
"emperror.dev/errors"
|
||||||
"github.com/pterodactyl/wings/config"
|
"github.com/pterodactyl/wings/config"
|
||||||
"github.com/pterodactyl/wings/environment"
|
"github.com/pterodactyl/wings/environment"
|
||||||
"github.com/pterodactyl/wings/server/filesystem"
|
|
||||||
"golang.org/x/sync/semaphore"
|
"golang.org/x/sync/semaphore"
|
||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
@ -168,8 +167,8 @@ func (s *Server) onBeforeStart() error {
|
||||||
s.Filesystem().HasSpaceAvailable(true)
|
s.Filesystem().HasSpaceAvailable(true)
|
||||||
} else {
|
} else {
|
||||||
s.PublishConsoleOutputFromDaemon("Checking server disk space usage, this could take a few seconds...")
|
s.PublishConsoleOutputFromDaemon("Checking server disk space usage, this could take a few seconds...")
|
||||||
if !s.Filesystem().HasSpaceAvailable(false) {
|
if err := s.Filesystem().HasSpaceErr(false); err != nil {
|
||||||
return filesystem.NewDiskSpaceError()
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user