mirror of
https://github.com/criyle/go-judge.git
synced 2025-11-04 14:50:02 +08:00
envexec: performance improvements for content copyIn
This commit is contained in:
parent
c233f64485
commit
414efbf597
@ -81,7 +81,9 @@ func (e *execServer) FileGet(c context.Context, f *pb.FileID) (*pb.FileContent,
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer r.Close()
|
if f, ok := r.(*os.File); ok {
|
||||||
|
defer f.Close()
|
||||||
|
}
|
||||||
|
|
||||||
content, err := io.ReadAll(r)
|
content, err := io.ReadAll(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"mime"
|
"mime"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
"github.com/criyle/go-judge/envexec"
|
"github.com/criyle/go-judge/envexec"
|
||||||
@ -72,7 +73,9 @@ func (f *fileHandle) fileIDGet(c *gin.Context) {
|
|||||||
c.AbortWithError(http.StatusInternalServerError, err)
|
c.AbortWithError(http.StatusInternalServerError, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer r.Close()
|
if f, ok := r.(*os.File); ok {
|
||||||
|
defer f.Close()
|
||||||
|
}
|
||||||
|
|
||||||
content, err := io.ReadAll(r)
|
content, err := io.ReadAll(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@ -192,7 +192,9 @@ func FileGet(e *C.char) *C.char {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
defer r.Close()
|
if f, ok := r.(*os.File); ok {
|
||||||
|
defer f.Close()
|
||||||
|
}
|
||||||
|
|
||||||
c, err := io.ReadAll(r)
|
c, err := io.ReadAll(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@ -83,14 +83,16 @@ func NewFileOpened(f *os.File) File {
|
|||||||
return &FileOpened{File: f}
|
return &FileOpened{File: f}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FileToReader get a ReadCloser from underlying file
|
// FileToReader get a Reader from underlying file
|
||||||
func FileToReader(f File) (io.ReadCloser, error) {
|
// 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) {
|
switch f := f.(type) {
|
||||||
case *FileOpened:
|
case *FileOpened:
|
||||||
return f.File, nil
|
return f.File, nil
|
||||||
|
|
||||||
case *FileReader:
|
case *FileReader:
|
||||||
return io.NopCloser(f.Reader), nil
|
return f.Reader, nil
|
||||||
|
|
||||||
case *FileInput:
|
case *FileInput:
|
||||||
file, err := os.Open(f.Path)
|
file, err := os.Open(f.Path)
|
||||||
|
|||||||
@ -39,7 +39,9 @@ func copyIn(m Environment, copyIn map[string]File) ([]FileError, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to copyIn %v", err)
|
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)
|
cf, err := m.Open(n, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0777)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user