@@ -7,6 +7,7 @@ package roachtestutil
7
7
8
8
import (
9
9
"context"
10
+ "time"
10
11
11
12
"github.com/cockroachdb/cockroach/pkg/cmd/roachtest/cluster"
12
13
"github.com/cockroachdb/cockroach/pkg/cmd/roachtest/option"
@@ -22,6 +23,7 @@ type DiskStaller interface {
22
23
Setup (ctx context.Context )
23
24
Cleanup (ctx context.Context )
24
25
Stall (ctx context.Context , nodes option.NodeListOption )
26
+ StallCycle (ctx context.Context , nodes option.NodeListOption , stallDuration , unstallDuration time.Duration )
25
27
Slow (ctx context.Context , nodes option.NodeListOption , bytesPerSecond int )
26
28
Unstall (ctx context.Context , nodes option.NodeListOption )
27
29
DataDir () string
@@ -32,13 +34,16 @@ type NoopDiskStaller struct{}
32
34
33
35
var _ DiskStaller = NoopDiskStaller {}
34
36
35
- func (n NoopDiskStaller ) Cleanup (ctx context.Context ) {}
36
- func (n NoopDiskStaller ) DataDir () string { return "{store-dir}" }
37
- func (n NoopDiskStaller ) LogDir () string { return "logs" }
38
- func (n NoopDiskStaller ) Setup (ctx context.Context ) {}
39
- func (n NoopDiskStaller ) Slow (_ context.Context , _ option.NodeListOption , _ int ) {}
40
- func (n NoopDiskStaller ) Stall (_ context.Context , _ option.NodeListOption ) {}
41
- func (n NoopDiskStaller ) Unstall (_ context.Context , _ option.NodeListOption ) {}
37
+ func (n NoopDiskStaller ) Cleanup (ctx context.Context ) {}
38
+ func (n NoopDiskStaller ) DataDir () string { return "{store-dir}" }
39
+ func (n NoopDiskStaller ) LogDir () string { return "logs" }
40
+ func (n NoopDiskStaller ) Setup (ctx context.Context ) {}
41
+ func (n NoopDiskStaller ) Slow (_ context.Context , _ option.NodeListOption , _ int ) {}
42
+ func (n NoopDiskStaller ) Stall (_ context.Context , _ option.NodeListOption ) {}
43
+ func (n NoopDiskStaller ) StallCycle (
44
+ _ context.Context , _ option.NodeListOption , _ , _ time.Duration ,
45
+ ) {}
46
+ func (n NoopDiskStaller ) Unstall (_ context.Context , _ option.NodeListOption ) {}
42
47
43
48
type Fataler interface {
44
49
Fatal (args ... interface {})
@@ -103,6 +108,23 @@ func (s *cgroupDiskStaller) Stall(ctx context.Context, nodes option.NodeListOpti
103
108
}
104
109
}
105
110
111
+ func (s * cgroupDiskStaller ) StallCycle (
112
+ ctx context.Context , nodes option.NodeListOption , stallDuration , unstallDuration time.Duration ,
113
+ ) {
114
+ l := newDiskStallLogger (s .f .L (), nodes , "Stall" )
115
+ if err := s .Failer .Inject (ctx , l , failures.DiskStallArgs {
116
+ StallLogs : s .stallLogs ,
117
+ StallWrites : true ,
118
+ StallReads : s .stallReads ,
119
+ Nodes : nodes .InstallNodes (),
120
+ Cycle : true ,
121
+ CycleStallDuration : stallDuration ,
122
+ CycleUnstallDuration : unstallDuration ,
123
+ }); err != nil {
124
+ s .f .Fatalf ("failed to stall disk: %s" , err )
125
+ }
126
+ }
127
+
106
128
func (s * cgroupDiskStaller ) Slow (
107
129
ctx context.Context , nodes option.NodeListOption , bytesPerSecond int ,
108
130
) {
@@ -168,6 +190,20 @@ func (s *dmsetupDiskStaller) Stall(ctx context.Context, nodes option.NodeListOpt
168
190
}
169
191
}
170
192
193
+ func (s * dmsetupDiskStaller ) StallCycle (
194
+ ctx context.Context , nodes option.NodeListOption , stallDuration , unstallDuration time.Duration ,
195
+ ) {
196
+ l := newDiskStallLogger (s .f .L (), nodes , "Stall" )
197
+ if err := s .Failer .Inject (ctx , l , failures.DiskStallArgs {
198
+ Nodes : nodes .InstallNodes (),
199
+ Cycle : true ,
200
+ CycleStallDuration : stallDuration ,
201
+ CycleUnstallDuration : unstallDuration ,
202
+ }); err != nil {
203
+ s .f .Fatalf ("failed to stall disk: %s" , err )
204
+ }
205
+ }
206
+
171
207
func (s * dmsetupDiskStaller ) Slow (
172
208
ctx context.Context , nodes option.NodeListOption , bytesPerSecond int ,
173
209
) {
0 commit comments