feat(backend): use zstd compression for cached resonses

This commit is contained in:
Łukasz Mierzwa
2020-05-16 12:52:47 +01:00
committed by Łukasz Mierzwa
parent 84e523ef1c
commit ee07b80d4b
3 changed files with 17 additions and 7 deletions

View File

@@ -2,7 +2,6 @@ package main
import (
"bytes"
"compress/gzip"
"encoding/base64"
"encoding/json"
"fmt"
@@ -20,6 +19,7 @@ import (
"github.com/prymitive/karma/internal/transform"
"github.com/gin-gonic/gin"
"github.com/klauspost/compress/zstd"
log "github.com/sirupsen/logrus"
)
@@ -38,15 +38,19 @@ func pong(c *gin.Context) {
func compressResponse(data []byte) ([]byte, error) {
var b bytes.Buffer
// this only fails if we pass unsupported level (3 is valid)
gz, _ := gzip.NewWriterLevel(&b, 3)
_, err := gz.Write(data)
w, err := zstd.NewWriter(&b)
if err != nil {
return nil, fmt.Errorf("failed to create a compressor: %s", err.Error())
}
_, err = w.Write(data)
if err != nil {
w.Close()
return nil, fmt.Errorf("failed to compress data: %s", err.Error())
}
if err = gz.Close(); err != nil {
if err = w.Close(); err != nil {
return nil, fmt.Errorf("failed to close compression writer: %s", err.Error())
}
@@ -58,11 +62,13 @@ func compressResponse(data []byte) ([]byte, error) {
func decompressCachedResponse(data []byte) ([]byte, error) {
b := bytes.NewReader(data)
z, err := gzip.NewReader(b)
r, err := zstd.NewReader(b)
if err != nil {
return nil, fmt.Errorf("failed to created new compression reader: %s", err.Error())
}
p, err := ioutil.ReadAll(z)
p, err := ioutil.ReadAll(r)
if err != nil {
return nil, fmt.Errorf("failed to decompress data: %s", err.Error())
}

1
go.mod
View File

@@ -27,6 +27,7 @@ require (
github.com/google/go-querystring v1.0.0 // indirect
github.com/hansrodtang/randomcolor v0.0.0-20160512071917-d27108b3d7a5
github.com/jarcoal/httpmock v1.0.5
github.com/klauspost/compress v1.10.5
github.com/knadh/koanf v0.10.0
github.com/mitchellh/mapstructure v1.3.0
github.com/patrickmn/go-cache v2.1.1-0.20180815053127-5633e0862627+incompatible

3
go.sum
View File

@@ -312,7 +312,10 @@ github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQL
github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
github.com/klauspost/compress v1.4.1 h1:8VMb5+0wMgdBykOV96DwNwKFQ+WTI4pzYURP99CcB9E=
github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
github.com/klauspost/compress v1.10.5 h1:7q6vHIqubShURwQz8cQK6yIe/xC3IF0Vm7TGfqjewrc=
github.com/klauspost/compress v1.10.5/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
github.com/knadh/koanf v0.10.0 h1:yLhpmguhSOvtLNXHqqyVrvNc27PZMHoj7bdbUt3kzes=