@@ -21,6 +21,7 @@ func main() {
21
21
reqPerSleep := flag .Int ("reqpersleep" , 1 , "number of requests to issue when client wakes up" )
22
22
reqBundlePerConn := flag .Int ("reqbundles" , 1 , "number of times to wake up and send requests before disconnecting (-1 for unlimited)" )
23
23
sleepPerBundle := flag .Duration ("sleepperbundle" , time .Millisecond * 1 , "time to sleep between request bundles (accepts Ns, Nms, etc)" )
24
+ deletePercent := flag .Int ("deletepercent" , 0 , "percentage of queries to issue as deletes instead of gets (0-1000)" )
24
25
keyPrefix := flag .String ("keyprefix" , "mctester:" , "prefix to append to all generated keys" )
25
26
keySpace := flag .Int ("keyspace" , 1000 , "number of unique keys to generate" )
26
27
keyLength := flag .Int ("keylength" , 10 , "number of random characters to append to key" )
@@ -57,6 +58,7 @@ func main() {
57
58
requestsPerSleep : * reqPerSleep ,
58
59
requestBundlesPerConn : * reqBundlePerConn ,
59
60
sleepPerBundle : * sleepPerBundle ,
61
+ deletePercent : * deletePercent ,
60
62
keyLength : * keyLength ,
61
63
keyPrefix : * keyPrefix ,
62
64
keySpace : * keySpace ,
@@ -104,6 +106,7 @@ type BasicLoader struct {
104
106
requestBundlesPerConn int
105
107
sleepPerBundle time.Duration
106
108
setValueSizes []int
109
+ deletePercent int
107
110
keyLength int
108
111
keyPrefix string
109
112
keySpace int
@@ -182,19 +185,29 @@ func (l *BasicLoader) Worker(doneChan chan<- int) {
182
185
// TODO: might be nice to pass (by ref?) prefix in here to make
183
186
// use of string.Builder.
184
187
key := l .keyPrefix + mct .RandString (& subRS , keyLen )
185
- // issue gets
186
- _ , _ , code , err := mc .Get (key )
187
- // validate responses
188
- if err != nil {
189
- fmt .Println (err )
190
- res = - 1
191
- return
192
- }
193
- // set missing values
194
- if code == mct .McMISS {
195
- // TODO: random sizing
196
- value := mct .RandBytes (& rs , int (l .valueSize ))
197
- mc .Set (key , uint32 (l .clientFlags ), uint32 (l .keyTTL ), value )
188
+ // chance we issue a delete instead.
189
+ if l .deletePercent != 0 && randR .Intn (1000 ) < l .deletePercent {
190
+ _ , err := mc .Delete (key )
191
+ if err != nil {
192
+ fmt .Println (err )
193
+ res = - 1
194
+ return
195
+ }
196
+ } else {
197
+ // issue gets
198
+ _ , _ , code , err := mc .Get (key )
199
+ // validate responses
200
+ if err != nil {
201
+ fmt .Println (err )
202
+ res = - 1
203
+ return
204
+ }
205
+ // set missing values
206
+ if code == mct .McMISS {
207
+ // TODO: random sizing
208
+ value := mct .RandBytes (& rs , int (l .valueSize ))
209
+ mc .Set (key , uint32 (l .clientFlags ), uint32 (l .keyTTL ), value )
210
+ }
198
211
}
199
212
}
200
213
time .Sleep (l .sleepPerBundle )
0 commit comments