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

  1. Check OpenFGA container health/logs and restart it if it is crash-looping or overloaded
  2. Reduce write concurrency / batch tuple writes to stay under OpenFGA limits
  3. Verify network connectivity and OPENFGA_API_URL/creds between the service and OpenFGA
  4. 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

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.