@@ -31,12 +31,12 @@ import (
31
31
)
32
32
33
33
var (
34
- EtcdPutDeleteLease Traffic = etcdTraffic {
35
- keyCount : 10 ,
36
- leaseTTL : DefaultLeaseTTL ,
37
- largePutSize : 32769 ,
34
+ EtcdPutDeleteLease Traffic = EtcdTraffic {
35
+ KeyCount : 10 ,
36
+ LeaseTTL : DefaultLeaseTTL ,
37
+ LargePutSize : 32769 ,
38
38
// Please keep the sum of weights equal 100.
39
- requests : []random.ChoiceWeight [etcdRequestType ]{
39
+ Requests : []random.ChoiceWeight [EtcdRequestType ]{
40
40
{Choice : Get , Weight : 15 },
41
41
{Choice : List , Weight : 15 },
42
42
{Choice : StaleGet , Weight : 10 },
@@ -50,12 +50,12 @@ var (
50
50
{Choice : LargePut , Weight : 5 },
51
51
},
52
52
}
53
- EtcdPut Traffic = etcdTraffic {
54
- keyCount : 10 ,
55
- largePutSize : 32769 ,
56
- leaseTTL : DefaultLeaseTTL ,
53
+ EtcdPut Traffic = EtcdTraffic {
54
+ KeyCount : 10 ,
55
+ LargePutSize : 32769 ,
56
+ LeaseTTL : DefaultLeaseTTL ,
57
57
// Please keep the sum of weights equal 100.
58
- requests : []random.ChoiceWeight [etcdRequestType ]{
58
+ Requests : []random.ChoiceWeight [EtcdRequestType ]{
59
59
{Choice : Get , Weight : 15 },
60
60
{Choice : List , Weight : 15 },
61
61
{Choice : StaleGet , Weight : 10 },
@@ -65,56 +65,65 @@ var (
65
65
{Choice : Put , Weight : 40 },
66
66
},
67
67
}
68
- EtcdDelete Traffic = etcdTraffic {
69
- keyCount : 10 ,
70
- largePutSize : 32769 ,
71
- leaseTTL : DefaultLeaseTTL ,
68
+ EtcdDelete Traffic = EtcdTraffic {
69
+ KeyCount : 10 ,
70
+ LargePutSize : 32769 ,
71
+ LeaseTTL : DefaultLeaseTTL ,
72
72
// Please keep the sum of weights equal 100.
73
- requests : []random.ChoiceWeight [etcdRequestType ]{
73
+ Requests : []random.ChoiceWeight [EtcdRequestType ]{
74
74
{Choice : Put , Weight : 50 },
75
75
{Choice : Delete , Weight : 50 },
76
76
},
77
77
}
78
78
)
79
79
80
- type etcdTraffic struct {
81
- keyCount int
82
- requests []random.ChoiceWeight [etcdRequestType ]
83
- leaseTTL int64
84
- largePutSize int
80
+ type EtcdTraffic struct {
81
+ KeyCount int
82
+ Requests []random.ChoiceWeight [EtcdRequestType ]
83
+ LeaseTTL int64
84
+ LargePutSize int
85
85
}
86
86
87
- func (t etcdTraffic ) ExpectUniqueRevision () bool {
87
+ func NewEtcdTraffic (keycount , largePutsize int , leaseTTL int64 , requests []random.ChoiceWeight [EtcdRequestType ]) EtcdTraffic {
88
+ return EtcdTraffic {
89
+ KeyCount : keycount ,
90
+ Requests : requests ,
91
+ LeaseTTL : leaseTTL ,
92
+ LargePutSize : largePutsize ,
93
+ }
94
+ }
95
+
96
+ func (t EtcdTraffic ) ExpectUniqueRevision () bool {
88
97
return false
89
98
}
90
99
91
- type etcdRequestType string
100
+ type EtcdRequestType string
92
101
93
102
const (
94
- Get etcdRequestType = "get"
95
- StaleGet etcdRequestType = "staleGet"
96
- List etcdRequestType = "list"
97
- StaleList etcdRequestType = "staleList"
98
- Put etcdRequestType = "put"
99
- LargePut etcdRequestType = "largePut"
100
- Delete etcdRequestType = "delete"
101
- MultiOpTxn etcdRequestType = "multiOpTxn"
102
- PutWithLease etcdRequestType = "putWithLease"
103
- LeaseRevoke etcdRequestType = "leaseRevoke"
104
- CompareAndSet etcdRequestType = "compareAndSet"
105
- Defragment etcdRequestType = "defragment"
103
+ Get EtcdRequestType = "get"
104
+ StaleGet EtcdRequestType = "staleGet"
105
+ List EtcdRequestType = "list"
106
+ StaleList EtcdRequestType = "staleList"
107
+ Put EtcdRequestType = "put"
108
+ LargePut EtcdRequestType = "largePut"
109
+ Delete EtcdRequestType = "delete"
110
+ MultiOpTxn EtcdRequestType = "multiOpTxn"
111
+ PutWithLease EtcdRequestType = "putWithLease"
112
+ LeaseRevoke EtcdRequestType = "leaseRevoke"
113
+ CompareAndSet EtcdRequestType = "compareAndSet"
114
+ Defragment EtcdRequestType = "defragment"
106
115
)
107
116
108
- func (t etcdTraffic ) Name () string {
117
+ func (t EtcdTraffic ) Name () string {
109
118
return "Etcd"
110
119
}
111
120
112
- func (t etcdTraffic ) RunTrafficLoop (ctx context.Context , c * client.RecordingClient , limiter * rate.Limiter , ids identity.Provider , lm identity.LeaseIDStorage , nonUniqueWriteLimiter ConcurrencyLimiter , finish <- chan struct {}) {
121
+ func (t EtcdTraffic ) RunTrafficLoop (ctx context.Context , c * client.RecordingClient , limiter * rate.Limiter , ids identity.Provider , lm identity.LeaseIDStorage , nonUniqueWriteLimiter ConcurrencyLimiter , finish <- chan struct {}) {
113
122
lastOperationSucceeded := true
114
123
var lastRev int64
115
- var requestType etcdRequestType
124
+ var requestType EtcdRequestType
116
125
client := etcdTrafficClient {
117
- etcdTraffic : t ,
126
+ EtcdTraffic : t ,
118
127
keyPrefix : "key" ,
119
128
client : c ,
120
129
limiter : limiter ,
@@ -133,7 +142,7 @@ func (t etcdTraffic) RunTrafficLoop(ctx context.Context, c *client.RecordingClie
133
142
134
143
// Avoid multiple failed writes in a row
135
144
if lastOperationSucceeded {
136
- choices := t .requests
145
+ choices := t .Requests
137
146
if shouldReturn = nonUniqueWriteLimiter .Take (); ! shouldReturn {
138
147
choices = filterOutNonUniqueEtcdWrites (choices )
139
148
}
@@ -156,7 +165,7 @@ func (t etcdTraffic) RunTrafficLoop(ctx context.Context, c *client.RecordingClie
156
165
}
157
166
}
158
167
159
- func (t etcdTraffic ) RunCompactLoop (ctx context.Context , c * client.RecordingClient , period time.Duration , finish <- chan struct {}) {
168
+ func (t EtcdTraffic ) RunCompactLoop (ctx context.Context , c * client.RecordingClient , period time.Duration , finish <- chan struct {}) {
160
169
var lastRev int64 = 2
161
170
ticker := time .NewTicker (period )
162
171
defer ticker .Stop ()
@@ -185,7 +194,7 @@ func (t etcdTraffic) RunCompactLoop(ctx context.Context, c *client.RecordingClie
185
194
}
186
195
}
187
196
188
- func filterOutNonUniqueEtcdWrites (choices []random.ChoiceWeight [etcdRequestType ]) (resp []random.ChoiceWeight [etcdRequestType ]) {
197
+ func filterOutNonUniqueEtcdWrites (choices []random.ChoiceWeight [EtcdRequestType ]) (resp []random.ChoiceWeight [EtcdRequestType ]) {
189
198
for _ , choice := range choices {
190
199
if choice .Choice != Delete && choice .Choice != LeaseRevoke {
191
200
resp = append (resp , choice )
@@ -195,15 +204,15 @@ func filterOutNonUniqueEtcdWrites(choices []random.ChoiceWeight[etcdRequestType]
195
204
}
196
205
197
206
type etcdTrafficClient struct {
198
- etcdTraffic
207
+ EtcdTraffic
199
208
keyPrefix string
200
209
client * client.RecordingClient
201
210
limiter * rate.Limiter
202
211
idProvider identity.Provider
203
212
leaseStorage identity.LeaseIDStorage
204
213
}
205
214
206
- func (c etcdTrafficClient ) Request (ctx context.Context , request etcdRequestType , lastRev int64 ) (rev int64 , err error ) {
215
+ func (c etcdTrafficClient ) Request (ctx context.Context , request EtcdRequestType , lastRev int64 ) (rev int64 , err error ) {
207
216
opCtx , cancel := context .WithTimeout (ctx , RequestTimeout )
208
217
defer cancel ()
209
218
@@ -241,7 +250,7 @@ func (c etcdTrafficClient) Request(ctx context.Context, request etcdRequestType,
241
250
}
242
251
case LargePut :
243
252
var resp * clientv3.PutResponse
244
- resp , err = c .client .Put (opCtx , c .randomKey (), random .RandString (c .largePutSize ))
253
+ resp , err = c .client .Put (opCtx , c .randomKey (), random .RandString (c .LargePutSize ))
245
254
if resp != nil {
246
255
rev = resp .Header .Revision
247
256
}
@@ -290,7 +299,7 @@ func (c etcdTrafficClient) Request(ctx context.Context, request etcdRequestType,
290
299
leaseID := c .leaseStorage .LeaseID (c .client .ID )
291
300
if leaseID == 0 {
292
301
var resp * clientv3.LeaseGrantResponse
293
- resp , err = c .client .LeaseGrant (opCtx , c .leaseTTL )
302
+ resp , err = c .client .LeaseGrant (opCtx , c .LeaseTTL )
294
303
if resp != nil {
295
304
leaseID = int64 (resp .ID )
296
305
rev = resp .ResponseHeader .Revision
@@ -335,7 +344,7 @@ func (c etcdTrafficClient) Request(ctx context.Context, request etcdRequestType,
335
344
}
336
345
337
346
func (c etcdTrafficClient ) pickMultiTxnOps () (ops []clientv3.Op ) {
338
- keys := rand .Perm (c .keyCount )
347
+ keys := rand .Perm (c .KeyCount )
339
348
opTypes := make ([]model.OperationType , 4 )
340
349
341
350
atLeastOnePut := false
@@ -372,10 +381,10 @@ func (c etcdTrafficClient) randomKey() string {
372
381
}
373
382
374
383
func (c etcdTrafficClient ) key (i int ) string {
375
- return fmt .Sprintf ("%s%d" , c .keyPrefix , i % c .keyCount )
384
+ return fmt .Sprintf ("%s%d" , c .keyPrefix , i % c .KeyCount )
376
385
}
377
386
378
- func (t etcdTraffic ) pickOperationType () model.OperationType {
387
+ func (t EtcdTraffic ) pickOperationType () model.OperationType {
379
388
roll := rand .Int () % 100
380
389
if roll < 10 {
381
390
return model .DeleteOperation
0 commit comments