Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'internal/limiter/concurrency_limiter_test.go')
-rw-r--r--internal/limiter/concurrency_limiter_test.go70
1 files changed, 35 insertions, 35 deletions
diff --git a/internal/limiter/concurrency_limiter_test.go b/internal/limiter/concurrency_limiter_test.go
index 67ca38e1e..6ba48d243 100644
--- a/internal/limiter/concurrency_limiter_test.go
+++ b/internal/limiter/concurrency_limiter_test.go
@@ -241,14 +241,14 @@ func TestLimiter_dynamic(t *testing.T) {
limiter := NewConcurrencyLimiter(ctx, limit, 10, nil, gauge)
// 5 requests acquired the tokens, the limiter is full now
- release1, waitAfterRelease1 := spawnAndWaitAcquired(ctx, t, "1", limiter, gauge, 5)
+ release1, waitAfterRelease1 := spawnAndWaitAcquired(t, ctx, "1", limiter, gauge, 5)
require.Equal(t, 5, gauge.enter)
// Update the limit to 7
limit.Update(7)
// 2 more requests acquired the token. This proves the limit is expanded
- release2, waitAfterRelease2 := spawnAndWaitAcquired(ctx, t, "1", limiter, gauge, 2)
+ release2, waitAfterRelease2 := spawnAndWaitAcquired(t, ctx, "1", limiter, gauge, 2)
require.Equal(t, 7, gauge.enter)
close(release1)
@@ -265,7 +265,7 @@ func TestLimiter_dynamic(t *testing.T) {
limiter := NewConcurrencyLimiter(ctx, limit, 10, nil, gauge)
// 3 requests acquired the tokens, 2 slots left
- release1, waitAfterRelease1 := spawnAndWaitAcquired(ctx, t, "1", limiter, gauge, 3)
+ release1, waitAfterRelease1 := spawnAndWaitAcquired(t, ctx, "1", limiter, gauge, 3)
require.Equal(t, 3, gauge.enter)
require.Equal(t, 3, gauge.queued)
@@ -273,7 +273,7 @@ func TestLimiter_dynamic(t *testing.T) {
limit.Update(3)
// 2 requests are put in queue, meaning the limit shrinks down
- waitAcquired2, release2, waitAfterRelease2 := spawnAndWaitQueued(ctx, t, "1", limiter, gauge, 2)
+ waitAcquired2, release2, waitAfterRelease2 := spawnAndWaitQueued(t, ctx, "1", limiter, gauge, 2)
require.Equal(t, 3, gauge.enter)
require.Equal(t, 5, gauge.queued)
@@ -300,11 +300,11 @@ func TestLimiter_dynamic(t *testing.T) {
limiter := NewConcurrencyLimiter(ctx, limit, 10, nil, gauge)
// 5 requests acquired the tokens, the limiter is full now
- release1, waitAfterRelease1 := spawnAndWaitAcquired(ctx, t, "1", limiter, gauge, 5)
+ release1, waitAfterRelease1 := spawnAndWaitAcquired(t, ctx, "1", limiter, gauge, 5)
require.Equal(t, 5, gauge.enter)
// 2 requests waiting in the queue
- waitAcquired2, release2, waitAfterRelease2 := spawnAndWaitQueued(ctx, t, "1", limiter, gauge, 2)
+ waitAcquired2, release2, waitAfterRelease2 := spawnAndWaitQueued(t, ctx, "1", limiter, gauge, 2)
require.Equal(t, 5, gauge.enter)
require.Equal(t, 7, gauge.queued)
@@ -329,16 +329,16 @@ func TestLimiter_dynamic(t *testing.T) {
limiter := NewConcurrencyLimiter(ctx, limit, 10, nil, gauge)
// 5 requests acquired the tokens, the limiter is full now
- release1, waitAfterRelease1 := spawnAndWaitAcquired(ctx, t, "1", limiter, gauge, 5)
+ release1, waitAfterRelease1 := spawnAndWaitAcquired(t, ctx, "1", limiter, gauge, 5)
require.Equal(t, 5, gauge.enter)
// 2 requests waiting in the queue
- waitAcquired2, release2, waitAfterRelease2 := spawnAndWaitQueued(ctx, t, "1", limiter, gauge, 2)
+ waitAcquired2, release2, waitAfterRelease2 := spawnAndWaitQueued(t, ctx, "1", limiter, gauge, 2)
require.Equal(t, 5, gauge.enter)
require.Equal(t, 7, gauge.queued)
// 5 more requests waiting in the queue
- waitAcquired3, release3, waitAfterRelease3 := spawnAndWaitQueued(ctx, t, "1", limiter, gauge, 5)
+ waitAcquired3, release3, waitAfterRelease3 := spawnAndWaitQueued(t, ctx, "1", limiter, gauge, 5)
require.Equal(t, 5, gauge.enter)
require.Equal(t, 12, gauge.queued)
@@ -369,14 +369,14 @@ func TestLimiter_dynamic(t *testing.T) {
limiter := NewConcurrencyLimiter(ctx, limit, 10, nil, gauge)
// 5 requests acquired the tokens, the limiter is full now
- release1, waitAfterRelease1 := spawnAndWaitAcquired(ctx, t, "1", limiter, gauge, 5)
+ release1, waitAfterRelease1 := spawnAndWaitAcquired(t, ctx, "1", limiter, gauge, 5)
require.Equal(t, 5, gauge.enter)
// Update the limit to 3
limit.Update(3)
// 3 requests are put in queue
- waitAcquired2, release2, waitAfterRelease2 := spawnAndWaitQueued(ctx, t, "1", limiter, gauge, 3)
+ waitAcquired2, release2, waitAfterRelease2 := spawnAndWaitQueued(t, ctx, "1", limiter, gauge, 3)
require.Equal(t, 5, gauge.enter)
require.Equal(t, 8, gauge.queued)
@@ -390,7 +390,7 @@ func TestLimiter_dynamic(t *testing.T) {
require.Equal(t, 8, gauge.enter)
// 1 more request is put in queue, meaning the limit shrinks down to 3.
- waitAcquired3, release3, waitAfterRelease3 := spawnAndWaitQueued(ctx, t, "1", limiter, gauge, 1)
+ waitAcquired3, release3, waitAfterRelease3 := spawnAndWaitQueued(t, ctx, "1", limiter, gauge, 1)
require.Equal(t, 8, gauge.enter)
require.Equal(t, 9, gauge.queued)
@@ -419,14 +419,14 @@ func TestLimiter_dynamic(t *testing.T) {
limit.Update(7)
// 5 requests acquired the tokens
- release1, waitAfterRelease1 := spawnAndWaitAcquired(ctx, t, "1", limiter, gauge, 5)
+ release1, waitAfterRelease1 := spawnAndWaitAcquired(t, ctx, "1", limiter, gauge, 5)
require.Equal(t, 5, gauge.enter)
// Update the limit to 3
limit.Update(3)
// 3 requests are put in queue
- waitAcquired2, release2, waitAfterRelease2 := spawnAndWaitQueued(ctx, t, "1", limiter, gauge, 3)
+ waitAcquired2, release2, waitAfterRelease2 := spawnAndWaitQueued(t, ctx, "1", limiter, gauge, 3)
require.Equal(t, 5, gauge.enter)
require.Equal(t, 8, gauge.queued)
@@ -438,7 +438,7 @@ func TestLimiter_dynamic(t *testing.T) {
require.Equal(t, 8, gauge.enter)
// 2 more requests
- release3, waitAfterRelease3 := spawnAndWaitAcquired(ctx, t, "1", limiter, gauge, 2)
+ release3, waitAfterRelease3 := spawnAndWaitAcquired(t, ctx, "1", limiter, gauge, 2)
require.Equal(t, 10, gauge.enter)
// Update the limit to 1
@@ -466,17 +466,17 @@ func TestLimiter_dynamic(t *testing.T) {
limiter := NewConcurrencyLimiter(ctx, limit, 5, nil, gauge)
// 1 requests acquired the tokens, the limiter is full now
- release1, waitAfterRelease1 := spawnAndWaitAcquired(ctx, t, "1", limiter, gauge, 1)
+ release1, waitAfterRelease1 := spawnAndWaitAcquired(t, ctx, "1", limiter, gauge, 1)
require.Equal(t, 1, gauge.enter)
require.Equal(t, 1, gauge.queued)
// 5 requests queuing for the tokens, the queue is full now
- waitAcquired2, release2, waitAfterRelease2 := spawnAndWaitQueued(ctx, t, "1", limiter, gauge, 5)
+ waitAcquired2, release2, waitAfterRelease2 := spawnAndWaitQueued(t, ctx, "1", limiter, gauge, 5)
require.Equal(t, 1, gauge.enter)
require.Equal(t, 6, gauge.queued)
// Limiter rejects new request
- maximumQueueSizeReached(ctx, t, "1", limiter)
+ maximumQueueSizeReached(t, ctx, "1", limiter)
// Update the limit
limit.Update(6)
@@ -484,12 +484,12 @@ func TestLimiter_dynamic(t *testing.T) {
require.Equal(t, 6, gauge.enter)
// 5 requests queuing for the tokens, the queue is full now
- waitAcquired3, release3, waitAfterRelease3 := spawnAndWaitQueued(ctx, t, "1", limiter, gauge, 5)
+ waitAcquired3, release3, waitAfterRelease3 := spawnAndWaitQueued(t, ctx, "1", limiter, gauge, 5)
require.Equal(t, 6, gauge.enter)
require.Equal(t, 11, gauge.queued)
// Limiter rejects new request
- maximumQueueSizeReached(ctx, t, "1", limiter)
+ maximumQueueSizeReached(t, ctx, "1", limiter)
// Clean up
close(release1)
@@ -512,23 +512,23 @@ func TestLimiter_dynamic(t *testing.T) {
limiter := NewConcurrencyLimiter(ctx, limit, 3, nil, gauge)
// 5 requests acquired the tokens, the limiter is full now
- release1, waitAfterRelease1 := spawnAndWaitAcquired(ctx, t, "1", limiter, gauge, 5)
+ release1, waitAfterRelease1 := spawnAndWaitAcquired(t, ctx, "1", limiter, gauge, 5)
require.Equal(t, 5, gauge.enter)
require.Equal(t, 5, gauge.queued)
// 5 requests queuing for the tokens, the queue is full now
- waitAcquired2, release2, waitAfterRelease2 := spawnAndWaitQueued(ctx, t, "1", limiter, gauge, 3)
+ waitAcquired2, release2, waitAfterRelease2 := spawnAndWaitQueued(t, ctx, "1", limiter, gauge, 3)
require.Equal(t, 5, gauge.enter)
require.Equal(t, 8, gauge.queued)
// Limiter rejects new request
- maximumQueueSizeReached(ctx, t, "1", limiter)
+ maximumQueueSizeReached(t, ctx, "1", limiter)
// Update the limit.
limit.Update(3)
// The queue is still full
- maximumQueueSizeReached(ctx, t, "1", limiter)
+ maximumQueueSizeReached(t, ctx, "1", limiter)
// Release first 5 requests and let the last 3 requests in
close(release1)
@@ -538,10 +538,10 @@ func TestLimiter_dynamic(t *testing.T) {
require.Equal(t, 8, gauge.enter)
// Another 5 requests in queue. The queue is still full, meaning the concurrency is 3 and the queue is still 5.
- waitAcquired3, release3, waitAfterRelease3 := spawnAndWaitQueued(ctx, t, "1", limiter, gauge, 3)
+ waitAcquired3, release3, waitAfterRelease3 := spawnAndWaitQueued(t, ctx, "1", limiter, gauge, 3)
require.Equal(t, 8, gauge.enter)
require.Equal(t, 11, gauge.queued)
- maximumQueueSizeReached(ctx, t, "1", limiter)
+ maximumQueueSizeReached(t, ctx, "1", limiter)
// Clean up
close(release2)
@@ -562,12 +562,12 @@ func TestLimiter_dynamic(t *testing.T) {
limiter := NewConcurrencyLimiter(ctx, limit, 0, nil, gauge)
// 5 requests acquired the tokens, the limiter is full now
- release1, waitAfterRelease1 := spawnAndWaitAcquired(ctx, t, "1", limiter, gauge, 5)
+ release1, waitAfterRelease1 := spawnAndWaitAcquired(t, ctx, "1", limiter, gauge, 5)
require.Equal(t, 5, gauge.enter)
require.Equal(t, 5, gauge.queued)
// 5 more requests
- waitAcquired2, release2, waitAfterRelease2 := spawnAndWaitQueued(ctx, t, "1", limiter, gauge, 5)
+ waitAcquired2, release2, waitAfterRelease2 := spawnAndWaitQueued(t, ctx, "1", limiter, gauge, 5)
// Update the limit.
limit.Update(10)
@@ -593,7 +593,7 @@ func TestLimiter_dynamic(t *testing.T) {
limiter := NewConcurrencyLimiter(ctx, limit, 0, func() helper.Ticker { return ticker }, gauge)
// 5 requests acquired the tokens, the limiter is full now
- release1, waitAfterRelease1 := spawnAndWaitAcquired(ctx, t, "1", limiter, gauge, 5)
+ release1, waitAfterRelease1 := spawnAndWaitAcquired(t, ctx, "1", limiter, gauge, 5)
require.Equal(t, 5, gauge.enter)
require.Equal(t, 5, gauge.queued)
@@ -629,7 +629,7 @@ func TestLimiter_dynamic(t *testing.T) {
limiter := NewConcurrencyLimiter(ctx, limit, 0, nil, gauge)
// 5 requests acquired the tokens, the limiter is full now
- release1, waitAfterRelease1 := spawnAndWaitAcquired(ctx, t, "1", limiter, gauge, 5)
+ release1, waitAfterRelease1 := spawnAndWaitAcquired(t, ctx, "1", limiter, gauge, 5)
require.Equal(t, 5, gauge.enter)
require.Equal(t, 5, gauge.queued)
@@ -667,7 +667,7 @@ func TestLimiter_dynamic(t *testing.T) {
// 5 * 5 requests acquired tokens
for i := 1; i <= 5; i++ {
- release, waitAfterRelease := spawnAndWaitAcquired(ctx, t, fmt.Sprintf("%d", i), limiter, gauge, 5)
+ release, waitAfterRelease := spawnAndWaitAcquired(t, ctx, fmt.Sprintf("%d", i), limiter, gauge, 5)
releaseChans = append(releaseChans, release)
waitReleaseFuncs = append(waitReleaseFuncs, waitAfterRelease)
}
@@ -675,7 +675,7 @@ func TestLimiter_dynamic(t *testing.T) {
// 1 + 2 + 3 + 4 + 5 requests are in queue
for i := 1; i <= 5; i++ {
- waitAcquired, release, waitAfterRelease := spawnAndWaitQueued(ctx, t, fmt.Sprintf("%d", i), limiter, gauge, i)
+ waitAcquired, release, waitAfterRelease := spawnAndWaitQueued(t, ctx, fmt.Sprintf("%d", i), limiter, gauge, i)
waitAcquireFuncs = append(waitAcquireFuncs, waitAcquired)
releaseChans = append(releaseChans, release)
waitReleaseFuncs = append(waitReleaseFuncs, waitAfterRelease)
@@ -706,7 +706,7 @@ func TestLimiter_dynamic(t *testing.T) {
// spawnAndWaitAcquired spawns N goroutines that wait for the limiter. They wait until all of them acquire the limiter
// token before exiting. This function returns a channel to control token release and a function to wait until all
// goroutines finish.
-func spawnAndWaitAcquired(ctx context.Context, t *testing.T, bucket string, limiter *ConcurrencyLimiter, gauge *blockingQueueCounter, n int) (chan struct{}, func()) {
+func spawnAndWaitAcquired(t *testing.T, ctx context.Context, bucket string, limiter *ConcurrencyLimiter, gauge *blockingQueueCounter, n int) (chan struct{}, func()) {
var acquireWg, releaseWg sync.WaitGroup
release := make(chan struct{})
@@ -735,7 +735,7 @@ func spawnAndWaitAcquired(ctx context.Context, t *testing.T, bucket string, limi
// spawnAndWaitQueued spawns N goroutines that wait for the limiter. They wait until all of them are queued. This
// function returns a function to wait for channel to acquired the token, a channel to control token release, and a
// function to wait until all goroutines finish.
-func spawnAndWaitQueued(ctx context.Context, t *testing.T, bucket string, limiter *ConcurrencyLimiter, gauge *blockingQueueCounter, n int) (func(), chan struct{}, func()) {
+func spawnAndWaitQueued(t *testing.T, ctx context.Context, bucket string, limiter *ConcurrencyLimiter, gauge *blockingQueueCounter, n int) (func(), chan struct{}, func()) {
var acquireWg, releaseWg sync.WaitGroup
release := make(chan struct{})
@@ -775,7 +775,7 @@ func spawnQueuedAndCollectErrors(ctx context.Context, bucket string, limiter *Co
}
}
-func maximumQueueSizeReached(ctx context.Context, t *testing.T, bucket string, limiter *ConcurrencyLimiter) {
+func maximumQueueSizeReached(t *testing.T, ctx context.Context, bucket string, limiter *ConcurrencyLimiter) {
_, err := limiter.Limit(ctx, bucket, func() (interface{}, error) {
return nil, fmt.Errorf("should not call")
})