mirror of
https://github.com/criyle/go-judge.git
synced 2025-11-04 14:50:02 +08:00
Add Prefork & no 500 when copyin
This commit is contained in:
parent
e5c0f8ec40
commit
45fcf55ef9
7
.air.toml
Normal file
7
.air.toml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
root = "."
|
||||||
|
|
||||||
|
[build]
|
||||||
|
cmd = "go build -o ./tmp/executorserver ./cmd/executorserver"
|
||||||
|
bin = "tmp/executorserver"
|
||||||
|
|
||||||
|
include_ext = ["go"]
|
||||||
@ -17,6 +17,7 @@ import (
|
|||||||
"github.com/criyle/go-judge/env"
|
"github.com/criyle/go-judge/env"
|
||||||
"github.com/criyle/go-judge/filestore"
|
"github.com/criyle/go-judge/filestore"
|
||||||
"github.com/criyle/go-judge/pb"
|
"github.com/criyle/go-judge/pb"
|
||||||
|
"github.com/criyle/go-judge/pkg/envexec"
|
||||||
"github.com/criyle/go-judge/pkg/pool"
|
"github.com/criyle/go-judge/pkg/pool"
|
||||||
"github.com/criyle/go-judge/worker"
|
"github.com/criyle/go-judge/worker"
|
||||||
ginpprof "github.com/gin-contrib/pprof"
|
ginpprof "github.com/gin-contrib/pprof"
|
||||||
@ -46,6 +47,7 @@ const (
|
|||||||
envParallelism = "PARALLELISM"
|
envParallelism = "PARALLELISM"
|
||||||
envToken = "TOKEN"
|
envToken = "TOKEN"
|
||||||
envRelease = "RELEASE"
|
envRelease = "RELEASE"
|
||||||
|
envPrefork = "PREFORK"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -61,6 +63,7 @@ var (
|
|||||||
token = flag.String("token", "", "bearer token auth for REST / gRPC")
|
token = flag.String("token", "", "bearer token auth for REST / gRPC")
|
||||||
release = flag.Bool("release", false, "use release mode for log")
|
release = flag.Bool("release", false, "use release mode for log")
|
||||||
srcPrefix = flag.String("srcprefix", "", "specifies directory prefix for source type copyin")
|
srcPrefix = flag.String("srcprefix", "", "specifies directory prefix for source type copyin")
|
||||||
|
prefork = flag.Int("prefork", 0, "control # of the prefork workers")
|
||||||
|
|
||||||
printLog = func(v ...interface{}) {}
|
printLog = func(v ...interface{}) {}
|
||||||
|
|
||||||
@ -100,6 +103,13 @@ func initEnv() (bool, error) {
|
|||||||
if s := os.Getenv(envToken); s != "" {
|
if s := os.Getenv(envToken); s != "" {
|
||||||
token = &s
|
token = &s
|
||||||
}
|
}
|
||||||
|
if s := os.Getenv(envPrefork); s != "" {
|
||||||
|
p, err := strconv.Atoi(s)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
prefork = &p
|
||||||
|
}
|
||||||
if os.Getpid() == 1 || os.Getenv(envRelease) == "1" {
|
if os.Getpid() == 1 || os.Getenv(envRelease) == "1" {
|
||||||
*release = true
|
*release = true
|
||||||
}
|
}
|
||||||
@ -140,6 +150,20 @@ func main() {
|
|||||||
log.Fatalln("create environment builder failed", err)
|
log.Fatalln("create environment builder failed", err)
|
||||||
}
|
}
|
||||||
envPool := pool.NewPool(b)
|
envPool := pool.NewPool(b)
|
||||||
|
if *prefork > 0 {
|
||||||
|
printLog("create ", *prefork, " prefork containers")
|
||||||
|
m := make([]envexec.Environment, 0, *prefork)
|
||||||
|
for i := 0; i < *prefork; i++ {
|
||||||
|
e, err := envPool.Get()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln("prefork environment failed", err)
|
||||||
|
}
|
||||||
|
m = append(m, e)
|
||||||
|
}
|
||||||
|
for _, e := range m {
|
||||||
|
envPool.Put(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
work = worker.New(fs, envPool, *parallelism, *dir)
|
work = worker.New(fs, envPool, *parallelism, *dir)
|
||||||
work.Start()
|
work.Start()
|
||||||
printLog("Starting worker with parallelism=", *parallelism)
|
printLog("Starting worker with parallelism=", *parallelism)
|
||||||
|
|||||||
@ -15,7 +15,9 @@ func runSingle(pc context.Context, m Environment, c *Cmd, fds []*os.File, ptc []
|
|||||||
// copyin
|
// copyin
|
||||||
if len(c.CopyIn) > 0 {
|
if len(c.CopyIn) > 0 {
|
||||||
if err := copyIn(m, c.CopyIn); err != nil {
|
if err := copyIn(m, c.CopyIn); err != nil {
|
||||||
return result, err
|
result.Status = StatusInternalError
|
||||||
|
result.Error = err.Error()
|
||||||
|
return result, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user