Skip to content

Commit d65b2a4

Browse files
authored
manager: add a limit to the capture and replay job history (#695)
1 parent e26e887 commit d65b2a4

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

pkg/sqlreplay/manager/manager.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ import (
1818
"go.uber.org/zap"
1919
)
2020

21+
const (
22+
maxJobHistoryCount = 10
23+
)
24+
2125
type CertManager interface {
2226
SQLTLS() *tls.Config
2327
}
@@ -99,7 +103,7 @@ func (jm *jobManager) StartCapture(cfg capture.CaptureConfig) error {
99103
cfg: cfg,
100104
}
101105
jm.lg.Info("start capture", zap.String("job", newJob.String()))
102-
jm.jobHistory = append(jm.jobHistory, newJob)
106+
jm.addToHistory(newJob)
103107
return nil
104108
}
105109

@@ -127,10 +131,19 @@ func (jm *jobManager) StartReplay(cfg replay.ReplayConfig) error {
127131
cfg: cfg,
128132
}
129133
jm.lg.Info("start replay", zap.String("job", newJob.String()))
130-
jm.jobHistory = append(jm.jobHistory, newJob)
134+
jm.addToHistory(newJob)
131135
return nil
132136
}
133137

138+
func (jm *jobManager) addToHistory(newJob Job) {
139+
if len(jm.jobHistory) >= maxJobHistoryCount {
140+
copy(jm.jobHistory, jm.jobHistory[1:])
141+
jm.jobHistory[len(jm.jobHistory)-1] = newJob
142+
} else {
143+
jm.jobHistory = append(jm.jobHistory, newJob)
144+
}
145+
}
146+
134147
func (jm *jobManager) GetCapture() capture.Capture {
135148
return jm.capture
136149
}

pkg/sqlreplay/manager/manager_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,3 +131,21 @@ func TestMarshalJobHistory(t *testing.T) {
131131
}
132132
]`, mgr.Jobs())
133133
}
134+
135+
func TestHistoryLen(t *testing.T) {
136+
mgr := NewJobManager(zap.NewNop(), &config.Config{}, &mockCertMgr{}, nil, nil)
137+
defer mgr.Close()
138+
cpt, rep := &mockCapture{}, &mockReplay{}
139+
mgr.capture, mgr.replay = cpt, rep
140+
require.Len(t, mgr.jobHistory, 0)
141+
142+
for i := 0; i < maxJobHistoryCount+1; i++ {
143+
require.NoError(t, mgr.StartCapture(capture.CaptureConfig{}))
144+
require.Contains(t, mgr.Stop(), "stopped")
145+
expectedLen := i + 1
146+
if expectedLen > maxJobHistoryCount {
147+
expectedLen = maxJobHistoryCount
148+
}
149+
require.Len(t, mgr.jobHistory, expectedLen)
150+
}
151+
}

0 commit comments

Comments
 (0)