mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
[performance] update storage backend and make use of seek syscall when available (#2924)
* update to use go-storage/ instead of go-store/v2/storage/
* pull in latest version from codeberg
* remove test output 😇
* add code comments
* set the exclusive bit when creating new files in disk config
* bump to actual release version
* bump to v0.1.1 (tis a simple no-logic change)
* update readme
* only use a temporary read seeker when decoding video if required (should only be S3 now)
* use fastcopy library to use memory pooled buffers when calling TempFileSeeker()
* update to use seek call in serveFileRange()
This commit is contained in:
@@ -224,10 +224,20 @@ func serveFileRange(rw http.ResponseWriter, r *http.Request, src io.Reader, rng
|
||||
return
|
||||
}
|
||||
|
||||
// Dump the first 'start' many bytes into the void...
|
||||
if _, err := fastcopy.CopyN(io.Discard, src, start); err != nil {
|
||||
log.Errorf(r.Context(), "error reading from source: %v", err)
|
||||
return
|
||||
if rs, ok := src.(io.ReadSeeker); ok {
|
||||
// Source supports seeking (usually *os.File),
|
||||
// seek to the 'start' byte position in file.
|
||||
if _, err := rs.Seek(start, 0); err != nil {
|
||||
log.Errorf(r.Context(), "error seeking in source: %v", err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
// Compat for when no seek call is implemented,
|
||||
// dump the first 'start' many bytes into void.
|
||||
if _, err := fastcopy.CopyN(io.Discard, src, start); err != nil {
|
||||
log.Errorf(r.Context(), "error reading from source: %v", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// Determine new content length
|
||||
|
Reference in New Issue
Block a user