feat(sandbox): add tar-based copyIn to bypass SOCK_SEQPACKET file limit
Some checks failed
submodules sync / sync (push) Successful in 35s
build / build (push) Failing after 1m18s
build / trigger-build-image (push) Has been skipped

This commit is contained in:
张泊明518370910136 2026-07-22 23:56:41 -07:00
parent e285f33ecb
commit 98889ffbba
GPG Key ID: D47306D7062CDA9D

View File

@ -52,15 +52,16 @@ func prepareTar(cmds []stage.Cmd) (bool, []byte) {
if cmds[i].CopyInDir != "" &&
estimateCopyInSize(&cmds[i]) >= tarThreshold {
tarData, keysInTar := createCopyInTar(&cmds[i])
if tarData == nil {
return false, nil
}
slog.Debug("prepareTar", "tarSize", len(tarData), "keysInTar", len(keysInTar))
for j := range cmds {
cmds[j].CopyInDir = ""
for _, k := range keysInTar {
delete(cmds[j].CopyIn, k)
}
}
if tarData == nil {
return false, nil
}
return true, tarData
}
}
@ -101,11 +102,11 @@ func (e *Sandbox) runWithTar(cmds []stage.Cmd, tarData []byte) ([]stage.Executor
tarFileName := "/w/__joj3_copyin.tar"
tarCmd := stage.Cmd{
Args: []string{"/bin/tar", "xf", tarFileName, "-C", "/w"},
Args: []string{"/bin/tar", "xf", tarFileName, "-C", "/w", "--no-same-owner"},
Env: cmds[0].Env,
Stdin: &stage.CmdFile{Content: strPtr("")},
Stdout: &stage.CmdFile{Name: strPtr("__tar_stdout"), Max: int64Ptr(1)},
Stderr: &stage.CmdFile{Name: strPtr("__tar_stderr"), Max: int64Ptr(1)},
Stdout: &stage.CmdFile{Name: strPtr("__tar_stdout"), Max: int64Ptr(256)},
Stderr: &stage.CmdFile{Name: strPtr("__tar_stderr"), Max: int64Ptr(256)},
CPULimit: cmds[0].CPULimit,
ClockLimit: cmds[0].ClockLimit,
MemoryLimit: cmds[0].MemoryLimit,
@ -116,7 +117,6 @@ func (e *Sandbox) runWithTar(cmds []stage.Cmd, tarData []byte) ([]stage.Executor
CopyIn: map[string]stage.CmdFile{
tarFileName: {FileID: &fid},
},
CopyOutCached: []string{tarFileName},
}
allCmds := append([]stage.Cmd{tarCmd}, cmds...)