Compare commits

..

1 Commits

Author SHA1 Message Date
Pterodactyl CI
954186291f bump version for release 2024-03-13 18:41:41 +00:00
5 changed files with 21 additions and 29 deletions

View File

@@ -1,10 +1,5 @@
# Changelog # Changelog
## v1.11.10
### Fixed
* Archives randomly ignoring files and directories ([#5027](https://github.com/pterodactyl/panel/issues/5027))
* Crash when deleting or transferring a server ([#5028](https://github.com/pterodactyl/panel/issues/5028))
## v1.11.9 ## v1.11.9
### Changed ### Changed
* Release binaries are now built with Go 1.21.8 * Release binaries are now built with Go 1.21.8

View File

@@ -227,19 +227,20 @@ func deleteServer(c *gin.Context) {
// //
// In addition, servers with large amounts of files can take some time to finish deleting, // In addition, servers with large amounts of files can take some time to finish deleting,
// so we don't want to block the HTTP call while waiting on this. // so we don't want to block the HTTP call while waiting on this.
go func(s *server.Server) { go func(p string) {
fs := s.Filesystem() _ = s.Filesystem().UnixFS().Close()
p := fs.Path()
_ = fs.UnixFS().Close()
if err := os.RemoveAll(p); err != nil { if err := os.RemoveAll(p); err != nil {
log.WithFields(log.Fields{"path": p, "error": err}).Warn("failed to remove server files during deletion process") log.WithFields(log.Fields{"path": p, "error": err}).Warn("failed to remove server files during deletion process")
} }
}(s) }(s.Filesystem().Path())
middleware.ExtractManager(c).Remove(func(server *server.Server) bool { middleware.ExtractManager(c).Remove(func(server *server.Server) bool {
return server.ID() == s.ID() return server.ID() == s.ID()
}) })
// Deallocate the reference to this server.
s = nil
c.Status(http.StatusNoContent) c.Status(http.StatusNoContent)
} }

View File

@@ -66,9 +66,10 @@ type Archive struct {
// BaseDirectory . // BaseDirectory .
BaseDirectory string BaseDirectory string
// Files specifies the files to archive, this takes priority over the Ignore // Files specifies the files to archive, this takes priority over the Ignore option, if
// option, if unspecified, all files in the BaseDirectory will be archived // unspecified, all files in the BasePath will be archived unless Ignore is set.
// unless Ignore is set. //
// All items in Files must be absolute within BasePath.
Files []string Files []string
// Progress wraps the writer of the archive to pass through the progress tracker. // Progress wraps the writer of the archive to pass through the progress tracker.
@@ -113,16 +114,11 @@ func (a *Archive) Stream(ctx context.Context, w io.Writer) error {
return errors.New("filesystem: archive.Filesystem is unset") return errors.New("filesystem: archive.Filesystem is unset")
} }
if filesLen := len(a.Files); filesLen > 0 { for i, f := range a.Files {
files := make([]string, filesLen) if !strings.HasPrefix(f, a.Filesystem.Path()) {
for i, f := range a.Files { continue
if !strings.HasPrefix(f, a.Filesystem.Path()) {
files[i] = f
continue
}
files[i] = strings.TrimPrefix(strings.TrimPrefix(f, a.Filesystem.Path()), "/")
} }
a.Files = files a.Files[i] = strings.TrimPrefix(strings.TrimPrefix(f, a.Filesystem.Path()), "/")
} }
// Choose which compression level to use based on the compression_level configuration option // Choose which compression level to use based on the compression_level configuration option
@@ -132,6 +128,8 @@ func (a *Archive) Stream(ctx context.Context, w io.Writer) error {
compressionLevel = pgzip.NoCompression compressionLevel = pgzip.NoCompression
case "best_compression": case "best_compression":
compressionLevel = pgzip.BestCompression compressionLevel = pgzip.BestCompression
case "best_speed":
fallthrough
default: default:
compressionLevel = pgzip.BestSpeed compressionLevel = pgzip.BestSpeed
} }
@@ -198,9 +196,6 @@ func (a *Archive) callback(opts ...walkFunc) walkFunc {
// a non-nil error we will exit immediately. // a non-nil error we will exit immediately.
for _, opt := range opts { for _, opt := range opts {
if err := opt(dirfd, name, relative, d); err != nil { if err := opt(dirfd, name, relative, d); err != nil {
if err == SkipThis {
return nil
}
return err return err
} }
} }
@@ -211,8 +206,6 @@ func (a *Archive) callback(opts ...walkFunc) walkFunc {
} }
} }
var SkipThis = errors.New("skip this")
// Pushes only files defined in the Files key to the final archive. // Pushes only files defined in the Files key to the final archive.
func (a *Archive) withFilesCallback() walkFunc { func (a *Archive) withFilesCallback() walkFunc {
return a.callback(func(_ int, _, relative string, _ ufs.DirEntry) error { return a.callback(func(_ int, _, relative string, _ ufs.DirEntry) error {
@@ -232,7 +225,7 @@ func (a *Archive) withFilesCallback() walkFunc {
return nil return nil
} }
return SkipThis return ufs.SkipDir
}) })
} }

View File

@@ -21,6 +21,9 @@ import (
"github.com/pterodactyl/wings/internal/ufs" "github.com/pterodactyl/wings/internal/ufs"
) )
// TODO: detect and enable
var useOpenat2 = true
type Filesystem struct { type Filesystem struct {
unixFS *ufs.Quota unixFS *ufs.Quota

View File

@@ -1,3 +1,3 @@
package system package system
var Version = "1.11.10" var Version = "1.11.9"