Skip to content

Commit

Permalink
go: Improve efficiency with zlib in THeaderTransport
Browse files Browse the repository at this point in the history
When enabled zlib in THeaderTransport we observed very high cpu
overhead, use a pool for zlib writers to improve efficiency.
  • Loading branch information
fishy committed Jun 10, 2024
1 parent 2bbaaa8 commit 1cae41a
Showing 1 changed file with 24 additions and 2 deletions.
26 changes: 24 additions & 2 deletions lib/go/thrift/header_transport.go
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,25 @@ func (tw *TransformWriter) Close() error {
return nil
}

var zlibDefaultLevelWriterPool = newPool(
func() *zlib.Writer {
return zlib.NewWriter(nil)
},
nil,
)

type zlibPoolCloser struct {
writer *zlib.Writer
}

func (z *zlibPoolCloser) Close() error {
defer func() {
z.writer.Reset(nil)
zlibDefaultLevelWriterPool.put(&z.writer)
}()
return z.writer.Close()
}

// AddTransform adds a transform.
func (tw *TransformWriter) AddTransform(id THeaderTransformID) error {
switch id {
Expand All @@ -222,9 +241,12 @@ func (tw *TransformWriter) AddTransform(id THeaderTransformID) error {
case TransformNone:
// no-op
case TransformZlib:
writeCloser := zlib.NewWriter(tw.Writer)
writeCloser := zlibDefaultLevelWriterPool.get()
writeCloser.Reset(tw.Writer)
tw.Writer = writeCloser
tw.closers = append(tw.closers, writeCloser)
tw.closers = append(tw.closers, &zlibPoolCloser{
writer: writeCloser,
})
}
return nil
}
Expand Down

0 comments on commit 1cae41a

Please sign in to comment.