Skip to content

Commit c705f75

Browse files
committed
switched active-request-scorer's request-timeout param to duration
Signed-off-by: Maroon Ayoub <maroon.ayoub@ibm.com>
1 parent f26d3bc commit c705f75

File tree

2 files changed

+25
-26
lines changed

2 files changed

+25
-26
lines changed

pkg/plugins/scorer/active_request.go

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@ const (
2121
// ActiveRequestScorerType is the type of the ActiveRequestScorer
2222
ActiveRequestScorerType = "active-request-scorer"
2323

24-
// defaultRequestTimeout defines the default timeout for requests in seconds
25-
defaultRequestTimeout = 300
24+
// defaultRequestTimeout defines the default timeout for open requests to be
25+
// considered stale and removed from the cache.
26+
defaultRequestTimeout = 2 * time.Minute
2627
)
2728

2829
// ActiveRequestScorerParameters defines the parameters for the
@@ -31,7 +32,8 @@ type ActiveRequestScorerParameters struct {
3132
// RequestTimeout defines the timeout for requests in seconds.
3233
// Once the request is "in-flight" for this duration, it is considered to
3334
// be timed out and dropped.
34-
RequestTimeout int `json:"requestTimeout"`
35+
// This field accepts duration strings like "30s", "1m", "2h".
36+
RequestTimeout string `json:"requestTimeout"`
3537
}
3638

3739
// requestEntry represents a single request in the cache
@@ -50,7 +52,7 @@ var _ framework.Scorer = &ActiveRequestScorer{}
5052

5153
// ActiveRequestScorerFactory defines the factory function for the ActiveRequestScorer.
5254
func ActiveRequestScorerFactory(name string, rawParameters json.RawMessage, handle plugins.Handle) (plugins.Plugin, error) {
53-
parameters := ActiveRequestScorerParameters{RequestTimeout: defaultRequestTimeout}
55+
parameters := ActiveRequestScorerParameters{}
5456
if rawParameters != nil {
5557
if err := json.Unmarshal(rawParameters, &parameters); err != nil {
5658
return nil, fmt.Errorf("failed to parse the parameters of the '%s' scorer - %w", ActiveRequestScorerType, err)
@@ -63,15 +65,21 @@ func ActiveRequestScorerFactory(name string, rawParameters json.RawMessage, hand
6365
// NewActiveRequestScorer creates a new ActiveRequestScorer scorer.
6466
func NewActiveRequestScorer(ctx context.Context, params *ActiveRequestScorerParameters) *ActiveRequestScorer {
6567
requestTimeout := defaultRequestTimeout
68+
logger := log.FromContext(ctx)
6669

67-
if params != nil && params.RequestTimeout > 0 {
68-
requestTimeout = params.RequestTimeout
69-
log.FromContext(ctx).V(logutil.DEFAULT).Info("Request timeout should be positive, using default request timeout")
70+
if params != nil && params.RequestTimeout != "" {
71+
paramsRequestTimeout, err := time.ParseDuration(params.RequestTimeout)
72+
if err != nil || paramsRequestTimeout <= 0 {
73+
logger.Error(err, "Invalid request timeout duration, using default request timeout")
74+
} else {
75+
requestTimeout = paramsRequestTimeout
76+
logger.Info("Using request timeout", "requestTimeout", requestTimeout)
77+
}
7078
}
7179

7280
// cache for individual requests with their own TTL
7381
requestCache := ttlcache.New[string, *requestEntry](
74-
ttlcache.WithTTL[string, *requestEntry](time.Duration(requestTimeout)*time.Second),
82+
ttlcache.WithTTL[string, *requestEntry](requestTimeout),
7583
ttlcache.WithDisableTouchOnHit[string, *requestEntry](),
7684
)
7785

@@ -223,8 +231,8 @@ func (s *ActiveRequestScorer) decrementPodCount(podName string) {
223231
}
224232
}
225233

226-
func cleanCachePeriodically(ctx context.Context, cache *ttlcache.Cache[string, *requestEntry], requestTimeout int) {
227-
ticker := time.NewTicker(time.Duration(requestTimeout) * time.Second)
234+
func cleanCachePeriodically(ctx context.Context, cache *ttlcache.Cache[string, *requestEntry], requestTimeout time.Duration) {
235+
ticker := time.NewTicker(requestTimeout)
228236
defer ticker.Stop()
229237

230238
for {

pkg/plugins/scorer/active_request_test.go

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -87,16 +87,11 @@ func TestActiveRequestScorer_Score(t *testing.T) {
8787

8888
for _, test := range tests {
8989
t.Run(test.name, func(t *testing.T) {
90-
params := &ActiveRequestScorerParameters{RequestTimeout: 300}
91-
scorer := NewActiveRequestScorer(context.Background(), params)
90+
scorer := NewActiveRequestScorer(context.Background(), nil)
9291
test.setupCache(scorer)
9392

9493
got := scorer.Score(context.Background(), nil, nil, test.input)
9594

96-
// Debug output
97-
t.Logf("Got scores: %+v", got)
98-
t.Logf("Want scores: %+v", test.wantScores)
99-
10095
if diff := cmp.Diff(test.wantScores, got); diff != "" {
10196
t.Errorf("Unexpected output (-want +got): %v", diff)
10297
}
@@ -107,8 +102,7 @@ func TestActiveRequestScorer_Score(t *testing.T) {
107102
func TestActiveRequestScorer_PreRequest(t *testing.T) {
108103
ctx := context.Background()
109104

110-
params := &ActiveRequestScorerParameters{RequestTimeout: 300}
111-
scorer := NewActiveRequestScorer(ctx, params)
105+
scorer := NewActiveRequestScorer(ctx, nil)
112106

113107
podA := &types.PodMetrics{
114108
Pod: &backend.Pod{NamespacedName: k8stypes.NamespacedName{Name: "pod-a", Namespace: "default"}},
@@ -177,8 +171,7 @@ func TestActiveRequestScorer_PreRequest(t *testing.T) {
177171
func TestActiveRequestScorer_PostResponse(t *testing.T) {
178172
ctx := context.Background()
179173

180-
params := &ActiveRequestScorerParameters{RequestTimeout: 300}
181-
scorer := NewActiveRequestScorer(ctx, params)
174+
scorer := NewActiveRequestScorer(ctx, nil)
182175

183176
request := &types.LLMRequest{
184177
RequestId: "test-request-1",
@@ -235,7 +228,7 @@ func TestActiveRequestScorer_TTLExpiration(t *testing.T) {
235228
ctx := context.Background()
236229

237230
// Use very short timeout for test
238-
params := &ActiveRequestScorerParameters{RequestTimeout: 1}
231+
params := &ActiveRequestScorerParameters{RequestTimeout: "1s"}
239232
scorer := NewActiveRequestScorer(ctx, params) // 1 second timeout
240233

241234
request := &types.LLMRequest{
@@ -281,7 +274,7 @@ func TestActiveRequestScorer_TTLExpiration(t *testing.T) {
281274
}
282275

283276
func TestNewActiveRequestScorer_InvalidTimeout(t *testing.T) {
284-
params := &ActiveRequestScorerParameters{RequestTimeout: -1}
277+
params := &ActiveRequestScorerParameters{RequestTimeout: "invalid"}
285278
scorer := NewActiveRequestScorer(context.Background(), params)
286279

287280
// Should use default timeout when invalid value is provided
@@ -291,8 +284,7 @@ func TestNewActiveRequestScorer_InvalidTimeout(t *testing.T) {
291284
}
292285

293286
func TestActiveRequestScorer_TypedName(t *testing.T) {
294-
params := &ActiveRequestScorerParameters{RequestTimeout: 300}
295-
scorer := NewActiveRequestScorer(context.Background(), params)
287+
scorer := NewActiveRequestScorer(context.Background(), nil)
296288

297289
typedName := scorer.TypedName()
298290
if typedName.Type != ActiveRequestScorerType {
@@ -301,8 +293,7 @@ func TestActiveRequestScorer_TypedName(t *testing.T) {
301293
}
302294

303295
func TestActiveRequestScorer_WithName(t *testing.T) {
304-
params := &ActiveRequestScorerParameters{RequestTimeout: 300}
305-
scorer := NewActiveRequestScorer(context.Background(), params)
296+
scorer := NewActiveRequestScorer(context.Background(), nil)
306297
testName := "test-scorer"
307298

308299
scorer = scorer.WithName(testName)

0 commit comments

Comments
 (0)