Skip to content

Commit 9ffe423

Browse files
committed
refactor
1 parent b1b3a22 commit 9ffe423

File tree

2 files changed

+68
-19
lines changed

2 files changed

+68
-19
lines changed

v2/connection/connection_compression.go

Lines changed: 56 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,10 @@
2121
package connection
2222

2323
import (
24-
"compress/gzip"
2524
"compress/zlib"
25+
"fmt"
2626
"io"
2727

28-
"github.com/pkg/errors"
29-
3028
"github.com/arangodb/go-driver/v2/log"
3129
)
3230

@@ -40,35 +38,67 @@ type compression struct {
4038
}
4139

4240
func newCompression(config *CompressionConfig) Compression {
43-
return &compression{
44-
config: config,
41+
if config == nil {
42+
return noCompression{}
43+
} else if config.CompressionType == "gzip" {
44+
return gzipCompression{config: config}
45+
} else if config.CompressionType == "deflate" {
46+
return deflateCompression{config: config}
47+
} else {
48+
log.Error(fmt.Errorf("unknown compression type: %s", config.CompressionType), "")
49+
return noCompression{config: config}
4550
}
4651
}
4752

48-
func (g compression) ApplyRequestHeaders(r Request) {
53+
type gzipCompression struct {
54+
config *CompressionConfig
55+
}
56+
57+
func (g gzipCompression) ApplyRequestHeaders(r Request) {
4958
if g.config != nil && g.config.ResponseCompressionEnabled {
5059
if g.config.CompressionType == "gzip" {
5160
r.AddHeader("Accept-Encoding", "gzip")
52-
} else if g.config.CompressionType == "deflate" {
53-
r.AddHeader("Accept-Encoding", "deflate")
5461
}
5562
}
5663
}
5764

58-
func (g compression) ApplyRequestCompression(r *httpRequest, rootWriter io.Writer) (io.WriteCloser, error) {
65+
func (g gzipCompression) ApplyRequestCompression(r *httpRequest, rootWriter io.Writer) (io.WriteCloser, error) {
5966
config := g.config
6067

6168
if config != nil && config.RequestCompressionEnabled {
62-
if config.CompressionType == "gzip" {
63-
r.headers["Content-Encoding"] = "gzip"
69+
if config.CompressionType == "deflate" {
70+
r.headers["Content-Encoding"] = "deflate"
6471

65-
gzipWriter, err := gzip.NewWriterLevel(rootWriter, config.RequestCompressionLevel)
72+
zlibWriter, err := zlib.NewWriterLevel(rootWriter, config.RequestCompressionLevel)
6673
if err != nil {
67-
log.Errorf(err, "error creating gzip writer")
74+
log.Errorf(err, "error creating zlib writer")
6875
return nil, err
6976
}
70-
return gzipWriter, nil
71-
} else if config.CompressionType == "deflate" {
77+
78+
return zlibWriter, nil
79+
}
80+
}
81+
82+
return nil, nil
83+
}
84+
85+
type deflateCompression struct {
86+
config *CompressionConfig
87+
}
88+
89+
func (g deflateCompression) ApplyRequestHeaders(r Request) {
90+
if g.config != nil && g.config.ResponseCompressionEnabled {
91+
if g.config.CompressionType == "deflate" {
92+
r.AddHeader("Accept-Encoding", "deflate")
93+
}
94+
}
95+
}
96+
97+
func (g deflateCompression) ApplyRequestCompression(r *httpRequest, rootWriter io.Writer) (io.WriteCloser, error) {
98+
config := g.config
99+
100+
if config != nil && config.RequestCompressionEnabled {
101+
if config.CompressionType == "deflate" {
72102
r.headers["Content-Encoding"] = "deflate"
73103

74104
zlibWriter, err := zlib.NewWriterLevel(rootWriter, config.RequestCompressionLevel)
@@ -78,10 +108,19 @@ func (g compression) ApplyRequestCompression(r *httpRequest, rootWriter io.Write
78108
}
79109

80110
return zlibWriter, nil
81-
} else {
82-
return nil, errors.Errorf("unsupported compression type: %s", config.CompressionType)
83111
}
84112
}
85113

86114
return nil, nil
87115
}
116+
117+
type noCompression struct {
118+
config *CompressionConfig
119+
}
120+
121+
func (g noCompression) ApplyRequestHeaders(r Request) {
122+
}
123+
124+
func (g noCompression) ApplyRequestCompression(r *httpRequest, rootWriter io.Writer) (io.WriteCloser, error) {
125+
return nil, nil
126+
}

v2/connection/connection_http_internal.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,12 @@ func (j *httpConnection) bodyReadFunc(decoder Decoder, req *httpRequest, stream
319319

320320
var encErr error
321321
if compressedWriter != nil {
322-
defer compressedWriter.Close()
322+
defer func(compressedWriter io.WriteCloser) {
323+
errCompression := compressedWriter.Close()
324+
if errCompression != nil {
325+
log.Errorf(errCompression, "error closing compressed writer")
326+
}
327+
}(compressedWriter)
323328
encErr = decoder.Encode(compressedWriter, req.body)
324329
} else {
325330
encErr = decoder.Encode(b, req.body)
@@ -346,7 +351,12 @@ func (j *httpConnection) bodyReadFunc(decoder Decoder, req *httpRequest, stream
346351

347352
var encErr error
348353
if compressedWriter != nil {
349-
defer compressedWriter.Close()
354+
defer func(compressedWriter io.WriteCloser) {
355+
errCompression := compressedWriter.Close()
356+
if errCompression != nil {
357+
log.Errorf(errCompression, "error closing compressed writer - stream")
358+
}
359+
}(compressedWriter)
350360
encErr = decoder.Encode(compressedWriter, req.body)
351361
} else {
352362
encErr = decoder.Encode(writer, req.body)

0 commit comments

Comments
 (0)