envexec: performance improvements for content copyIn

This commit is contained in:
criyle 2022-02-12 09:05:10 +00:00
parent c233f64485
commit 414efbf597
5 changed files with 18 additions and 7 deletions

View File

@ -81,7 +81,9 @@ func (e *execServer) FileGet(c context.Context, f *pb.FileID) (*pb.FileContent,
if err != nil {
return nil, err
}
defer r.Close()
if f, ok := r.(*os.File); ok {
defer f.Close()
}
content, err := io.ReadAll(r)
if err != nil {

View File

@ -5,6 +5,7 @@ import (
"io"
"mime"
"net/http"
"os"
"path"
"github.com/criyle/go-judge/envexec"
@ -72,7 +73,9 @@ func (f *fileHandle) fileIDGet(c *gin.Context) {
c.AbortWithError(http.StatusInternalServerError, err)
return
}
defer r.Close()
if f, ok := r.(*os.File); ok {
defer f.Close()
}
content, err := io.ReadAll(r)
if err != nil {

View File

@ -192,7 +192,9 @@ func FileGet(e *C.char) *C.char {
if err != nil {
return nil
}
defer r.Close()
if f, ok := r.(*os.File); ok {
defer f.Close()
}
c, err := io.ReadAll(r)
if err != nil {

View File

@ -83,14 +83,16 @@ func NewFileOpened(f *os.File) File {
return &FileOpened{File: f}
}
// FileToReader get a ReadCloser from underlying file
func FileToReader(f File) (io.ReadCloser, error) {
// FileToReader get a Reader from underlying file
// if the return value is *os.File, the file need to be closed
// by caller
func FileToReader(f File) (io.Reader, error) {
switch f := f.(type) {
case *FileOpened:
return f.File, nil
case *FileReader:
return io.NopCloser(f.Reader), nil
return f.Reader, nil
case *FileInput:
file, err := os.Open(f.Path)

View File

@ -39,7 +39,9 @@ func copyIn(m Environment, copyIn map[string]File) ([]FileError, error) {
if err != nil {
return fmt.Errorf("failed to copyIn %v", err)
}
defer hf.Close()
if f, ok := hf.(*os.File); ok {
defer f.Close()
}
cf, err := m.Open(n, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0777)
if err != nil {