SigNoz/signoz · error · errors.SignozError
CodeTooManyRequests
CodeTooManyRequests
Error message
openfgaError.Error()
What it means
Returned by the OpenFGA write path when the underlying OpenFGA client returns an error that unwraps to an InternalError; it is re-exposed as TooManyRequests because writes are commonly rejected under load/quota. The message is the OpenFGA error's own text (openfgaError.Error()).
Source
Thrown at pkg/authz/openfgaserver/server.go:277
}
}(),
Deletes: func() *openfgav1.WriteRequestDeletes {
if len(deletionTuplesWithoutCondition) == 0 {
return nil
}
return &openfgav1.WriteRequestDeletes{
TupleKeys: deletionTuplesWithoutCondition,
OnMissing: "ignore",
}
}(),
})
if err != nil {
openfgaError := new(openfgaerrors.InternalError)
ok := errors.As(err, openfgaError)
if ok {
server.settings.Logger().ErrorContext(ctx, writeErrorMessage, errors.Attr(openfgaError.Unwrap()))
return errors.New(errors.TypeTooManyRequests, errors.CodeTooManyRequests, openfgaError.Error())
}
server.settings.Logger().ErrorContext(ctx, writeErrorMessage, errors.Attr(err))
return err
}
return nil
}
func (server *Server) ReadTuples(ctx context.Context, tupleKey *openfgav1.ReadRequestTupleKey) ([]*openfgav1.TupleKey, error) {
storeID, _ := server.getStoreIDandModelID()
var tuples []*openfgav1.TupleKey
continuationToken := ""
for {
response, err := server.openfgaServer.Read(ctx, &openfgav1.ReadRequest{
StoreId: storeID,
TupleKey: tupleKey,View on GitHub (pinned to 5069bf80b0)
Solutions
- Check OpenFGA container health/logs and restart it if it is crash-looping or overloaded
- Reduce write concurrency / batch tuple writes to stay under OpenFGA limits
- Verify network connectivity and OPENFGA_API_URL/creds between the service and OpenFGA
- Retry with backoff — this error type is transient in nature
Defensive patterns
Strategy: retry
Try / catch
err := server.Write(ctx, req)
if err != nil {
if errors.Is(err, errors.CodeTooManyRequests) {
// exponential backoff + jitter, honor Retry-After if present
return retryWithBackoff(func() error { return server.Write(ctx, req) })
}
return err
} Prevention
- Wrap OpenFGA writes in bounded exponential backoff
- Batch tuple writes instead of per-event writes
- Monitor OpenFGA container CPU/memory to catch overload early
When it happens
Trigger: Calling Write (tuples write/delete/check) against OpenFGA when the server returns an internal error — often rate limiting, connection limits, or store overload surfaced as InternalError.
Common situations: OpenFGA container resource-starved or restarting; too many concurrent writes from telemetry pipeline; OpenFGA version where rate limits map to InternalError; network issues between query-service and OpenFGA.
Related errors
AI-assisted analysis of SigNoz/signoz@5069bf80b0 (2026-08-28).
Data as JSON: /api/errors/4dca4f89e66f6cf7.
Report an issue: GitHub.