Compare commits

...

2 Commits

Author SHA1 Message Date
802ce46f7f
fix: ch1.3 case4 output is wrong 2024-01-07 00:27:03 +08:00
dd86ed8b5a
feat: LimitedWriter: write as much as possible 2024-01-07 00:26:18 +08:00
3 changed files with 21 additions and 6 deletions

View File

@ -6,6 +6,7 @@ import (
"fmt" "fmt"
"git.0x7f.app/WOJ/woj-server/pkg/file" "git.0x7f.app/WOJ/woj-server/pkg/file"
"git.0x7f.app/WOJ/woj-server/pkg/utils" "git.0x7f.app/WOJ/woj-server/pkg/utils"
"go.uber.org/zap"
"os" "os"
"os/exec" "os/exec"
"time" "time"
@ -88,6 +89,7 @@ func (s *service) podmanRun(arg *podmanArgs) error {
limit: utils.If(arg.limit == 0, 4*1024, arg.limit), limit: utils.If(arg.limit == 0, 4*1024, arg.limit),
timeout: utils.If(arg.timeout == 0, 10*time.Second, arg.timeout), timeout: utils.If(arg.timeout == 0, 10*time.Second, arg.timeout),
kill: func() error { kill: func() error {
s.log.Warn("[podman] timeout killer", zap.String("name", name))
if arg.kill != nil { if arg.kill != nil {
_ = arg.kill() _ = arg.kill()
} }

View File

@ -2,6 +2,7 @@ package file
import ( import (
"fmt" "fmt"
"git.0x7f.app/WOJ/woj-server/pkg/utils"
"os" "os"
) )
@ -11,11 +12,23 @@ type LimitedWriter struct {
n int64 n int64
} }
func (lw *LimitedWriter) Write(p []byte) (n int, err error) { func (lw *LimitedWriter) Write(p []byte) (int, error) {
if lw.n+int64(len(p)) > lw.Limit { remaining := lw.Limit - lw.n
return 0, fmt.Errorf("output limit exceeded") if remaining <= 0 {
return 0, fmt.Errorf("write limit exceeded")
} }
n, err = lw.File.Write(p)
var err, err2 error
var n int
writeLen := int64(len(p))
if writeLen > remaining {
err = fmt.Errorf("write limit exceeded")
writeLen = remaining
}
n, err2 = lw.File.Write(p[:writeLen])
lw.n += int64(n) lw.n += int64(n)
return
return n, utils.If(err2 != nil, err2, err)
} }

View File

@ -1 +1 @@
61382716 395061382716