Skip to content

Commit c834132

Browse files
authored
store: compress traffic files after encryption (#731)
1 parent 01e5a82 commit c834132

File tree

2 files changed

+58
-10
lines changed

2 files changed

+58
-10
lines changed

pkg/sqlreplay/store/rotate.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -62,20 +62,20 @@ func (w *rotateWriter) createFile() error {
6262
}
6363
w.fileIdx++
6464
fileName := fmt.Sprintf("%s%d%s%s", fileNamePrefix, w.fileIdx, fileNameSuffix, ext)
65-
// compressWriter -> encryptWriter -> file
65+
// rotateWriter -> encryptWriter -> compressWriter -> file
6666
ctx, cancel := context.WithTimeout(context.Background(), opTimeout)
6767
fileWriter, err := w.storage.Create(ctx, fileName, &storage.WriterOption{})
6868
cancel()
69-
writer := NewStorageWriter(fileWriter)
69+
w.writer = NewStorageWriter(fileWriter)
7070
if err != nil {
7171
return errors.WithStack(err)
7272
}
73-
if w.writer, err = newWriterWithEncryptOpts(writer, w.cfg.EncryptMethod, w.cfg.KeyFile); err != nil {
74-
return err
75-
}
7673
if w.cfg.Compress {
7774
w.writer = newCompressWriter(w.lg, w.writer)
7875
}
76+
if w.writer, err = newWriterWithEncryptOpts(w.writer, w.cfg.EncryptMethod, w.cfg.KeyFile); err != nil {
77+
return err
78+
}
7979
return nil
8080
}
8181

@@ -199,18 +199,19 @@ func (r *rotateReader) nextReader() error {
199199
return errors.WithStack(err)
200200
}
201201
r.externalFile = fileReader
202+
r.reader = fileReader
202203
r.curFileIdx = minFileIdx
203204
r.curFileName = minFileName
204-
// compressReader -> encryptReader -> file
205-
r.reader, err = newReaderWithEncryptOpts(fileReader, r.cfg.EncryptMethod, r.cfg.KeyFile)
206-
if err != nil {
207-
return err
208-
}
205+
// rotateReader -> encryptReader -> compressReader -> file
209206
if strings.HasSuffix(minFileName, fileCompressFormat) {
210207
if r.reader, err = newCompressReader(r.reader); err != nil {
211208
return err
212209
}
213210
}
211+
r.reader, err = newReaderWithEncryptOpts(r.reader, r.cfg.EncryptMethod, r.cfg.KeyFile)
212+
if err != nil {
213+
return err
214+
}
214215
r.lg.Info("reading next file", zap.String("file", minFileName))
215216
return nil
216217
}

pkg/sqlreplay/store/rotate_test.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package store
55

66
import (
77
"compress/gzip"
8+
"context"
89
"errors"
910
"io"
1011
"os"
@@ -257,3 +258,49 @@ func TestReadGZip(t *testing.T) {
257258
l.Close()
258259
}
259260
}
261+
262+
func TestCompressAndEncrypt(t *testing.T) {
263+
tmpDir := t.TempDir()
264+
storage, err := NewStorage(tmpDir)
265+
require.NoError(t, err)
266+
defer storage.Close()
267+
require.NoError(t, storage.WriteFile(context.Background(), "key", genAesKey()))
268+
keyFile := filepath.Join(tmpDir, "key")
269+
270+
// write with compression and encryption
271+
writer, err := newRotateWriter(zap.NewNop(), storage, WriterCfg{
272+
Dir: tmpDir,
273+
FileSize: 1000,
274+
Compress: true,
275+
EncryptMethod: EncryptAes,
276+
KeyFile: keyFile,
277+
})
278+
require.NoError(t, err)
279+
_, err = writer.Write([]byte("test"))
280+
require.NoError(t, err)
281+
require.NoError(t, writer.Close())
282+
283+
// make sure data is compressed after encryption
284+
file, err := os.Open(filepath.Join(tmpDir, "traffic-1.log.gz"))
285+
require.NoError(t, err)
286+
greader, err := gzip.NewReader(file)
287+
require.NoError(t, err)
288+
data := make([]byte, 1000)
289+
n, err := io.ReadFull(greader, data)
290+
require.ErrorContains(t, err, "EOF")
291+
require.Equal(t, 20, n)
292+
require.NoError(t, file.Close())
293+
294+
// rotateReader is able to read the file
295+
reader, err := newRotateReader(zap.NewNop(), storage, ReaderCfg{
296+
Dir: tmpDir,
297+
EncryptMethod: EncryptAes,
298+
KeyFile: keyFile,
299+
})
300+
require.NoError(t, err)
301+
n, err = io.ReadFull(reader, data)
302+
require.ErrorContains(t, err, "EOF")
303+
require.Equal(t, 4, n)
304+
require.Equal(t, []byte("test"), data[:4])
305+
require.NoError(t, reader.Close())
306+
}

0 commit comments

Comments
 (0)