Skip to content

Commit d3195db

Browse files
authored
sqlreplay: fix replay traffic from S3 always reports request is canceled (#747)
1 parent ee2f7c4 commit d3195db

File tree

3 files changed

+28
-22
lines changed

3 files changed

+28
-22
lines changed

pkg/sqlreplay/store/encrypt.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,10 @@ func (ctr *aesCTRReader) Read(data []byte) (int, error) {
112112
if n > 0 {
113113
ctr.stream.XORKeyStream(data[:n], data[:n])
114114
}
115-
if err != nil {
116-
return n, errors.WithStack(err)
115+
if errors.Is(err, io.EOF) {
116+
return n, err
117117
}
118-
return n, nil
118+
return n, errors.WithStack(err)
119119
}
120120

121121
func readAesKey(filename string) ([]byte, error) {

pkg/sqlreplay/store/rotate.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ func (r *rotateReader) Read(data []byte) (int, error) {
133133
if err == nil {
134134
return m, nil
135135
}
136-
if err != io.EOF {
136+
if !errors.Is(err, io.EOF) {
137137
return m, errors.WithStack(err)
138138
}
139139
_ = r.Close()
@@ -192,9 +192,8 @@ func (r *rotateReader) nextReader() error {
192192
if minFileName == "" {
193193
return io.EOF
194194
}
195-
ctx, cancel = context.WithTimeout(context.Background(), opTimeout)
196-
fileReader, err := r.storage.Open(ctx, minFileName, &storage.ReaderOption{})
197-
cancel()
195+
// storage.Open(ctx) stores the context internally for subsequent reads, so don't set a short timeout.
196+
fileReader, err := r.storage.Open(context.Background(), minFileName, &storage.ReaderOption{})
198197
if err != nil {
199198
return errors.WithStack(err)
200199
}

pkg/sqlreplay/store/rotate_test.go

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"compress/gzip"
88
"context"
99
"errors"
10+
"fmt"
1011
"io"
1112
"os"
1213
"path/filepath"
@@ -270,26 +271,31 @@ func TestCompressAndEncrypt(t *testing.T) {
270271
// write with compression and encryption
271272
writer, err := newRotateWriter(zap.NewNop(), storage, WriterCfg{
272273
Dir: tmpDir,
273-
FileSize: 1000,
274+
FileSize: 1,
274275
Compress: true,
275276
EncryptMethod: EncryptAes,
276277
KeyFile: keyFile,
277278
})
278279
require.NoError(t, err)
279-
_, err = writer.Write([]byte("test"))
280-
require.NoError(t, err)
280+
// write into 2 files
281+
for i := 0; i < 2; i++ {
282+
_, err = writer.Write([]byte("test"))
283+
require.NoError(t, err)
284+
}
281285
require.NoError(t, writer.Close())
282286

283287
// 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())
288+
for i := 0; i < 2; i++ {
289+
file, err := os.Open(filepath.Join(tmpDir, fmt.Sprintf("traffic-%d.log.gz", i+1)))
290+
require.NoError(t, err)
291+
greader, err := gzip.NewReader(file)
292+
require.NoError(t, err)
293+
data := make([]byte, 1000)
294+
n, err := io.ReadFull(greader, data)
295+
require.ErrorContains(t, err, "EOF")
296+
require.Equal(t, 20, n)
297+
require.NoError(t, file.Close())
298+
}
293299

294300
// rotateReader is able to read the file
295301
reader, err := newRotateReader(zap.NewNop(), storage, ReaderCfg{
@@ -298,9 +304,10 @@ func TestCompressAndEncrypt(t *testing.T) {
298304
KeyFile: keyFile,
299305
})
300306
require.NoError(t, err)
301-
n, err = io.ReadFull(reader, data)
307+
data := make([]byte, 1000)
308+
n, err := io.ReadFull(reader, data)
302309
require.ErrorContains(t, err, "EOF")
303-
require.Equal(t, 4, n)
304-
require.Equal(t, []byte("test"), data[:4])
310+
require.Equal(t, 8, n)
311+
require.Equal(t, []byte("testtest"), data[:8])
305312
require.NoError(t, reader.Close())
306313
}

0 commit comments

Comments
 (0)