You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@thrift.apache.org by GitBox <gi...@apache.org> on 2020/09/29 21:32:26 UTC

[GitHub] [thrift] fishy commented on a change in pull request #2246: go: Use sync.Pool for gzip in HTTP transport

fishy commented on a change in pull request #2246:
URL: https://github.com/apache/thrift/pull/2246#discussion_r497071888



##########
File path: lib/go/thrift/http_transport.go
##########
@@ -40,14 +41,23 @@ func NewThriftHandlerFunc(processor TProcessor,
 
 // gz transparently compresses the HTTP response if the client supports it.
 func gz(handler http.HandlerFunc) http.HandlerFunc {
+	sp := &sync.Pool{
+		New: func() interface{} {
+			return gzip.NewWriter(nil)
+		}}

Review comment:
       nit: style wise I'd slightly prefer `},\n}`, but we are not very strictly on style things anyways so I'm not feeling strongly.

##########
File path: lib/go/thrift/http_transport.go
##########
@@ -40,14 +41,23 @@ func NewThriftHandlerFunc(processor TProcessor,
 
 // gz transparently compresses the HTTP response if the client supports it.
 func gz(handler http.HandlerFunc) http.HandlerFunc {
+	sp := &sync.Pool{
+		New: func() interface{} {
+			return gzip.NewWriter(nil)
+		}}
+
 	return func(w http.ResponseWriter, r *http.Request) {
 		if !strings.Contains(r.Header.Get("Accept-Encoding"), "gzip") {
 			handler(w, r)
 			return
 		}
 		w.Header().Set("Content-Encoding", "gzip")
-		gz := gzip.NewWriter(w)
-		defer gz.Close()
+		gz := sp.Get().(*gzip.Writer)
+		gz.Reset(w)
+		defer func() {
+			_ = gz.Close()

Review comment:
       also nit: For writes `Close` usually also includes `Flush` so ignore the error could be bad. But we were ignoring the error before this change, so this at least won't make things worse. We don't have a way to return error here anyways.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org