From 2f3aa344aff407edb30f877c88891f7e4c7fe367 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Wed, 18 Feb 2015 23:30:59 +0100 Subject: [PATCH] Make decryptReader fulfill flate.Reader benchmark old ns/op new ns/op delta BenchmarkLoadJSONID 50232171 48596972 -3.26% benchmark old allocs new allocs delta BenchmarkLoadJSONID 43643 42884 -1.74% benchmark old bytes new bytes delta BenchmarkLoadJSONID 5773048 3785517 -34.43% --- key.go | 18 ++++++++++++++++++ server.go | 5 ++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/key.go b/key.go index c914f77e5..cbaf5a92c 100644 --- a/key.go +++ b/key.go @@ -543,6 +543,24 @@ func (d *decryptReader) Read(dst []byte) (int, error) { return n, nil } +func (d *decryptReader) ReadByte() (c byte, err error) { + if d.buf == nil { + return 0, io.EOF + } + + remaining := len(d.buf) - d.pos + if remaining == 1 { + c = d.buf[d.pos] + d.Close() + return c, io.EOF + } + + c = d.buf[d.pos] + d.pos++ + + return +} + func (d *decryptReader) Close() error { if d.buf == nil { return nil diff --git a/server.go b/server.go index 07adeec97..1a2e58a8b 100644 --- a/server.go +++ b/server.go @@ -2,6 +2,7 @@ package restic import ( "bytes" + "compress/flate" "compress/zlib" "crypto/sha256" "encoding/json" @@ -146,8 +147,10 @@ func (s Server) LoadJSONID(t backend.Type, storageID backend.ID, item interface{ } // unzip + br := decryptRd.(flate.Reader) + unzipRd := zReaderPool.Get().(zReader) - err = unzipRd.Reset(decryptRd, nil) + err = unzipRd.Reset(br, nil) defer func() { unzipRd.Close() zReaderPool.Put(unzipRd)