aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorspacewander <[email protected]>2024-09-02 13:57:21 +0000
committerGustav Davidsson <[email protected]>2024-09-13 14:11:24 -0700
commit6c8e7aab731871e3573fd0035ebe168baca8f774 (patch)
treee9f90d19f2e656cac21bf11633f0424eb64bb685
parent2a4e152e8077a6316382c4a9d9d54d40925ab4e8 (diff)
downloadpingora-6c8e7aab731871e3573fd0035ebe168baca8f774.tar.gz
pingora-6c8e7aab731871e3573fd0035ebe168baca8f774.zip
document early_request_filter
Fix #363 --- updated Includes-commit: 204ddb02743445e6204858b4df3ea3f28fa1911c Includes-commit: 34c67f0acae52ce94a3a6d5696e0847e63b42be7 Replicated-from: https://github.com/cloudflare/pingora/pull/368 Signed-off-by: spacewander <[email protected]>
-rw-r--r--.bleep2
-rw-r--r--docs/user_guide/phase.md8
-rw-r--r--docs/user_guide/phase_chart.md3
-rw-r--r--pingora-proxy/src/proxy_trait.rs6
4 files changed, 12 insertions, 7 deletions
diff --git a/.bleep b/.bleep
index ae7e1e2..2835ccc 100644
--- a/.bleep
+++ b/.bleep
@@ -1 +1 @@
-265d5245705c6f762c7dd37536f9d1c61d2d8af9 \ No newline at end of file
+6923a7f31ed6fff1ddaf00ffb8dd56311042c395 \ No newline at end of file
diff --git a/docs/user_guide/phase.md b/docs/user_guide/phase.md
index a326496..46e9b5d 100644
--- a/docs/user_guide/phase.md
+++ b/docs/user_guide/phase.md
@@ -16,7 +16,8 @@ The pingora-proxy HTTP proxy framework supports highly programmable proxy behavi
Pingora-proxy allows users to insert arbitrary logic into the life of a request.
```mermaid
graph TD;
- start("new request")-->request_filter;
+ start("new request")-->early_request_filter;
+ early_request_filter-->request_filter;
request_filter-->upstream_peer;
upstream_peer-->Connect{{IO: connect to upstream}};
@@ -52,9 +53,12 @@ Pingora-proxy allows users to insert arbitrary logic into the life of a request.
* The reason both `upstream_response_*_filter()` and `response_*_filter()` exist is for HTTP caching integration reasons (still WIP).
-### `request_filter()`
+### `early_request_filter()`
This is the first phase of every request.
+This function is similar to `request_filter()` but executes before any other logic, including downstream module logic. The main purpose of this function is to provide finer-grained control of the behavior of the modules.
+
+### `request_filter()`
This phase is usually for validating request inputs, rate limiting, and initializing context.
### `proxy_upstream_filter()`
diff --git a/docs/user_guide/phase_chart.md b/docs/user_guide/phase_chart.md
index a7d01d4..a6b6a4e 100644
--- a/docs/user_guide/phase_chart.md
+++ b/docs/user_guide/phase_chart.md
@@ -1,7 +1,8 @@
Pingora proxy phases without caching
```mermaid
graph TD;
- start("new request")-->request_filter;
+ start("new request")-->early_request_filter;
+ early_request_filter-->request_filter;
request_filter-->upstream_peer;
upstream_peer-->Connect{{IO: connect to upstream}};
diff --git a/pingora-proxy/src/proxy_trait.rs b/pingora-proxy/src/proxy_trait.rs
index 2d99567..029ea58 100644
--- a/pingora-proxy/src/proxy_trait.rs
+++ b/pingora-proxy/src/proxy_trait.rs
@@ -69,9 +69,9 @@ pub trait ProxyHttp {
/// Handle the incoming request before any downstream module is executed.
///
- /// This function is similar to [Self::request_filter()] but execute before any other logic
- /// especially the downstream modules. The main purpose of this function is to provide finer
- /// grained control of behavior of the modules.
+ /// This function is similar to [Self::request_filter()] but executes before any other logic,
+ /// including downstream module logic. The main purpose of this function is to provide finer
+ /// grained control of the behavior of the modules.
///
/// Note that because this function is executed before any module that might provide access
/// control or rate limiting, logic should stay in request_filter() if it can in order to be