Don't cancel transcoding session if context is canceled

This commit is contained in:
Deluan 2023-02-06 15:37:12 -05:00 committed by Deluan Quintão
parent fc8462dc8a
commit 05c6cdea1a
2 changed files with 5 additions and 39 deletions

View File

@ -39,7 +39,7 @@ func (e *ffmpeg) ExtractImage(ctx context.Context, path string) (io.ReadCloser,
func (e *ffmpeg) start(ctx context.Context, args []string) (io.ReadCloser, error) {
log.Trace(ctx, "Executing ffmpeg command", "cmd", args)
j := &Cmd{ctx: ctx, args: args}
j := &ffCmd{args: args}
j.PipeReader, j.out = io.Pipe()
err := j.start()
if err != nil {
@ -49,16 +49,15 @@ func (e *ffmpeg) start(ctx context.Context, args []string) (io.ReadCloser, error
return j, nil
}
type Cmd struct {
type ffCmd struct {
*io.PipeReader
out *io.PipeWriter
ctx context.Context
args []string
cmd *exec.Cmd
}
func (j *Cmd) start() error {
cmd := exec.CommandContext(j.ctx, j.args[0], j.args[1:]...) // #nosec
func (j *ffCmd) start() error {
cmd := exec.Command(j.args[0], j.args[1:]...) // #nosec
cmd.Stdout = j.out
if log.CurrentLevel() >= log.LevelTrace {
cmd.Stderr = os.Stderr
@ -73,7 +72,7 @@ func (j *Cmd) start() error {
return nil
}
func (j *Cmd) wait() {
func (j *ffCmd) wait() {
if err := j.cmd.Wait(); err != nil {
var exitErr *exec.ExitError
if errors.As(err, &exitErr) {
@ -83,10 +82,6 @@ func (j *Cmd) wait() {
}
return
}
if j.ctx.Err() != nil {
_ = j.out.CloseWithError(j.ctx.Err())
return
}
_ = j.out.Close()
}

View File

@ -120,31 +120,6 @@ var _ = Describe("File Caches", func() {
// TODO How to make the fscache reader return the underlying reader error?
//Expect(err).To(MatchError("read failure"))
// Data should not be cached (or eventually be removed from cache)
Eventually(func() bool {
s, _ = fc.Get(context.Background(), &testArg{"test"})
if s != nil {
return s.Cached
}
return false
}).Should(BeFalse())
})
})
When("context is canceled", func() {
It("does not cache", func() {
ctx, cancel := context.WithCancel(context.Background())
fc := callNewFileCache("test", "1KB", "test", 0, func(ctx context.Context, arg Item) (io.Reader, error) {
return &ctxFakeReader{ctx}, nil
})
s, err := fc.Get(ctx, &testArg{"test"})
Expect(err).ToNot(HaveOccurred())
cancel()
b := make([]byte, 10)
_, err = s.Read(b)
// TODO Should be context.Canceled error
Expect(err).To(MatchError(io.EOF))
// Data should not be cached (or eventually be removed from cache)
Eventually(func() bool {
s, _ = fc.Get(context.Background(), &testArg{"test"})
@ -166,7 +141,3 @@ func (t *testArg) Key() string { return t.s }
type errFakeReader struct{ err error }
func (e errFakeReader) Read([]byte) (int, error) { return 0, e.err }
type ctxFakeReader struct{ ctx context.Context }
func (e *ctxFakeReader) Read([]byte) (int, error) { return 0, e.ctx.Err() }