hi yubiao :

I have a question, why we need `httpClientRequestBufferSize ` in
proxy, can you explain in detail?

Thanks,
Bo

Yubiao Feng <yubiao.f...@streamnative.io.invalid> 于2023年3月16日周四 00:11写道:

>
> Hi community
>
> I am starting a DISCUSS for "PIP-259: Make the config
> httpMaxRequestHeaderSize of the pulsar web server configurable".
>
> ### Motivation
>
> We have two ways to manage pulsar's resources:
> - By client API (Can manage some resources, such as `create topic`, `create
> subscriber`, and so on)
> - By admin API (Can manage all the resources)
>
> The `client API` has no limit on the request length. And the `admin API`
> has a limit on the request length(such as HTTP request line and HTTP
> request headers), this restriction is done by the built-in web container
> Jetty.
>
> Almost resources can be created by two APIs, but can only be modified and
> deleted by `admin API`. This causes us to be unable to modify or delete
> resources created by `client API` with too long a name because it exceeds
> Jetty's default HTTP request URI length limit.
>
> ### Goal
>
> #### 1. For web servers
> Provide a way to modify Jetty's `httpMaxRequestHeaderSize` configuration
> (involves two servers: the web server in pulsar and the web server in
> pulsar-proxy)
>
> #### 2.For the internal client in pulsar-proxy
> Provide a way to modify Jetty-client's `httpClientRequestBufferSize`
> configuration.
>
> Since the pulsar-proxy handles HTTP requests like this: `pulsar-admin.sh`
> -> `proxy web server` -> `(highlight) internal client in proxy` -> `pulsar
> web server`.
>
> When the internal client forwards a request, it forwards the request header
> and the request body, and all the data passes through a buffer( we call it
> Buf ), like this:
> - Receive a request
> - Put the request line and request headers input to the Buf.
> - <strong>(highlight)</strong>Flush the Buf ( If the data in the request
> line and request header exceeds the length of the buf, an error is reported
> )
> - Put the request body input to the Buf.
> - Flush the Buf if it is full.
>
> So we need a config to set the `buff size` of the Buf:
> `pulsar-proxy.conf.httpClientRequestBufferSize` -> `buf size of the
> internal client`.
>
> ### API Changes
>
> #### ServiceConfiguration.java
> ```java
>    @FieldContext(
>             category = CATEGORY_HTTP,
>             doc = """
>                 The maximum size in bytes of the request header.
>                 Larger headers will allow for more and/or larger cookies
> plus larger form content encoded in a URL.
>                 However, larger headers consume more memory and can make a
> server more vulnerable to denial of service
>                 attacks.
>               """
>     )
>    private int httpMaxRequestHeaderSize = 8 * 1024;
> ```
>
> #### ProxyConfiguration.java
>
> ```java
>     @FieldContext(
>         minValue = 1,
>         category = CATEGORY_HTTP,
>         doc = """
>                 The maximum size in bytes of the request header.
>                 Larger headers will allow for more and/or larger cookies
> plus larger form content encoded in a URL.
>                 However, larger headers consume more memory and can make a
> server more vulnerable to denial of service
>                 attacks.
>               """
>     )
>     private int httpMaxRequestHeaderSize = 8 * 1024;
>
>     @FieldContext(
>         minValue = 1,
>         category = CATEGORY_HTTP,
>         doc = """
>                  the size of the buffer used to write requests to Broker.
>                  if "httpMaxRequestHeaderSize" is large than
> "httpClientRequestBufferSize", will set
>                  "httpClientRequestBufferSize" to the value of
> "httpMaxRequestHeaderSize"
>               """
>     )
>     private int httpClientRequestBufferSize = httpMaxRequestHeaderSize;
> ```
>
> ### Anything else?
>
> This change should cherry-pick into the previous branches ( includes
> `2.9~2.11` )
>
> If the user uses the features `RETRY Topic` or `DLQ`, it is possible that
> pulsar will automatically create some topics with names that are too long
> and cannot be managed, the [scenario has been discussed in the email](
> https://lists.apache.org/thread/q1m23ckyy10wvtzy65v8bwqwnh7r0gc8) before
>
>
> Thanks
> Yubiao Feng

Reply via email to