Skip to content

feat(proxy): support transport-owned upload pacing - #11

Closed
rkaplan-hub wants to merge 3 commits into
praxis-proxy:mainfrom
rkaplan-hub:fix/request-body-prefix-pacing
Closed

rkaplan-hub wants to merge 3 commits into
praxis-proxy:mainfrom
rkaplan-hub:fix/request-body-prefix-pacing

Conversation

@rkaplan-hub

@rkaplan-hub rkaplan-hub commented Nov 10, 2026 •

Copy link
Copy Markdown

Large filtered upload chunks currently have one release point, so an application cannot pace bounded portions at the upstream writer or retain ownership until those bytes are accepted.

Add an optional ProxyHttp::request_body_pacer hook returning an owned RequestBodyPacer. HTTP/1 retains it in the request pipe and admits prefixes while continuing to poll upstream responses. HTTP/2 admits prefixes at its DATA writer. Both paths preserve the final end marker and settle accepted payload on errors or cancellation.

Add an opt-in HTTP/1 controlled writer and HTTP/2 accepted-DATA counters so partial progress survives interrupted writes, excluding HTTP framing. The default pacing hook returns None.

This supports praxis-proxy/praxis#124 and the runtime/integration work in praxis-proxy/praxis#1510 and rkaplan-hub/praxis#1. Praxis pins the exact fork revision until this API is released.

Validation:

  • 81 standalone proxy unit tests passed with Rustls, including bounded-prefix/EOS handling, cancelled admission, and reading an early upstream response while upload admission waits.
  • Four focused core tests passed: partial content-length/chunked writes, flush failure, cancellation-safe client counters, and HTTP/2 DATA progress before timeout.
  • Praxis integration with the exact source pin passed 18 live bandwidth tests on Pingora, including oversized upload prefixes, HTTP/2 upstream uploads, compression, sharing, resets, and the HTTP/TCP example.
  • 877 Praxis protocol unit tests passed (two existing tests ignored). Runtime checks passed: 60 bandwidth tests, 107 callout tests, and controlled uploads on both network backends.
  • Praxis strict checks passed for the Pingora transport and protocol, with bandwidth enabled and disabled. Pinned-nightly formatting passes.

@coderabbitai

coderabbitai Bot commented Nov 10, 2026 •

Copy link
Copy Markdown

Important

  • Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Central YAML; Path: .coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 5bfc55cd-cad8-47c1-9071-51b7c0ab6e3c

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

Signed-off-by: kaplan <rkaplan@redhat.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant