ent/ent · error

gremlin/http: context length exceeds limit

Error message

gremlin/http: context length exceeds limit

What it means

The HTTP transport caps response size at MaxResponseSize. If the server's Content-Length header exceeds that limit, the transport refuses to read the body and returns this error, protecting the client from unbounded memory usage.

Source

Thrown at dialect/gremlin/http.go:75

	{
		req, err := http.NewRequest(http.MethodPost, t.url, pr)
		if err != nil {
			return nil, fmt.Errorf("gremlin/http: creating http request: %w", err)
		}
		req.Header.Set("Content-Type", "application/json")

		rsp, err := t.client.Do(req.WithContext(ctx))
		if err != nil {
			return nil, fmt.Errorf("gremlin/http: posting http request: %w", err)
		}
		defer rsp.Body.Close()

		if rsp.StatusCode < http.StatusOK || rsp.StatusCode > http.StatusPartialContent {
			body, _ := io.ReadAll(rsp.Body)
			return nil, fmt.Errorf("gremlin/http: status=%q, body=%q", rsp.Status, body)
		}
		if rsp.ContentLength > MaxResponseSize {
			return nil, errors.New("gremlin/http: context length exceeds limit")
		}
		br = rsp.Body
	}

	var rsp Response
	if err := graphson.NewDecoder(io.LimitReader(br, MaxResponseSize)).Decode(&rsp); err != nil {
		return nil, fmt.Errorf("gremlin/http: decoding response: %w", err)
	}
	return &rsp, nil
}

View on GitHub (pinned to 69d5d4deb1)

Solutions

  1. Add `.limit(N)` (or a range) to the traversal to shrink the result set
  2. Page through results using range/limit steps in a loop
  3. Raise MaxResponseSize if your workload legitimately needs larger responses and you have the memory

Example fix

// before
g.V().HasLabel("user").Iterate(ctx)
// after
g.V().HasLabel("user").Limit(1000).Iterate(ctx)
Defensive patterns

Strategy: try-catch

Validate before calling

// use LimitReader yourself to pre-check feasibility, or check expected result size via count() query first
g.V().HasLabel("user").Count().Iterate(ctx) // verify size before fetching

Try / catch

rsp, err := client.Traverse(ctx, t)
if err != nil && strings.Contains(err.Error(), "context length exceeds limit") {
  return retryWithLimit(ctx, t, 1000)
}

Prevention

When it happens

Trigger: A Gremlin query returning a result set large enough that the response Content-Length exceeds MaxResponseSize.

Common situations: Queries without a limit() step returning huge vertex sets; bulk exports through the Gremlin HTTP endpoint; large property values (blobs) in results.

Related errors


AI-assisted analysis of ent/ent@69d5d4deb1 (2026-09-03). Data as JSON: /api/errors/137b4f4f193e4ddb. Report an issue: GitHub.