Ensure handling for specialization failure in pool manager (#2788)
* Add fixes for failure in specialization * reduce specialization in progress and remove expired requests from queue when specialization is timed out * rename markSpecializationFailure and remove logger from the queue * refactor clean up code in api.go and add test case for queue Details: - Cleanup svc waiting for the counter in the pool manager if specialization fails - Cleanup active requests counter in pool manager if client exists the demand for function service while we have allocated function service - Consider specialization timeout if pod ready timeout > specialization timeout in waiting for ready pod. We also consider if the request to choosePod is cancelled. - We ensure if we have requests waiting for service requests but if there is no pod in the specialization we clean up those. --------- Signed-off-by: Sanket Sudake <sanketsudake@gmail.com> Co-authored-by: Pranoy Kundu <pranoy1998k@gmail.com>
This commit is contained in:
co-authored by
Pranoy Kundu
parent
31c81e132e
commit
6c431e4d9b
@@ -1,6 +1,7 @@
|
||||
package fscache
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
"testing"
|
||||
)
|
||||
@@ -113,3 +114,78 @@ func TestQueueLen(t *testing.T) {
|
||||
t.Errorf("Expected queue length to be 1, got %d", q.Len())
|
||||
}
|
||||
}
|
||||
|
||||
func TestExpiredWhenAllItemsExpired(t *testing.T) {
|
||||
q := NewQueue()
|
||||
if q.Expired() != 0 {
|
||||
t.Errorf("Expected Expired to return 0, got %d", q.Expired())
|
||||
}
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
item := &svcWait{
|
||||
svcChannel: make(chan *FuncSvc),
|
||||
ctx: ctx,
|
||||
}
|
||||
q.Push(item)
|
||||
if q.Len() != 1 {
|
||||
t.Errorf("Expected queue length to be 1, got %d", q.Len())
|
||||
}
|
||||
cancel()
|
||||
if q.Expired() != 1 {
|
||||
t.Errorf("Expected Expired to return 1, got %d", q.Expired())
|
||||
}
|
||||
if q.Len() != 0 {
|
||||
t.Errorf("Expected queue length to be 0, got %d", q.Len())
|
||||
}
|
||||
}
|
||||
|
||||
func TestExpiredWhenFewItemsExpired(t *testing.T) {
|
||||
q := NewQueue()
|
||||
if q.Expired() != 0 {
|
||||
t.Errorf("Expected Expired to return 0, got %d", q.Expired())
|
||||
}
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
|
||||
q.Push(&svcWait{
|
||||
svcChannel: make(chan *FuncSvc),
|
||||
ctx: ctx,
|
||||
})
|
||||
q.Push(&svcWait{
|
||||
svcChannel: make(chan *FuncSvc),
|
||||
ctx: context.Background(),
|
||||
})
|
||||
if q.Len() != 2 {
|
||||
t.Errorf("Expected queue length to be 1, got %d", q.Len())
|
||||
}
|
||||
cancel()
|
||||
if q.Expired() != 1 {
|
||||
t.Errorf("Expected Expired to return 1, got %d", q.Expired())
|
||||
}
|
||||
if q.Len() != 1 {
|
||||
t.Errorf("Expected queue length to be 0, got %d", q.Len())
|
||||
}
|
||||
}
|
||||
|
||||
func TestExpiredWhenNoItemsExpired(t *testing.T) {
|
||||
q := NewQueue()
|
||||
if q.Expired() != 0 {
|
||||
t.Errorf("Expected Expired to return 0, got %d", q.Expired())
|
||||
}
|
||||
|
||||
q.Push(&svcWait{
|
||||
svcChannel: make(chan *FuncSvc),
|
||||
ctx: context.Background(),
|
||||
})
|
||||
q.Push(&svcWait{
|
||||
svcChannel: make(chan *FuncSvc),
|
||||
ctx: context.Background(),
|
||||
})
|
||||
if q.Len() != 2 {
|
||||
t.Errorf("Expected queue length to be 1, got %d", q.Len())
|
||||
}
|
||||
if q.Expired() != 0 {
|
||||
t.Errorf("Expected Expired to return 1, got %d", q.Expired())
|
||||
}
|
||||
if q.Len() != 2 {
|
||||
t.Errorf("Expected queue length to be 0, got %d", q.Len())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user