| 1234567891011121314151617181920212223242526272829303132333435363738 |
- package handler
- import (
- "context"
- "errors"
- "fmt"
- "net/http"
- )
- const statusClientClosedRequest = 499
- const (
- gatewayQueueFullCode = "gateway_queue_full"
- gatewayConcurrencyLimitCode = "gateway_concurrency_limit"
- )
- func concurrencyErrorResponse(err error, slotType string) (int, string, string, string) {
- var waitQueueFullErr *WaitQueueFullError
- if errors.As(err, &waitQueueFullErr) {
- return http.StatusTooManyRequests, "rate_limit_error", gatewayQueueFullCode,
- "Too many pending requests, please retry later"
- }
- var concurrencyErr *ConcurrencyError
- if errors.As(err, &concurrencyErr) {
- if concurrencyErr.SlotType != "" {
- slotType = concurrencyErr.SlotType
- }
- return http.StatusTooManyRequests, "rate_limit_error", gatewayConcurrencyLimitCode,
- fmt.Sprintf("Concurrency limit exceeded for %s, please retry later", slotType)
- }
- if errors.Is(err, context.Canceled) {
- return statusClientClosedRequest, "api_error", "", "context canceled"
- }
- return http.StatusServiceUnavailable, "api_error", "", "Service temporarily unavailable, please retry later"
- }
|