@@ -111,7 +111,10 @@ type testDataCollector interface {
111
111
112
112
func BenchmarkPerfScheduling (b * testing.B ) {
113
113
dataItems := DataItems {Version : "v1" }
114
- tests := getSimpleTestCases (configFile )
114
+ tests , err := parseTestCases (configFile )
115
+ if err != nil {
116
+ b .Fatal (err )
117
+ }
115
118
116
119
for _ , test := range tests {
117
120
name := fmt .Sprintf ("%v/%vNodes/%vInitPods/%vPodsToSchedule" , test .Desc , test .Nodes .Num , test .InitPods .Num , test .PodsToSchedule .Num )
@@ -131,14 +134,21 @@ func perfScheduling(test testCase, b *testing.B) []DataItem {
131
134
finalFunc , podInformer , clientset := mustSetupScheduler ()
132
135
defer finalFunc ()
133
136
134
- nodePreparer := getNodePreparer (test .Nodes , clientset )
137
+ nodePreparer , err := getNodePreparer (test .Nodes , clientset )
138
+ if err != nil {
139
+ b .Fatal (err )
140
+ }
135
141
if err := nodePreparer .PrepareNodes (); err != nil {
136
- klog . Fatalf ( "%v" , err )
142
+ b . Fatal ( err )
137
143
}
138
144
defer nodePreparer .CleanupNodes ()
139
145
140
- createPods (setupNamespace , test .InitPods , clientset )
141
- waitNumPodsScheduled (test .InitPods .Num , podInformer )
146
+ if err := createPods (setupNamespace , test .InitPods , clientset ); err != nil {
147
+ b .Fatal (err )
148
+ }
149
+ if err := waitNumPodsScheduled (b , test .InitPods .Num , podInformer ); err != nil {
150
+ b .Fatal (err )
151
+ }
142
152
143
153
// start benchmark
144
154
b .ResetTimer ()
@@ -151,8 +161,12 @@ func perfScheduling(test testCase, b *testing.B) []DataItem {
151
161
}
152
162
153
163
// Schedule the main workload
154
- createPods (testNamespace , test .PodsToSchedule , clientset )
155
- waitNumPodsScheduled (test .InitPods .Num + test .PodsToSchedule .Num , podInformer )
164
+ if err := createPods (testNamespace , test .PodsToSchedule , clientset ); err != nil {
165
+ b .Fatal (err )
166
+ }
167
+ if err := waitNumPodsScheduled (b , test .InitPods .Num + test .PodsToSchedule .Num , podInformer ); err != nil {
168
+ b .Fatal (err )
169
+ }
156
170
157
171
close (stopCh )
158
172
// Note: without this line we're taking the overhead of defer() into account.
@@ -165,18 +179,19 @@ func perfScheduling(test testCase, b *testing.B) []DataItem {
165
179
return dataItems
166
180
}
167
181
168
- func waitNumPodsScheduled (num int , podInformer coreinformers.PodInformer ) {
182
+ func waitNumPodsScheduled (b * testing. B , num int , podInformer coreinformers.PodInformer ) error {
169
183
for {
170
184
scheduled , err := getScheduledPods (podInformer )
171
185
if err != nil {
172
- klog . Fatalf ( "%v" , err )
186
+ return err
173
187
}
174
188
if len (scheduled ) >= num {
175
189
break
176
190
}
177
- klog .Infof ("got %d existing pods, required: %d" , len (scheduled ), num )
191
+ klog .Infof ("%s: got %d existing pods, required: %d" , b . Name () , len (scheduled ), num )
178
192
time .Sleep (1 * time .Second )
179
193
}
194
+ return nil
180
195
}
181
196
182
197
func getTestDataCollectors (tc testCase , podInformer coreinformers.PodInformer , b * testing.B ) []testDataCollector {
@@ -189,7 +204,7 @@ func getTestDataCollectors(tc testCase, podInformer coreinformers.PodInformer, b
189
204
return collectors
190
205
}
191
206
192
- func getNodePreparer (nc nodeCase , clientset clientset.Interface ) testutils.TestNodePreparer {
207
+ func getNodePreparer (nc nodeCase , clientset clientset.Interface ) ( testutils.TestNodePreparer , error ) {
193
208
var nodeStrategy testutils.PrepareNodeStrategy = & testutils.TrivialNodePrepareStrategy {}
194
209
if nc .NodeAllocatableStrategy != nil {
195
210
nodeStrategy = nc .NodeAllocatableStrategy
@@ -200,44 +215,63 @@ func getNodePreparer(nc nodeCase, clientset clientset.Interface) testutils.TestN
200
215
}
201
216
202
217
if nc .NodeTemplatePath != nil {
218
+ node , err := getNodeSpecFromFile (nc .NodeTemplatePath )
219
+ if err != nil {
220
+ return nil , err
221
+ }
203
222
return framework .NewIntegrationTestNodePreparerWithNodeSpec (
204
223
clientset ,
205
224
[]testutils.CountToStrategy {{Count : nc .Num , Strategy : nodeStrategy }},
206
- getNodeSpecFromFile ( nc . NodeTemplatePath ) ,
207
- )
225
+ node ,
226
+ ), nil
208
227
}
209
228
return framework .NewIntegrationTestNodePreparer (
210
229
clientset ,
211
230
[]testutils.CountToStrategy {{Count : nc .Num , Strategy : nodeStrategy }},
212
231
"scheduler-perf-" ,
213
- )
232
+ ), nil
214
233
}
215
234
216
- func createPods (ns string , pc podCase , clientset clientset.Interface ) {
217
- strategy := getPodStrategy (pc )
235
+ func createPods (ns string , pc podCase , clientset clientset.Interface ) error {
236
+ strategy , err := getPodStrategy (pc )
237
+ if err != nil {
238
+ return err
239
+ }
218
240
config := testutils .NewTestPodCreatorConfig ()
219
241
config .AddStrategy (ns , pc .Num , strategy )
220
242
podCreator := testutils .NewTestPodCreator (clientset , config )
221
- podCreator .CreatePods ()
243
+ return podCreator .CreatePods ()
222
244
}
223
245
224
- func getPodStrategy (pc podCase ) testutils.TestPodCreateStrategy {
246
+ func getPodStrategy (pc podCase ) ( testutils.TestPodCreateStrategy , error ) {
225
247
basePod := makeBasePod ()
226
248
if pc .PodTemplatePath != nil {
227
- basePod = getPodSpecFromFile (pc .PodTemplatePath )
249
+ var err error
250
+ basePod , err = getPodSpecFromFile (pc .PodTemplatePath )
251
+ if err != nil {
252
+ return nil , err
253
+ }
228
254
}
229
255
if pc .PersistentVolumeClaimTemplatePath == nil {
230
- return testutils .NewCustomCreatePodStrategy (basePod )
256
+ return testutils .NewCustomCreatePodStrategy (basePod ), nil
231
257
}
232
258
233
- pvTemplate := getPersistentVolumeSpecFromFile (pc .PersistentVolumeTemplatePath )
234
- pvcTemplate := getPersistentVolumeClaimSpecFromFile (pc .PersistentVolumeClaimTemplatePath )
235
- return testutils .NewCreatePodWithPersistentVolumeStrategy (pvcTemplate , getCustomVolumeFactory (pvTemplate ), basePod )
259
+ pvTemplate , err := getPersistentVolumeSpecFromFile (pc .PersistentVolumeTemplatePath )
260
+ if err != nil {
261
+ return nil , err
262
+ }
263
+ pvcTemplate , err := getPersistentVolumeClaimSpecFromFile (pc .PersistentVolumeClaimTemplatePath )
264
+ if err != nil {
265
+ return nil , err
266
+ }
267
+ return testutils .NewCreatePodWithPersistentVolumeStrategy (pvcTemplate , getCustomVolumeFactory (pvTemplate ), basePod ), nil
236
268
}
237
269
238
- func getSimpleTestCases (path string ) []testCase {
270
+ func parseTestCases (path string ) ( []testCase , error ) {
239
271
var simpleTests []simpleTestCases
240
- getSpecFromFile (& path , & simpleTests )
272
+ if err := getSpecFromFile (& path , & simpleTests ); err != nil {
273
+ return nil , fmt .Errorf ("parsing test cases: %v" , err )
274
+ }
241
275
242
276
testCases := make ([]testCase , 0 )
243
277
for _ , s := range simpleTests {
@@ -250,41 +284,47 @@ func getSimpleTestCases(path string) []testCase {
250
284
}
251
285
}
252
286
253
- return testCases
287
+ return testCases , nil
254
288
}
255
289
256
- func getNodeSpecFromFile (path * string ) * v1.Node {
290
+ func getNodeSpecFromFile (path * string ) ( * v1.Node , error ) {
257
291
nodeSpec := & v1.Node {}
258
- getSpecFromFile (path , nodeSpec )
259
- return nodeSpec
292
+ if err := getSpecFromFile (path , nodeSpec ); err != nil {
293
+ return nil , fmt .Errorf ("parsing Node: %v" , err )
294
+ }
295
+ return nodeSpec , nil
260
296
}
261
297
262
- func getPodSpecFromFile (path * string ) * v1.Pod {
298
+ func getPodSpecFromFile (path * string ) ( * v1.Pod , error ) {
263
299
podSpec := & v1.Pod {}
264
- getSpecFromFile (path , podSpec )
265
- return podSpec
300
+ if err := getSpecFromFile (path , podSpec ); err != nil {
301
+ return nil , fmt .Errorf ("parsing Pod: %v" , err )
302
+ }
303
+ return podSpec , nil
266
304
}
267
305
268
- func getPersistentVolumeSpecFromFile (path * string ) * v1.PersistentVolume {
306
+ func getPersistentVolumeSpecFromFile (path * string ) ( * v1.PersistentVolume , error ) {
269
307
persistentVolumeSpec := & v1.PersistentVolume {}
270
- getSpecFromFile (path , persistentVolumeSpec )
271
- return persistentVolumeSpec
308
+ if err := getSpecFromFile (path , persistentVolumeSpec ); err != nil {
309
+ return nil , fmt .Errorf ("parsing PersistentVolume: %v" , err )
310
+ }
311
+ return persistentVolumeSpec , nil
272
312
}
273
313
274
- func getPersistentVolumeClaimSpecFromFile (path * string ) * v1.PersistentVolumeClaim {
314
+ func getPersistentVolumeClaimSpecFromFile (path * string ) ( * v1.PersistentVolumeClaim , error ) {
275
315
persistentVolumeClaimSpec := & v1.PersistentVolumeClaim {}
276
- getSpecFromFile (path , persistentVolumeClaimSpec )
277
- return persistentVolumeClaimSpec
316
+ if err := getSpecFromFile (path , persistentVolumeClaimSpec ); err != nil {
317
+ return nil , fmt .Errorf ("parsing PersistentVolumeClaim: %v" , err )
318
+ }
319
+ return persistentVolumeClaimSpec , nil
278
320
}
279
321
280
- func getSpecFromFile (path * string , spec interface {}) {
322
+ func getSpecFromFile (path * string , spec interface {}) error {
281
323
bytes , err := ioutil .ReadFile (* path )
282
324
if err != nil {
283
- klog .Fatalf ("%v" , err )
284
- }
285
- if err := yaml .Unmarshal (bytes , spec ); err != nil {
286
- klog .Fatalf ("%v" , err )
325
+ return err
287
326
}
327
+ return yaml .Unmarshal (bytes , spec )
288
328
}
289
329
290
330
func getCustomVolumeFactory (pvTemplate * v1.PersistentVolume ) func (id int ) * v1.PersistentVolume {
0 commit comments