Skip to content

Commit c5c1bf6

Browse files
author
anahan
committed
Handle potential deadlocks during fpm logs read
1 parent 618f450 commit c5c1bf6

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

cmd/docker-fpm-wrapper/errlog.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"context"
5+
"io"
56

67
"go.uber.org/zap"
78

@@ -36,7 +37,10 @@ func startErrLogProxy(ctx context.Context, log *zap.Logger, fPath string) error
3637

3738
logParser := phpfpm.NewErrLogParser()
3839
go func() {
39-
_ = logParser.Parse(ctx, f, entryCh)
40+
if err := logParser.Parse(ctx, f, entryCh); err != nil {
41+
log.Error("can't parse php-fpm errorlog entry", zap.Error(err))
42+
}
43+
_, _ = io.Copy(io.Discard, f)
4044
}()
4145

4246
return nil

cmd/docker-fpm-wrapper/slowlog.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,27 @@ package main
22

33
import (
44
"context"
5+
"io"
56

67
"go.uber.org/zap"
78

89
"github.com/code-tool/docker-fpm-wrapper/internal/zapx"
910
"github.com/code-tool/docker-fpm-wrapper/pkg/phpfpm"
1011
)
1112

12-
func startSlowlogProxyForPool(ctx context.Context, pool phpfpm.Pool, out chan phpfpm.SlowlogEntry) error {
13+
func startSlowlogProxyForPool(ctx context.Context, log *zap.Logger, pool phpfpm.Pool, out chan phpfpm.SlowlogEntry) error {
1314
fifoF, err := createFIFOByPathCtx(ctx, pool.SlowlogPath)
1415
if err != nil {
1516
return err
1617
}
1718

1819
slowLogParser := phpfpm.NewSlowlogParser(pool.RequestSlowlogTraceDepth)
1920
go func() {
20-
// TODO probably should be logged
21-
_ = slowLogParser.Parse(ctx, fifoF, out)
21+
if err := slowLogParser.Parse(ctx, fifoF, out); err != nil {
22+
log.Error("can't parse php-fpm slowlog entry", zap.Error(err))
23+
}
24+
25+
_, _ = io.Copy(io.Discard, fifoF)
2226
}()
2327

2428
return nil
@@ -46,7 +50,7 @@ func startSlowlogProxies(ctx context.Context, log *zap.Logger, pools []phpfpm.Po
4650
continue
4751
}
4852

49-
if err := startSlowlogProxyForPool(ctx, pool, outCh); err != nil {
53+
if err := startSlowlogProxyForPool(ctx, log, pool, outCh); err != nil {
5054
return err
5155
}
5256
}

0 commit comments

Comments
 (0)