diff options
| author | Chris Lu <chris.lu@gmail.com> | 2020-09-03 11:00:20 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2020-09-03 11:00:20 -0700 |
| commit | b8f32bcab94a23cc5cb92f32fdd655a5b55ebb6d (patch) | |
| tree | bde567ba06f243041e97aef31c35ccdce001d132 /weed/util/compression.go | |
| parent | f76a2b2c8a22c97a5811e0ccf1776043ecc4a0f1 (diff) | |
| download | seaweedfs-b8f32bcab94a23cc5cb92f32fdd655a5b55ebb6d.tar.xz seaweedfs-b8f32bcab94a23cc5cb92f32fdd655a5b55ebb6d.zip | |
filer: compress stored metadata
Diffstat (limited to 'weed/util/compression.go')
| -rw-r--r-- | weed/util/compression.go | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/weed/util/compression.go b/weed/util/compression.go index 2881a7bfd..736f76a5e 100644 --- a/weed/util/compression.go +++ b/weed/util/compression.go @@ -12,15 +12,44 @@ import ( "github.com/klauspost/compress/zstd" ) +var( + UnsupportedCompression = fmt.Errorf("unsupported compression") +) + +func MaybeGzipData(input []byte) ([]byte) { + if IsGzippedContent(input) { + return input + } + gzipped, err := GzipData(input) + if err != nil { + return input + } + if len(gzipped) * 10 > len(input) * 9 { + return input + } + return gzipped +} + +func MaybeDecompressData(input []byte) ([]byte) { + uncompressed, err := DecompressData(input) + if err != nil { + if err != UnsupportedCompression { + glog.Errorf("decompressed data: %v", err) + } + return input + } + return uncompressed +} + func GzipData(input []byte) ([]byte, error) { buf := new(bytes.Buffer) w, _ := gzip.NewWriterLevel(buf, flate.BestSpeed) if _, err := w.Write(input); err != nil { - glog.V(2).Infoln("error compressing data:", err) + glog.V(2).Infof("error gzip data: %v", err) return nil, err } if err := w.Close(); err != nil { - glog.V(2).Infoln("error closing compressed data:", err) + glog.V(2).Infof("error closing gzipped data: %v", err) return nil, err } return buf.Bytes(), nil @@ -39,7 +68,7 @@ func DecompressData(input []byte) ([]byte, error) { if IsZstdContent(input) { return unzstdData(input) } - return input, fmt.Errorf("unsupported compression") + return input, UnsupportedCompression } func ungzipData(input []byte) ([]byte, error) { @@ -48,7 +77,7 @@ func ungzipData(input []byte) ([]byte, error) { defer r.Close() output, err := ioutil.ReadAll(r) if err != nil { - glog.V(2).Infoln("error uncompressing data:", err) + glog.V(2).Infof("error ungzip data: %v", err) } return output, err } |
