apf: rename WorkEstimate.Seats to InitialSeats
Kubernetes-commit: 5d67896adedbce27f01b59eb5f2054919a047f2b
This commit is contained in:
		
							parent
							
								
									e75fd4b307
								
							
						
					
					
						commit
						863c48fbc2
					
				|  | @ -71,7 +71,7 @@ const ( | |||
| ) | ||||
| 
 | ||||
| var defaultRequestWorkEstimator = func(*http.Request) fcrequest.WorkEstimate { | ||||
| 	return fcrequest.WorkEstimate{Seats: 1} | ||||
| 	return fcrequest.WorkEstimate{InitialSeats: 1} | ||||
| } | ||||
| 
 | ||||
| type fakeApfFilter struct { | ||||
|  | @ -653,7 +653,7 @@ func TestApfWithRequestDigest(t *testing.T) { | |||
| 		RequestInfo: &apirequest.RequestInfo{Verb: "get"}, | ||||
| 		User:        &user.DefaultInfo{Name: "foo"}, | ||||
| 		WorkEstimate: fcrequest.WorkEstimate{ | ||||
| 			Seats: 5, | ||||
| 			InitialSeats: 5, | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -154,7 +154,7 @@ func TestFIFOSeatsSum(t *testing.T) { | |||
| 	list := newRequestFIFO() | ||||
| 
 | ||||
| 	newRequest := func(width uint) *request { | ||||
| 		return &request{workEstimate: fcrequest.WorkEstimate{Seats: width}} | ||||
| 		return &request{workEstimate: fcrequest.WorkEstimate{InitialSeats: width}} | ||||
| 	} | ||||
| 	arrival := []*request{newRequest(1), newRequest(2), newRequest(3)} | ||||
| 	removeFn := make([]removeFromFIFOFunc, 0) | ||||
|  |  | |||
|  | @ -268,7 +268,7 @@ func (qs *queueSet) StartRequest(ctx context.Context, workEstimate *fqrequest.Wo | |||
| 	// Step 0:
 | ||||
| 	// Apply only concurrency limit, if zero queues desired
 | ||||
| 	if qs.qCfg.DesiredNumQueues < 1 { | ||||
| 		if !qs.canAccommodateSeatsLocked(int(workEstimate.Seats)) { | ||||
| 		if !qs.canAccommodateSeatsLocked(int(workEstimate.InitialSeats)) { | ||||
| 			klog.V(5).Infof("QS(%s): rejecting request %q %#+v %#+v because %d seats are asked for, %d seats are in use (%d are executing) and the limit is %d", | ||||
| 				qs.qCfg.Name, fsName, descr1, descr2, workEstimate, qs.totSeatsInUse, qs.totRequestsExecuting, qs.dCfg.ConcurrencyLimit) | ||||
| 			metrics.AddReject(ctx, qs.qCfg.Name, fsName, "concurrency-limit") | ||||
|  | @ -317,7 +317,7 @@ func ordinaryPromiseFactoryFactory(qs *queueSet) promiseFactory { | |||
| 
 | ||||
| // Seats returns the number of seats this request requires.
 | ||||
| func (req *request) Seats() int { | ||||
| 	return int(req.workEstimate.Seats) | ||||
| 	return int(req.workEstimate.InitialSeats) | ||||
| } | ||||
| 
 | ||||
| func (req *request) NoteQueued(inQueue bool) { | ||||
|  | @ -795,10 +795,10 @@ func (qs *queueSet) finishRequestLocked(r *request) { | |||
| 			if !klog.V(6).Enabled() { | ||||
| 			} else if r.queue != nil { | ||||
| 				klog.Infof("QS(%s) at r=%s v=%.9fss: request %#+v %#+v finished all use of %d seats, adjusted queue %d start R to %.9fss due to service time %.9fs, queue will have %d requests, %d seats waiting & %d requests occupying %d seats", | ||||
| 					qs.qCfg.Name, now.Format(nsTimeFmt), qs.virtualTime, r.descr1, r.descr2, r.workEstimate.Seats, r.queue.index, | ||||
| 					qs.qCfg.Name, now.Format(nsTimeFmt), qs.virtualTime, r.descr1, r.descr2, r.workEstimate.InitialSeats, r.queue.index, | ||||
| 					r.queue.virtualStart, S, r.queue.requests.Length(), r.queue.requests.SeatsSum(), r.queue.requestsExecuting, r.queue.seatsInUse) | ||||
| 			} else { | ||||
| 				klog.Infof("QS(%s) at r=%s v=%.9fss: request %#+v %#+v finished all use of %d seats, qs will have %d requests occupying %d seats", qs.qCfg.Name, now.Format(nsTimeFmt), qs.virtualTime, r.descr1, r.descr2, r.workEstimate.Seats, qs.totRequestsExecuting, qs.totSeatsInUse) | ||||
| 				klog.Infof("QS(%s) at r=%s v=%.9fss: request %#+v %#+v finished all use of %d seats, qs will have %d requests occupying %d seats", qs.qCfg.Name, now.Format(nsTimeFmt), qs.virtualTime, r.descr1, r.descr2, r.workEstimate.InitialSeats, qs.totRequestsExecuting, qs.totSeatsInUse) | ||||
| 			} | ||||
| 			return | ||||
| 		} | ||||
|  | @ -807,10 +807,10 @@ func (qs *queueSet) finishRequestLocked(r *request) { | |||
| 		if !klog.V(6).Enabled() { | ||||
| 		} else if r.queue != nil { | ||||
| 			klog.Infof("QS(%s) at r=%s v=%.9fss: request %#+v %#+v finished main use but lingering on %d seats for %v seconds, adjusted queue %d start R to %.9fss due to service time %.9fs, queue will have %d requests waiting & %d executing, still has %d seats waiting & %d executing", | ||||
| 				qs.qCfg.Name, now.Format(nsTimeFmt), qs.virtualTime, r.descr1, r.descr2, r.workEstimate.Seats, additionalLatency.Seconds(), r.queue.index, | ||||
| 				qs.qCfg.Name, now.Format(nsTimeFmt), qs.virtualTime, r.descr1, r.descr2, r.workEstimate.InitialSeats, additionalLatency.Seconds(), r.queue.index, | ||||
| 				r.queue.virtualStart, S, r.queue.requests.Length(), r.queue.requestsExecuting, r.queue.requests.SeatsSum(), r.queue.seatsInUse) | ||||
| 		} else { | ||||
| 			klog.Infof("QS(%s) at r=%s v=%.9fss: request %#+v %#+v finished main use but lingering on %d seats for %v seconds, qs will have %d requests occupying %d seats", qs.qCfg.Name, now.Format(nsTimeFmt), qs.virtualTime, r.descr1, r.descr2, r.workEstimate.Seats, additionalLatency.Seconds(), qs.totRequestsExecuting, qs.totSeatsInUse) | ||||
| 			klog.Infof("QS(%s) at r=%s v=%.9fss: request %#+v %#+v finished main use but lingering on %d seats for %v seconds, qs will have %d requests occupying %d seats", qs.qCfg.Name, now.Format(nsTimeFmt), qs.virtualTime, r.descr1, r.descr2, r.workEstimate.InitialSeats, additionalLatency.Seconds(), qs.totRequestsExecuting, qs.totSeatsInUse) | ||||
| 		} | ||||
| 		// EventAfterDuration will execute the event func in a new goroutine,
 | ||||
| 		// so the seats allocated to this request will be released after
 | ||||
|  | @ -824,10 +824,10 @@ func (qs *queueSet) finishRequestLocked(r *request) { | |||
| 			if !klog.V(6).Enabled() { | ||||
| 			} else if r.queue != nil { | ||||
| 				klog.Infof("QS(%s) at r=%s v=%.9fss: request %#+v %#+v finished lingering on %d seats, queue %d will have %d requests, %d seats waiting & %d requests occupying %d seats", | ||||
| 					qs.qCfg.Name, now.Format(nsTimeFmt), qs.virtualTime, r.descr1, r.descr2, r.workEstimate.Seats, r.queue.index, | ||||
| 					qs.qCfg.Name, now.Format(nsTimeFmt), qs.virtualTime, r.descr1, r.descr2, r.workEstimate.InitialSeats, r.queue.index, | ||||
| 					r.queue.requests.Length(), r.queue.requests.SeatsSum(), r.queue.requestsExecuting, r.queue.seatsInUse) | ||||
| 			} else { | ||||
| 				klog.Infof("QS(%s) at r=%s v=%.9fss: request %#+v %#+v finished lingering on %d seats, qs will have %d requests occupying %d seats", qs.qCfg.Name, now.Format(nsTimeFmt), qs.virtualTime, r.descr1, r.descr2, r.workEstimate.Seats, qs.totRequestsExecuting, qs.totSeatsInUse) | ||||
| 				klog.Infof("QS(%s) at r=%s v=%.9fss: request %#+v %#+v finished lingering on %d seats, qs will have %d requests occupying %d seats", qs.qCfg.Name, now.Format(nsTimeFmt), qs.virtualTime, r.descr1, r.descr2, r.workEstimate.InitialSeats, qs.totRequestsExecuting, qs.totSeatsInUse) | ||||
| 			} | ||||
| 			qs.dispatchAsMuchAsPossibleLocked() | ||||
| 		}, additionalLatency) | ||||
|  |  | |||
|  | @ -266,7 +266,7 @@ func (ust *uniformScenarioThread) callK(k int) { | |||
| 	if k >= ust.nCalls { | ||||
| 		return | ||||
| 	} | ||||
| 	req, idle := ust.uss.qs.StartRequest(context.Background(), &fcrequest.WorkEstimate{Seats: ust.uc.width, AdditionalLatency: ust.uc.padDuration}, ust.uc.hash, "", ust.fsName, ust.uss.name, []int{ust.i, ust.j, k}, nil) | ||||
| 	req, idle := ust.uss.qs.StartRequest(context.Background(), &fcrequest.WorkEstimate{InitialSeats: ust.uc.width, AdditionalLatency: ust.uc.padDuration}, ust.uc.hash, "", ust.fsName, ust.uss.name, []int{ust.i, ust.j, k}, nil) | ||||
| 	ust.uss.t.Logf("%s: %d, %d, %d got req=%p, idle=%v", ust.uss.clk.Now().Format(nsTimeFmt), ust.i, ust.j, k, req, idle) | ||||
| 	if req == nil { | ||||
| 		atomic.AddUint64(&ust.uss.failedCount, 1) | ||||
|  | @ -945,7 +945,7 @@ func TestContextCancel(t *testing.T) { | |||
| 		expectQNCount(fn, false, expectF) | ||||
| 		expectQNCount(fn, true, expectT) | ||||
| 	} | ||||
| 	req1, _ := qs.StartRequest(ctx1, &fcrequest.WorkEstimate{Seats: 1}, 1, "", "fs1", "test", "one", queueNoteFn(1)) | ||||
| 	req1, _ := qs.StartRequest(ctx1, &fcrequest.WorkEstimate{InitialSeats: 1}, 1, "", "fs1", "test", "one", queueNoteFn(1)) | ||||
| 	if req1 == nil { | ||||
| 		t.Error("Request rejected") | ||||
| 		return | ||||
|  | @ -968,7 +968,7 @@ func TestContextCancel(t *testing.T) { | |||
| 				counter.Add(1) | ||||
| 				cancel2() | ||||
| 			}() | ||||
| 			req2, idle2a := qs.StartRequest(ctx2, &fcrequest.WorkEstimate{Seats: 1}, 2, "", "fs2", "test", "two", queueNoteFn(2)) | ||||
| 			req2, idle2a := qs.StartRequest(ctx2, &fcrequest.WorkEstimate{InitialSeats: 1}, 2, "", "fs2", "test", "two", queueNoteFn(2)) | ||||
| 			if idle2a { | ||||
| 				t.Error("2nd StartRequest returned idle") | ||||
| 			} | ||||
|  | @ -1041,7 +1041,7 @@ func TestTotalRequestsExecutingWithPanic(t *testing.T) { | |||
| 	} | ||||
| 
 | ||||
| 	ctx := context.Background() | ||||
| 	req, _ := qs.StartRequest(ctx, &fcrequest.WorkEstimate{Seats: 1}, 1, "", "fs", "test", "one", func(inQueue bool) {}) | ||||
| 	req, _ := qs.StartRequest(ctx, &fcrequest.WorkEstimate{InitialSeats: 1}, 1, "", "fs", "test", "one", func(inQueue bool) {}) | ||||
| 	if req == nil { | ||||
| 		t.Fatal("expected a Request object from StartRequest, but got nil") | ||||
| 	} | ||||
|  | @ -1094,13 +1094,13 @@ func TestFindDispatchQueueLocked(t *testing.T) { | |||
| 				{ | ||||
| 					virtualStart: 200, | ||||
| 					requests: newFIFO( | ||||
| 						&request{workEstimate: fcrequest.WorkEstimate{Seats: 1}}, | ||||
| 						&request{workEstimate: fcrequest.WorkEstimate{InitialSeats: 1}}, | ||||
| 					), | ||||
| 				}, | ||||
| 				{ | ||||
| 					virtualStart: 100, | ||||
| 					requests: newFIFO( | ||||
| 						&request{workEstimate: fcrequest.WorkEstimate{Seats: 1}}, | ||||
| 						&request{workEstimate: fcrequest.WorkEstimate{InitialSeats: 1}}, | ||||
| 					), | ||||
| 				}, | ||||
| 			}, | ||||
|  | @ -1117,7 +1117,7 @@ func TestFindDispatchQueueLocked(t *testing.T) { | |||
| 				{ | ||||
| 					virtualStart: 200, | ||||
| 					requests: newFIFO( | ||||
| 						&request{workEstimate: fcrequest.WorkEstimate{Seats: 1}}, | ||||
| 						&request{workEstimate: fcrequest.WorkEstimate{InitialSeats: 1}}, | ||||
| 					), | ||||
| 				}, | ||||
| 			}, | ||||
|  | @ -1134,13 +1134,13 @@ func TestFindDispatchQueueLocked(t *testing.T) { | |||
| 				{ | ||||
| 					virtualStart: 200, | ||||
| 					requests: newFIFO( | ||||
| 						&request{workEstimate: fcrequest.WorkEstimate{Seats: 50}}, | ||||
| 						&request{workEstimate: fcrequest.WorkEstimate{InitialSeats: 50}}, | ||||
| 					), | ||||
| 				}, | ||||
| 				{ | ||||
| 					virtualStart: 100, | ||||
| 					requests: newFIFO( | ||||
| 						&request{workEstimate: fcrequest.WorkEstimate{Seats: 25}}, | ||||
| 						&request{workEstimate: fcrequest.WorkEstimate{InitialSeats: 25}}, | ||||
| 					), | ||||
| 				}, | ||||
| 			}, | ||||
|  | @ -1157,13 +1157,13 @@ func TestFindDispatchQueueLocked(t *testing.T) { | |||
| 				{ | ||||
| 					virtualStart: 200, | ||||
| 					requests: newFIFO( | ||||
| 						&request{workEstimate: fcrequest.WorkEstimate{Seats: 10}}, | ||||
| 						&request{workEstimate: fcrequest.WorkEstimate{InitialSeats: 10}}, | ||||
| 					), | ||||
| 				}, | ||||
| 				{ | ||||
| 					virtualStart: 100, | ||||
| 					requests: newFIFO( | ||||
| 						&request{workEstimate: fcrequest.WorkEstimate{Seats: 25}}, | ||||
| 						&request{workEstimate: fcrequest.WorkEstimate{InitialSeats: 25}}, | ||||
| 					), | ||||
| 				}, | ||||
| 			}, | ||||
|  | @ -1180,13 +1180,13 @@ func TestFindDispatchQueueLocked(t *testing.T) { | |||
| 				{ | ||||
| 					virtualStart: 200, | ||||
| 					requests: newFIFO( | ||||
| 						&request{workEstimate: fcrequest.WorkEstimate{Seats: 10}}, | ||||
| 						&request{workEstimate: fcrequest.WorkEstimate{InitialSeats: 10}}, | ||||
| 					), | ||||
| 				}, | ||||
| 				{ | ||||
| 					virtualStart: 100, | ||||
| 					requests: newFIFO( | ||||
| 						&request{workEstimate: fcrequest.WorkEstimate{Seats: 25}}, | ||||
| 						&request{workEstimate: fcrequest.WorkEstimate{InitialSeats: 25}}, | ||||
| 					), | ||||
| 				}, | ||||
| 			}, | ||||
|  | @ -1249,14 +1249,14 @@ func TestFinishRequestLocked(t *testing.T) { | |||
| 		{ | ||||
| 			name: "request has additional latency", | ||||
| 			workEstimate: fcrequest.WorkEstimate{ | ||||
| 				Seats:             10, | ||||
| 				InitialSeats:      10, | ||||
| 				AdditionalLatency: time.Minute, | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "request has no additional latency", | ||||
| 			workEstimate: fcrequest.WorkEstimate{ | ||||
| 				Seats: 10, | ||||
| 				InitialSeats: 10, | ||||
| 			}, | ||||
| 		}, | ||||
| 	} | ||||
|  | @ -1288,9 +1288,9 @@ func TestFinishRequestLocked(t *testing.T) { | |||
| 
 | ||||
| 			var ( | ||||
| 				queuesetTotalRequestsExecutingExpected = qs.totRequestsExecuting - 1 | ||||
| 				queuesetTotalSeatsInUseExpected        = qs.totSeatsInUse - int(test.workEstimate.Seats) | ||||
| 				queuesetTotalSeatsInUseExpected        = qs.totSeatsInUse - int(test.workEstimate.InitialSeats) | ||||
| 				queueRequestsExecutingExpected         = queue.requestsExecuting - 1 | ||||
| 				queueSeatsInUseExpected                = queue.seatsInUse - int(test.workEstimate.Seats) | ||||
| 				queueSeatsInUseExpected                = queue.seatsInUse - int(test.workEstimate.InitialSeats) | ||||
| 			) | ||||
| 
 | ||||
| 			qs.finishRequestLocked(r) | ||||
|  |  | |||
|  | @ -103,7 +103,7 @@ func TestLiterals(t *testing.T) { | |||
| 			Parts:             []string{"goodrscs", "eman"}, | ||||
| 		}, | ||||
| 		User:         ui, | ||||
| 		WorkEstimate: fcrequest.WorkEstimate{Seats: 1}, | ||||
| 		WorkEstimate: fcrequest.WorkEstimate{InitialSeats: 1}, | ||||
| 	} | ||||
| 	reqRU := RequestDigest{ | ||||
| 		RequestInfo: &request.RequestInfo{ | ||||
|  | @ -119,7 +119,7 @@ func TestLiterals(t *testing.T) { | |||
| 			Parts:             []string{"goodrscs", "eman"}, | ||||
| 		}, | ||||
| 		User:         ui, | ||||
| 		WorkEstimate: fcrequest.WorkEstimate{Seats: 1}, | ||||
| 		WorkEstimate: fcrequest.WorkEstimate{InitialSeats: 1}, | ||||
| 	} | ||||
| 	reqN := RequestDigest{ | ||||
| 		RequestInfo: &request.RequestInfo{ | ||||
|  | @ -128,7 +128,7 @@ func TestLiterals(t *testing.T) { | |||
| 			Verb:              "goodverb", | ||||
| 		}, | ||||
| 		User:         ui, | ||||
| 		WorkEstimate: fcrequest.WorkEstimate{Seats: 1}, | ||||
| 		WorkEstimate: fcrequest.WorkEstimate{InitialSeats: 1}, | ||||
| 	} | ||||
| 	checkRules(t, true, reqRN, []flowcontrol.PolicyRulesWithSubjects{{ | ||||
| 		Subjects: []flowcontrol.Subject{{Kind: flowcontrol.SubjectKindUser, | ||||
|  |  | |||
|  | @ -45,7 +45,7 @@ func (e *listWorkEstimator) estimate(r *http.Request) WorkEstimate { | |||
| 	if !ok { | ||||
| 		// no RequestInfo should never happen, but to be on the safe side
 | ||||
| 		// let's return maximumSeats
 | ||||
| 		return WorkEstimate{Seats: maximumSeats} | ||||
| 		return WorkEstimate{InitialSeats: maximumSeats} | ||||
| 	} | ||||
| 
 | ||||
| 	query := r.URL.Query() | ||||
|  | @ -55,7 +55,7 @@ func (e *listWorkEstimator) estimate(r *http.Request) WorkEstimate { | |||
| 
 | ||||
| 		// This request is destined to fail in the validation layer,
 | ||||
| 		// return maximumSeats for this request to be consistent.
 | ||||
| 		return WorkEstimate{Seats: maximumSeats} | ||||
| 		return WorkEstimate{InitialSeats: maximumSeats} | ||||
| 	} | ||||
| 	isListFromCache := !shouldListFromStorage(query, &listOptions) | ||||
| 
 | ||||
|  | @ -66,7 +66,7 @@ func (e *listWorkEstimator) estimate(r *http.Request) WorkEstimate { | |||
| 		// be conservative here and allocate maximum seats to this list request.
 | ||||
| 		// NOTE: if a CRD is removed, its count will go stale first and then the
 | ||||
| 		// pruner will eventually remove the CRD from the cache.
 | ||||
| 		return WorkEstimate{Seats: maximumSeats} | ||||
| 		return WorkEstimate{InitialSeats: maximumSeats} | ||||
| 	case err == ObjectCountNotFoundErr: | ||||
| 		// there are two scenarios in which we can see this error:
 | ||||
| 		//  a. the type is truly unknown, a typo on the caller's part.
 | ||||
|  | @ -75,11 +75,11 @@ func (e *listWorkEstimator) estimate(r *http.Request) WorkEstimate { | |||
| 		// we don't have a way to distinguish between a and b. b seems to indicate
 | ||||
| 		// to a more severe case of degradation, although b can naturally trigger
 | ||||
| 		// when a CRD is removed. let's be conservative and allocate maximum seats.
 | ||||
| 		return WorkEstimate{Seats: maximumSeats} | ||||
| 		return WorkEstimate{InitialSeats: maximumSeats} | ||||
| 	case err != nil: | ||||
| 		// we should never be here since Get returns either ObjectCountStaleErr or
 | ||||
| 		// ObjectCountNotFoundErr, return maximumSeats to be on the safe side.
 | ||||
| 		return WorkEstimate{Seats: maximumSeats} | ||||
| 		return WorkEstimate{InitialSeats: maximumSeats} | ||||
| 	} | ||||
| 
 | ||||
| 	limit := numStored | ||||
|  | @ -114,7 +114,7 @@ func (e *listWorkEstimator) estimate(r *http.Request) WorkEstimate { | |||
| 	if seats > maximumSeats { | ||||
| 		seats = maximumSeats | ||||
| 	} | ||||
| 	return WorkEstimate{Seats: seats} | ||||
| 	return WorkEstimate{InitialSeats: seats} | ||||
| } | ||||
| 
 | ||||
| func key(requestInfo *apirequest.RequestInfo) string { | ||||
|  |  | |||
|  | @ -34,8 +34,8 @@ const ( | |||
| ) | ||||
| 
 | ||||
| type WorkEstimate struct { | ||||
| 	// Seats represents the number of seats associated with this request
 | ||||
| 	Seats uint | ||||
| 	// InitialSeats represents the number of initial seats associated with this request
 | ||||
| 	InitialSeats uint | ||||
| 
 | ||||
| 	// AdditionalLatency specifies the additional duration the seats allocated
 | ||||
| 	// to this request must be reserved after the given request had finished.
 | ||||
|  | @ -77,7 +77,7 @@ func (e *workEstimator) estimate(r *http.Request) WorkEstimate { | |||
| 	if !ok { | ||||
| 		klog.ErrorS(fmt.Errorf("no RequestInfo found in context"), "Failed to estimate work for the request", "URI", r.RequestURI) | ||||
| 		// no RequestInfo should never happen, but to be on the safe side let's return maximumSeats
 | ||||
| 		return WorkEstimate{Seats: maximumSeats} | ||||
| 		return WorkEstimate{InitialSeats: maximumSeats} | ||||
| 	} | ||||
| 
 | ||||
| 	switch requestInfo.Verb { | ||||
|  | @ -85,5 +85,5 @@ func (e *workEstimator) estimate(r *http.Request) WorkEstimate { | |||
| 		return e.listWorkEstimator.EstimateWork(r) | ||||
| 	} | ||||
| 
 | ||||
| 	return WorkEstimate{Seats: minimumSeats} | ||||
| 	return WorkEstimate{InitialSeats: minimumSeats} | ||||
| } | ||||
|  |  | |||
|  | @ -26,18 +26,18 @@ import ( | |||
| 
 | ||||
| func TestWorkEstimator(t *testing.T) { | ||||
| 	tests := []struct { | ||||
| 		name          string | ||||
| 		requestURI    string | ||||
| 		requestInfo   *apirequest.RequestInfo | ||||
| 		counts        map[string]int64 | ||||
| 		countErr      error | ||||
| 		seatsExpected uint | ||||
| 		name                 string | ||||
| 		requestURI           string | ||||
| 		requestInfo          *apirequest.RequestInfo | ||||
| 		counts               map[string]int64 | ||||
| 		countErr             error | ||||
| 		initialSeatsExpected uint | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name:          "request has no RequestInfo", | ||||
| 			requestURI:    "http://server/apis/", | ||||
| 			requestInfo:   nil, | ||||
| 			seatsExpected: maximumSeats, | ||||
| 			name:                 "request has no RequestInfo", | ||||
| 			requestURI:           "http://server/apis/", | ||||
| 			requestInfo:          nil, | ||||
| 			initialSeatsExpected: maximumSeats, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "request verb is not list", | ||||
|  | @ -45,7 +45,7 @@ func TestWorkEstimator(t *testing.T) { | |||
| 			requestInfo: &apirequest.RequestInfo{ | ||||
| 				Verb: "get", | ||||
| 			}, | ||||
| 			seatsExpected: minimumSeats, | ||||
| 			initialSeatsExpected: minimumSeats, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "request verb is list, conversion to ListOptions returns error", | ||||
|  | @ -58,7 +58,7 @@ func TestWorkEstimator(t *testing.T) { | |||
| 			counts: map[string]int64{ | ||||
| 				"events.foo.bar": 799, | ||||
| 			}, | ||||
| 			seatsExpected: maximumSeats, | ||||
| 			initialSeatsExpected: maximumSeats, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "request verb is list, has limit and resource version is 1", | ||||
|  | @ -71,7 +71,7 @@ func TestWorkEstimator(t *testing.T) { | |||
| 			counts: map[string]int64{ | ||||
| 				"events.foo.bar": 699, | ||||
| 			}, | ||||
| 			seatsExpected: 8, | ||||
| 			initialSeatsExpected: 8, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "request verb is list, limit not set", | ||||
|  | @ -84,7 +84,7 @@ func TestWorkEstimator(t *testing.T) { | |||
| 			counts: map[string]int64{ | ||||
| 				"events.foo.bar": 699, | ||||
| 			}, | ||||
| 			seatsExpected: 7, | ||||
| 			initialSeatsExpected: 7, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "request verb is list, resource version not set", | ||||
|  | @ -97,7 +97,7 @@ func TestWorkEstimator(t *testing.T) { | |||
| 			counts: map[string]int64{ | ||||
| 				"events.foo.bar": 699, | ||||
| 			}, | ||||
| 			seatsExpected: 8, | ||||
| 			initialSeatsExpected: 8, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "request verb is list, no query parameters, count known", | ||||
|  | @ -110,7 +110,7 @@ func TestWorkEstimator(t *testing.T) { | |||
| 			counts: map[string]int64{ | ||||
| 				"events.foo.bar": 399, | ||||
| 			}, | ||||
| 			seatsExpected: 8, | ||||
| 			initialSeatsExpected: 8, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "request verb is list, no query parameters, count not known", | ||||
|  | @ -120,8 +120,8 @@ func TestWorkEstimator(t *testing.T) { | |||
| 				APIGroup: "foo.bar", | ||||
| 				Resource: "events", | ||||
| 			}, | ||||
| 			countErr:      ObjectCountNotFoundErr, | ||||
| 			seatsExpected: maximumSeats, | ||||
| 			countErr:             ObjectCountNotFoundErr, | ||||
| 			initialSeatsExpected: maximumSeats, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "request verb is list, continuation is set", | ||||
|  | @ -134,7 +134,7 @@ func TestWorkEstimator(t *testing.T) { | |||
| 			counts: map[string]int64{ | ||||
| 				"events.foo.bar": 699, | ||||
| 			}, | ||||
| 			seatsExpected: 8, | ||||
| 			initialSeatsExpected: 8, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "request verb is list, resource version is zero", | ||||
|  | @ -147,7 +147,7 @@ func TestWorkEstimator(t *testing.T) { | |||
| 			counts: map[string]int64{ | ||||
| 				"events.foo.bar": 399, | ||||
| 			}, | ||||
| 			seatsExpected: 4, | ||||
| 			initialSeatsExpected: 4, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "request verb is list, resource version is zero, no limit", | ||||
|  | @ -160,7 +160,7 @@ func TestWorkEstimator(t *testing.T) { | |||
| 			counts: map[string]int64{ | ||||
| 				"events.foo.bar": 799, | ||||
| 			}, | ||||
| 			seatsExpected: 8, | ||||
| 			initialSeatsExpected: 8, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "request verb is list, resource version match is Exact", | ||||
|  | @ -173,7 +173,7 @@ func TestWorkEstimator(t *testing.T) { | |||
| 			counts: map[string]int64{ | ||||
| 				"events.foo.bar": 699, | ||||
| 			}, | ||||
| 			seatsExpected: 8, | ||||
| 			initialSeatsExpected: 8, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "request verb is list, resource version match is NotOlderThan, limit not specified", | ||||
|  | @ -186,7 +186,7 @@ func TestWorkEstimator(t *testing.T) { | |||
| 			counts: map[string]int64{ | ||||
| 				"events.foo.bar": 799, | ||||
| 			}, | ||||
| 			seatsExpected: 8, | ||||
| 			initialSeatsExpected: 8, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "request verb is list, maximum is capped", | ||||
|  | @ -199,7 +199,7 @@ func TestWorkEstimator(t *testing.T) { | |||
| 			counts: map[string]int64{ | ||||
| 				"events.foo.bar": 1999, | ||||
| 			}, | ||||
| 			seatsExpected: maximumSeats, | ||||
| 			initialSeatsExpected: maximumSeats, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "request verb is list, list from cache, count not known", | ||||
|  | @ -209,8 +209,8 @@ func TestWorkEstimator(t *testing.T) { | |||
| 				APIGroup: "foo.bar", | ||||
| 				Resource: "events", | ||||
| 			}, | ||||
| 			countErr:      ObjectCountNotFoundErr, | ||||
| 			seatsExpected: maximumSeats, | ||||
| 			countErr:             ObjectCountNotFoundErr, | ||||
| 			initialSeatsExpected: maximumSeats, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "request verb is list, object count is stale", | ||||
|  | @ -223,8 +223,8 @@ func TestWorkEstimator(t *testing.T) { | |||
| 			counts: map[string]int64{ | ||||
| 				"events.foo.bar": 799, | ||||
| 			}, | ||||
| 			countErr:      ObjectCountStaleErr, | ||||
| 			seatsExpected: maximumSeats, | ||||
| 			countErr:             ObjectCountStaleErr, | ||||
| 			initialSeatsExpected: maximumSeats, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "request verb is list, object count is not found", | ||||
|  | @ -234,8 +234,8 @@ func TestWorkEstimator(t *testing.T) { | |||
| 				APIGroup: "foo.bar", | ||||
| 				Resource: "events", | ||||
| 			}, | ||||
| 			countErr:      ObjectCountNotFoundErr, | ||||
| 			seatsExpected: maximumSeats, | ||||
| 			countErr:             ObjectCountNotFoundErr, | ||||
| 			initialSeatsExpected: maximumSeats, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:       "request verb is list, count getter throws unknown error", | ||||
|  | @ -245,8 +245,8 @@ func TestWorkEstimator(t *testing.T) { | |||
| 				APIGroup: "foo.bar", | ||||
| 				Resource: "events", | ||||
| 			}, | ||||
| 			countErr:      errors.New("unknown error"), | ||||
| 			seatsExpected: maximumSeats, | ||||
| 			countErr:             errors.New("unknown error"), | ||||
| 			initialSeatsExpected: maximumSeats, | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
|  | @ -271,8 +271,8 @@ func TestWorkEstimator(t *testing.T) { | |||
| 			} | ||||
| 
 | ||||
| 			workestimateGot := estimator.EstimateWork(req) | ||||
| 			if test.seatsExpected != workestimateGot.Seats { | ||||
| 				t.Errorf("Expected work estimate to match: %d seats, but got: %d seats", test.seatsExpected, workestimateGot.Seats) | ||||
| 			if test.initialSeatsExpected != workestimateGot.InitialSeats { | ||||
| 				t.Errorf("Expected work estimate to match: %d seats, but got: %d seats", test.initialSeatsExpected, workestimateGot.InitialSeats) | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue