feat(sandbox): add tar-based copyIn to bypass SOCK_SEQPACKET file limit
This commit is contained in:
parent
e285f33ecb
commit
98889ffbba
|
|
@ -52,15 +52,16 @@ func prepareTar(cmds []stage.Cmd) (bool, []byte) {
|
||||||
if cmds[i].CopyInDir != "" &&
|
if cmds[i].CopyInDir != "" &&
|
||||||
estimateCopyInSize(&cmds[i]) >= tarThreshold {
|
estimateCopyInSize(&cmds[i]) >= tarThreshold {
|
||||||
tarData, keysInTar := createCopyInTar(&cmds[i])
|
tarData, keysInTar := createCopyInTar(&cmds[i])
|
||||||
|
if tarData == nil {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
slog.Debug("prepareTar", "tarSize", len(tarData), "keysInTar", len(keysInTar))
|
||||||
for j := range cmds {
|
for j := range cmds {
|
||||||
cmds[j].CopyInDir = ""
|
cmds[j].CopyInDir = ""
|
||||||
for _, k := range keysInTar {
|
for _, k := range keysInTar {
|
||||||
delete(cmds[j].CopyIn, k)
|
delete(cmds[j].CopyIn, k)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if tarData == nil {
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
return true, tarData
|
return true, tarData
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -101,11 +102,11 @@ func (e *Sandbox) runWithTar(cmds []stage.Cmd, tarData []byte) ([]stage.Executor
|
||||||
|
|
||||||
tarFileName := "/w/__joj3_copyin.tar"
|
tarFileName := "/w/__joj3_copyin.tar"
|
||||||
tarCmd := stage.Cmd{
|
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,
|
Env: cmds[0].Env,
|
||||||
Stdin: &stage.CmdFile{Content: strPtr("")},
|
Stdin: &stage.CmdFile{Content: strPtr("")},
|
||||||
Stdout: &stage.CmdFile{Name: strPtr("__tar_stdout"), Max: int64Ptr(1)},
|
Stdout: &stage.CmdFile{Name: strPtr("__tar_stdout"), Max: int64Ptr(256)},
|
||||||
Stderr: &stage.CmdFile{Name: strPtr("__tar_stderr"), Max: int64Ptr(1)},
|
Stderr: &stage.CmdFile{Name: strPtr("__tar_stderr"), Max: int64Ptr(256)},
|
||||||
CPULimit: cmds[0].CPULimit,
|
CPULimit: cmds[0].CPULimit,
|
||||||
ClockLimit: cmds[0].ClockLimit,
|
ClockLimit: cmds[0].ClockLimit,
|
||||||
MemoryLimit: cmds[0].MemoryLimit,
|
MemoryLimit: cmds[0].MemoryLimit,
|
||||||
|
|
@ -116,7 +117,6 @@ func (e *Sandbox) runWithTar(cmds []stage.Cmd, tarData []byte) ([]stage.Executor
|
||||||
CopyIn: map[string]stage.CmdFile{
|
CopyIn: map[string]stage.CmdFile{
|
||||||
tarFileName: {FileID: &fid},
|
tarFileName: {FileID: &fid},
|
||||||
},
|
},
|
||||||
CopyOutCached: []string{tarFileName},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
allCmds := append([]stage.Cmd{tarCmd}, cmds...)
|
allCmds := append([]stage.Cmd{tarCmd}, cmds...)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user