sem := make(chan struct{}, 1000)
for {
n, addr, err := pc.ReadFrom(b[:])
+ ctx, span := tracer.Start(ctx, "handle udp packet")
if err != nil {
+ span.SetStatus(codes.Error, err.Error())
+ span.End()
return err
}
select {
case <-ctx.Done():
+ span.SetStatus(codes.Error, err.Error())
+ span.End()
return ctx.Err()
default:
- log.Printf("dropping request from %v: concurrency limit reached", addr)
+ span.SetStatus(codes.Error, "concurrency limit reached")
+ span.End()
+ log.Levelf(log.Debug, "dropping request from %v: concurrency limit reached", addr)
continue
case sem <- struct{}{}:
}
b := append([]byte(nil), b[:n]...)
go func() {
+ defer span.End()
defer func() { <-sem }()
err := s.HandleRequest(ctx, family, addr, b)
if err != nil {