[#1700] engine: Print stacks on test request limiter
Some checks failed
Vulncheck / Vulncheck (push) Successful in 1m0s
Pre-commit hooks / Pre-commit (push) Successful in 1m24s
Build / Build Components (push) Successful in 2m4s
OCI image / Build container images (push) Has been cancelled
Tests and linters / Run gofumpt (push) Successful in 3m37s
Tests and linters / Tests with -race (push) Successful in 4m9s
Tests and linters / gopls check (push) Successful in 4m15s
Tests and linters / Tests (push) Successful in 4m46s
Tests and linters / Staticcheck (push) Successful in 4m49s
Tests and linters / Lint (push) Successful in 5m30s

Change-Id: I4952769ca431d1049955823b41b99b0984b385fc
Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
Dmitrii Stepanov 2025-04-01 10:55:33 +03:00
parent 6e1576cfdb
commit bc6cc9ae2a
Signed by: dstepanov-yadro
GPG key ID: 237AF1A763293BC0

View file

@ -2,8 +2,11 @@ package engine
import (
"context"
"fmt"
"path/filepath"
"sync/atomic"
"runtime/debug"
"strings"
"sync"
"testing"
"git.frostfs.info/TrueCloudLab/frostfs-node/internal/qos"
@ -157,26 +160,74 @@ func newTestStorages(root string, smallSize uint64) ([]blobstor.SubStorage, *tes
var _ qos.Limiter = (*testQoSLimiter)(nil)
type testQoSLimiter struct {
t testing.TB
read atomic.Int64
write atomic.Int64
t testing.TB
quard sync.Mutex
id int64
readStacks map[int64][]byte
writeStacks map[int64][]byte
}
func (t *testQoSLimiter) SetMetrics(qos.Metrics) {}
func (t *testQoSLimiter) Close() {
require.Equal(t.t, int64(0), t.read.Load(), "read requests count after limiter close must be 0")
require.Equal(t.t, int64(0), t.write.Load(), "write requests count after limiter close must be 0")
t.quard.Lock()
defer t.quard.Unlock()
var sb strings.Builder
var seqN int
for _, stack := range t.readStacks {
seqN++
sb.WriteString(fmt.Sprintf("%d\n read request stack after limiter close: %s\n", seqN, string(stack)))
}
for _, stack := range t.writeStacks {
seqN++
sb.WriteString(fmt.Sprintf("%d\n write request stack after limiter close: %s\n", seqN, string(stack)))
}
require.True(t.t, seqN == 0, sb.String())
}
func (t *testQoSLimiter) ReadRequest(context.Context) (qos.ReleaseFunc, error) {
t.read.Add(1)
return func() { t.read.Add(-1) }, nil
t.quard.Lock()
defer t.quard.Unlock()
stack := debug.Stack()
t.id++
id := t.id
if t.readStacks == nil {
t.readStacks = make(map[int64][]byte)
}
t.readStacks[id] = stack
return func() {
t.quard.Lock()
defer t.quard.Unlock()
delete(t.readStacks, id)
}, nil
}
func (t *testQoSLimiter) WriteRequest(context.Context) (qos.ReleaseFunc, error) {
t.write.Add(1)
return func() { t.write.Add(-1) }, nil
t.quard.Lock()
defer t.quard.Unlock()
stack := debug.Stack()
t.id++
id := t.id
if t.writeStacks == nil {
t.writeStacks = make(map[int64][]byte)
}
t.writeStacks[id] = stack
return func() {
t.quard.Lock()
defer t.quard.Unlock()
delete(t.writeStacks, id)
}, nil
}
func (t *testQoSLimiter) SetParentID(string) {}